semantifold 0.11.0 → 0.13.0

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 (71) hide show
  1. package/README.md +2 -1
  2. package/build/src/backends/c.d.ts +2 -1
  3. package/build/src/backends/c.d.ts.map +1 -1
  4. package/build/src/backends/c.js +26 -5
  5. package/build/src/backends/cpp.js +3 -1
  6. package/build/src/backends/effects.js +3 -2
  7. package/build/src/backends/java.js +33 -14
  8. package/build/src/backends/javascript.js +83 -18
  9. package/build/src/backends/ordered-expressions.d.ts +19 -7
  10. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  11. package/build/src/backends/ordered-expressions.js +46 -11
  12. package/build/src/backends/php.js +33 -14
  13. package/build/src/backends/ruby.js +37 -12
  14. package/build/src/backends/shared.d.ts.map +1 -1
  15. package/build/src/backends/shared.js +92 -37
  16. package/build/src/backends/typescript.js +83 -18
  17. package/build/src/frontends/c.d.ts +34 -1
  18. package/build/src/frontends/c.d.ts.map +1 -1
  19. package/build/src/frontends/c.js +128 -21
  20. package/build/src/frontends/java.d.ts +8 -0
  21. package/build/src/frontends/java.d.ts.map +1 -1
  22. package/build/src/frontends/java.js +77 -33
  23. package/build/src/frontends/javascript-typescript.d.ts +2 -0
  24. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  25. package/build/src/frontends/javascript-typescript.js +118 -37
  26. package/build/src/frontends/php.d.ts +8 -0
  27. package/build/src/frontends/php.d.ts.map +1 -1
  28. package/build/src/frontends/php.js +68 -29
  29. package/build/src/frontends/ruby.d.ts +3 -0
  30. package/build/src/frontends/ruby.d.ts.map +1 -1
  31. package/build/src/frontends/ruby.js +103 -30
  32. package/build/src/language-registry.d.ts.map +1 -1
  33. package/build/src/language-registry.js +16 -1
  34. package/build/src/semantic/effects.d.ts.map +1 -1
  35. package/build/src/semantic/effects.js +18 -6
  36. package/build/src/semantic/lifetime.js +28 -4
  37. package/build/src/semantic/provenance.d.ts.map +1 -1
  38. package/build/src/semantic/provenance.js +26 -7
  39. package/build/src/semantic/types.d.ts +76 -16
  40. package/build/src/semantic/types.d.ts.map +1 -1
  41. package/build/src/semantic/types.js +23 -7
  42. package/build/src/semantic/validate.d.ts.map +1 -1
  43. package/build/src/semantic/validate.js +106 -35
  44. package/docs/adr/20261026-typed-error-handling-extension.md +55 -0
  45. package/docs/adr-numeric-tower.md +156 -0
  46. package/docs/architecture.md +1 -1
  47. package/docs/c.md +1 -1
  48. package/docs/language-support.md +10 -9
  49. package/docs/testing.md +8 -5
  50. package/package.json +1 -1
  51. package/src/backends/c.js +23 -4
  52. package/src/backends/cpp.js +1 -0
  53. package/src/backends/effects.js +2 -1
  54. package/src/backends/java.js +33 -14
  55. package/src/backends/javascript.js +83 -18
  56. package/src/backends/ordered-expressions.js +46 -10
  57. package/src/backends/php.js +33 -14
  58. package/src/backends/ruby.js +36 -12
  59. package/src/backends/shared.js +89 -42
  60. package/src/backends/typescript.js +83 -18
  61. package/src/frontends/c.js +135 -19
  62. package/src/frontends/java.js +82 -33
  63. package/src/frontends/javascript-typescript.js +130 -38
  64. package/src/frontends/php.js +68 -27
  65. package/src/frontends/ruby.js +107 -28
  66. package/src/language-registry.js +15 -0
  67. package/src/semantic/effects.js +17 -5
  68. package/src/semantic/lifetime.js +29 -3
  69. package/src/semantic/provenance.js +27 -12
  70. package/src/semantic/types.js +24 -6
  71. package/src/semantic/validate.js +105 -36
@@ -25,7 +25,7 @@ const binaryOperationSyntax = Object.freeze({
25
25
  StringEqual: Object.freeze({ default: "==", strict: "===" }),
26
26
  StringNotEqual: Object.freeze({ default: "!=", strict: "!==" })
27
27
  });
28
- const task005Languages = new Set(["php", "ruby", "javascript", "typescript", "java", "dart", "zig"]);
28
+ const task005Languages = new Set(["php", "ruby", "javascript", "typescript", "java", "c", "dart", "zig"]);
29
29
  const task006Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
30
30
  const task007Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
31
31
  const task008Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
@@ -596,7 +596,9 @@ function rejectBlockConditionLoop(block, language, seen = new Set()) {
596
596
  }
597
597
  else if (kind == "TryStatement") {
598
598
  rejectBlockConditionLoop(Reflect.get(statement, "body"), language, seen);
599
- rejectBlockConditionLoop(Reflect.get(statement, "catchBody"), language, seen);
599
+ for (const handler of Reflect.get(statement, "handlers") ?? [])
600
+ rejectBlockConditionLoop(Reflect.get(handler, "catchBody"), language, seen);
601
+ rejectBlockConditionLoop(Reflect.get(statement, "finallyBody"), language, seen);
600
602
  }
601
603
  }
602
604
  }
@@ -628,7 +630,9 @@ function rejectBlockIteration(block, language, seen = new Set()) {
628
630
  }
629
631
  else if (kind == "TryStatement") {
630
632
  rejectBlockIteration(Reflect.get(statement, "body"), language, seen);
631
- rejectBlockIteration(Reflect.get(statement, "catchBody"), language, seen);
633
+ for (const handler of Reflect.get(statement, "handlers") ?? [])
634
+ rejectBlockIteration(Reflect.get(handler, "catchBody"), language, seen);
635
+ rejectBlockIteration(Reflect.get(statement, "finallyBody"), language, seen);
632
636
  }
633
637
  }
634
638
  }
@@ -685,7 +689,10 @@ function rejectBlockOptionalTypes(block, language) {
685
689
  rejectBlockOptionalTypes(statement.body, language);
686
690
  if (statement.kind == "TryStatement") {
687
691
  rejectBlockOptionalTypes(statement.body, language);
688
- rejectBlockOptionalTypes(statement.catchBody, language);
692
+ for (const handler of statement.handlers ?? [])
693
+ rejectBlockOptionalTypes(handler.catchBody, language);
694
+ if (statement.finallyBody)
695
+ rejectBlockOptionalTypes(statement.finallyBody, language);
689
696
  }
690
697
  }
691
698
  }
@@ -763,7 +770,10 @@ function rejectBlockCollectionTypes(block, language) {
763
770
  rejectBlockCollectionTypes(statement.body, language);
764
771
  if (statement.kind == "TryStatement") {
765
772
  rejectBlockCollectionTypes(statement.body, language);
766
- rejectBlockCollectionTypes(statement.catchBody, language);
773
+ for (const handler of statement.handlers ?? [])
774
+ rejectBlockCollectionTypes(handler.catchBody, language);
775
+ if (statement.finallyBody)
776
+ rejectBlockCollectionTypes(statement.finallyBody, language);
767
777
  }
768
778
  }
769
779
  }
@@ -828,8 +838,12 @@ function validateScaffoldingNames(module, language) {
828
838
  }
829
839
  }
830
840
  }
831
- if (statement.kind == "TryStatement" && ownedPrintReceiverNames.has(statement.catchBinding.name)) {
832
- unsupportedCapability(language, `${owner} catch binding '${statement.catchBinding.name}' captures backend scaffolding`, statement.catchBinding.location);
841
+ if (statement.kind == "TryStatement") {
842
+ for (const handler of statement.handlers ?? []) {
843
+ if (ownedPrintReceiverNames.has(handler.catchBinding.name)) {
844
+ unsupportedCapability(language, `${owner} catch binding '${handler.catchBinding.name}' captures backend scaffolding`, handler.catchBinding.location);
845
+ }
846
+ }
833
847
  }
834
848
  }
835
849
  };
@@ -847,8 +861,12 @@ function validateScaffoldingNames(module, language) {
847
861
  }
848
862
  }
849
863
  }
850
- if (statement.kind == "TryStatement" && ownedEntryNames.has(statement.catchBinding.name)) {
851
- unsupportedCapability(language, `entry catch binding '${statement.catchBinding.name}' captures backend scaffolding`, statement.catchBinding.location);
864
+ if (statement.kind == "TryStatement") {
865
+ for (const handler of statement.handlers ?? []) {
866
+ if (ownedEntryNames.has(handler.catchBinding.name)) {
867
+ unsupportedCapability(language, `entry catch binding '${handler.catchBinding.name}' captures backend scaffolding`, handler.catchBinding.location);
868
+ }
869
+ }
852
870
  }
853
871
  }
854
872
  for (const declaration of module.functions) {
@@ -907,8 +925,11 @@ function validateRecordConstructorNames(module, language) {
907
925
  }
908
926
  }
909
927
  }
910
- if (statement.kind == "TryStatement" && recordNames.has(statement.catchBinding.name)) {
911
- unsupportedCapability(language, `${owner} catch binding '${statement.catchBinding.name}' captures nominal constructor`, bindingNameLocation(statement.catchBinding));
928
+ if (statement.kind == "TryStatement") {
929
+ const captured = (statement.handlers ?? []).find((handler) => recordNames.has(handler.catchBinding.name));
930
+ if (captured) {
931
+ unsupportedCapability(language, `${owner} catch binding '${captured.catchBinding.name}' captures nominal constructor`, bindingNameLocation(captured.catchBinding));
932
+ }
912
933
  }
913
934
  }
914
935
  };
@@ -1000,11 +1021,15 @@ function validateJavaUtilFactoryNames(module) {
1000
1021
  }
1001
1022
  if (statement.kind == "TryStatement") {
1002
1023
  validateBlockNames(statement.body, capture, owner);
1003
- const catchCapture = statement.catchBinding.name == "java" ? {
1004
- detail: `${owner} catch binding 'java' captures java.util factory syntax`,
1005
- location: statement.catchBinding.location
1006
- } : capture;
1007
- validateBlockNames(statement.catchBody, catchCapture, owner);
1024
+ for (const handler of statement.handlers ?? []) {
1025
+ const catchCapture = handler.catchBinding.name == "java" ? {
1026
+ detail: `${owner} catch binding 'java' captures java.util factory syntax`,
1027
+ location: handler.catchBinding.location
1028
+ } : capture;
1029
+ validateBlockNames(handler.catchBody, catchCapture, owner);
1030
+ }
1031
+ if (statement.finallyBody)
1032
+ validateBlockNames(statement.finallyBody, capture, owner);
1008
1033
  }
1009
1034
  }
1010
1035
  };
@@ -1158,8 +1183,11 @@ function allStatements(block) {
1158
1183
  }
1159
1184
  if (statement.kind == "WhileStatement")
1160
1185
  return [statement, ...allStatements(statement.body)];
1161
- if (statement.kind == "TryStatement")
1162
- return [statement, ...allStatements(statement.body), ...allStatements(statement.catchBody)];
1186
+ if (statement.kind == "TryStatement") {
1187
+ return [statement, ...allStatements(statement.body),
1188
+ ...(statement.handlers ?? []).flatMap((handler) => allStatements(handler.catchBody)),
1189
+ ...(statement.finallyBody ? allStatements(statement.finallyBody) : [])];
1190
+ }
1163
1191
  return [statement];
1164
1192
  });
1165
1193
  }
@@ -1212,7 +1240,9 @@ function collectLoopOwners(module, language) {
1212
1240
  }
1213
1241
  else if (kind == "TryStatement") {
1214
1242
  visit(Reflect.get(statement, "body"), owner, path);
1215
- visit(Reflect.get(statement, "catchBody"), owner, path);
1243
+ for (const handler of Reflect.get(statement, "handlers") ?? [])
1244
+ visit(Reflect.get(handler, "catchBody"), owner, path);
1245
+ visit(Reflect.get(statement, "finallyBody"), owner, path);
1216
1246
  }
1217
1247
  }
1218
1248
  }
@@ -1461,28 +1491,52 @@ function validateStatement(statement, language, ownerLocation, loopContext, acti
1461
1491
  validateExpression(raised.message, language, raised.location, false, new Set(), externalDeclarationIds);
1462
1492
  return;
1463
1493
  }
1494
+ if (kind == "RethrowStatement") {
1495
+ const rethrow = /** @type {import("../semantic/types.js").RethrowStatement} */ (statement);
1496
+ const rethrowLocation = requireSemanticLocation(ownLocation, language, "RethrowStatement location", ownerLocation);
1497
+ if (Object.keys(rethrow).filter((key) => key != "sourceProvenance").sort().join(",") != "binding,bindingNode,kind,location" ||
1498
+ typeof rethrow.binding != "string" || rethrow.binding.length == 0 ||
1499
+ !rethrow.bindingNode || rethrow.bindingNode.kind != "CatchBinding" || rethrow.bindingNode.name != rethrow.binding) {
1500
+ unsupportedCapability(language, "malformed RethrowStatement", rethrowLocation);
1501
+ }
1502
+ validateTargetBindingIdentifier(language, rethrow.binding, "catch binding", rethrowLocation);
1503
+ return;
1504
+ }
1464
1505
  if (kind == "TryStatement") {
1465
- const handler = /** @type {import("../semantic/types.js").TryStatement} */ (statement);
1506
+ const tryStatement = /** @type {import("../semantic/types.js").TryStatement} */ (statement);
1466
1507
  const tryLocation = requireSemanticLocation(ownLocation, language, "TryStatement location", ownerLocation);
1467
- const fields = Object.keys(handler).filter((key) => key != "sourceProvenance").sort().join(",");
1468
- if (fields != "body,catchBinding,catchBody,catchType,kind,location") {
1508
+ const fields = Object.keys(tryStatement).filter((key) => key != "sourceProvenance").sort().join(",");
1509
+ if (fields != "body,handlers,kind,location" && fields != "body,finallyBody,handlers,kind,location") {
1469
1510
  unsupportedCapability(language, "malformed TryStatement", tryLocation);
1470
1511
  }
1471
- validateErrorTypeShape(handler.catchType, language, tryLocation);
1472
- const binding = handler.catchBinding;
1473
- const bindingFields = binding && typeof binding == "object" && !Array.isArray(binding)
1474
- ? Object.keys(binding).filter((key) => key != "sourceProvenance").sort().join(",") : "";
1475
- const bindingLocation = requireSemanticLocation(binding?.location, language, "catch binding location", tryLocation);
1476
- if (!binding || binding.kind != "CatchBinding" || bindingFields != "kind,location,mutable,name,type" || binding.mutable !== false) {
1477
- unsupportedCapability(language, "malformed catch binding", bindingLocation);
1512
+ if (!Array.isArray(tryStatement.handlers) || (tryStatement.handlers.length == 0 && !tryStatement.finallyBody)) {
1513
+ unsupportedCapability(language, "TryStatement without an ordered handler list", tryLocation);
1478
1514
  }
1479
- validateTargetBindingIdentifier(language, binding.name, "catch binding", bindingLocation);
1480
- validateErrorTypeShape(binding.type, language, bindingLocation);
1481
- if (binding.type.declarationId != handler.catchType.declarationId) {
1482
- unsupportedCapability(language, "catch binding type mismatch", bindingLocation);
1515
+ validateBlock(tryStatement.body, language, tryLocation, loopContext, activePath, externalDeclarationIds);
1516
+ for (const handler of tryStatement.handlers) {
1517
+ const handlerLocation = requireSemanticLocation(handler?.location, language, "catch handler location", tryLocation);
1518
+ const handlerFields = handler && typeof handler == "object" && !Array.isArray(handler)
1519
+ ? Object.keys(handler).filter((key) => key != "sourceProvenance").sort().join(",") : "";
1520
+ if (!handler || handler.kind != "CatchHandler" || handlerFields != "catchBinding,catchBody,catchType,kind,location") {
1521
+ unsupportedCapability(language, "malformed catch handler", handlerLocation);
1522
+ }
1523
+ validateErrorTypeShape(handler.catchType, language, handlerLocation);
1524
+ const binding = handler.catchBinding;
1525
+ const bindingFields = binding && typeof binding == "object" && !Array.isArray(binding)
1526
+ ? Object.keys(binding).filter((key) => key != "sourceProvenance").sort().join(",") : "";
1527
+ const bindingLocation = requireSemanticLocation(binding?.location, language, "catch binding location", handlerLocation);
1528
+ if (!binding || binding.kind != "CatchBinding" || bindingFields != "kind,location,mutable,name,type" || binding.mutable !== false) {
1529
+ unsupportedCapability(language, "malformed catch binding", bindingLocation);
1530
+ }
1531
+ validateTargetBindingIdentifier(language, binding.name, "catch binding", bindingLocation);
1532
+ validateErrorTypeShape(binding.type, language, bindingLocation);
1533
+ if (binding.type.declarationId != handler.catchType.declarationId) {
1534
+ unsupportedCapability(language, "catch binding type mismatch", bindingLocation);
1535
+ }
1536
+ validateBlock(handler.catchBody, language, handlerLocation, loopContext, activePath, externalDeclarationIds);
1483
1537
  }
1484
- validateBlock(handler.body, language, tryLocation, loopContext, activePath, externalDeclarationIds);
1485
- validateBlock(handler.catchBody, language, tryLocation, loopContext, activePath, externalDeclarationIds);
1538
+ if (tryStatement.finallyBody)
1539
+ validateBlock(tryStatement.finallyBody, language, tryLocation, loopContext, activePath, externalDeclarationIds);
1486
1540
  return;
1487
1541
  }
1488
1542
  unsupportedCapability(language, `statement ${kind}`, location);
@@ -2541,7 +2595,8 @@ function blockContainsSignProducingOperation(block) {
2541
2595
  return expressionContainsSignProducingOperation(statement.condition) || blockContainsSignProducingOperation(statement.body);
2542
2596
  }
2543
2597
  if (statement.kind == "TryStatement") {
2544
- return blockContainsSignProducingOperation(statement.body) || blockContainsSignProducingOperation(statement.catchBody);
2598
+ return blockContainsSignProducingOperation(statement.body) || (statement.handlers ?? []).some((handler) => blockContainsSignProducingOperation(handler.catchBody)) ||
2599
+ (statement.finallyBody ? blockContainsSignProducingOperation(statement.finallyBody) : false);
2545
2600
  }
2546
2601
  if (statement.kind == "RaiseStatement")
2547
2602
  return expressionContainsSignProducingOperation(statement.error.message);
@@ -2614,4 +2669,4 @@ function binaryOperationSpelling(operation, language) {
2614
2669
  return syntax.strict;
2615
2670
  return syntax.default;
2616
2671
  }
2617
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4SCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlELDhGQUE4RjtBQUM5RixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0FBQ2pGLG9LQUFvSztBQUNwSyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDakQseUJBQXlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUM5QyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3RELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQzlDLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzFELGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7Q0FDOUQsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDcEcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ2hHLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDNUksTUFBTSw4QkFBOEIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUM3QyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsYUFBYTtJQUMxRyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFNBQVM7Q0FDbkcsQ0FBQyxDQUFBO0FBQ0YsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhO0lBQzFHLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNO0NBQ3pELENBQUMsQ0FBQTtBQUNGLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDakQsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWTtJQUM5RyxRQUFRLEVBQUUsWUFBWSxFQUFFLGdCQUFnQjtDQUN6QyxDQUFDLENBQUE7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsRUFBRTtJQUNsRSxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDaEYsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRO1FBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzFGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLFFBQVE7UUFDaEcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksWUFBWTtRQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDL0gsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQTtJQUN0QyxNQUFNLE9BQU8sR0FBRyxlQUFlLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQTtJQUNwRSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFBO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLGVBQWUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFBO0lBQ3BFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUE7SUFDcEMsTUFBTSxNQUFNLEdBQUcsY0FBYyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUE7SUFFakUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN2SCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaURBQWlELEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDckgsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPO1FBQ25ELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2SCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaURBQWlELEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3JHLENBQUM7SUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdkUscUJBQXFCLENBQUMsUUFBUSxFQUFFLG1EQUFtRCxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN2RyxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFELHFCQUFxQixDQUFDLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyRyxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFELHFCQUFxQixDQUFDLFFBQVEsRUFBRSx1REFBdUQsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuSSxDQUFDO0lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDeEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDckYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSwwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDakYscUJBQXFCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMzRSw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDaEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDMUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDNUUsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRXRELEtBQUssTUFBTSxXQUFXLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbEMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFDcEYsRUFBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBQzlHLEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUNsRCxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUMvRixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQ3hFLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUN4RyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUNsQyxNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFeEMsS0FBSyxNQUFNLG1CQUFtQixJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsbUJBQW1CLElBQUksT0FBTyxtQkFBbUIsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUN0RyxtQkFBbUIsQ0FBQyxJQUFJLElBQUkscUJBQXFCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEcscUJBQXFCLENBQUMsUUFBUSxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM3RixDQUFDO1FBQ0QsK0JBQStCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDN0csSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsdUJBQXVCLG1CQUFtQixDQUFDLElBQUksR0FBRyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ25ILENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUMsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLElBQUksS0FBSztZQUM3QyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyRixDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFBO1FBRTVCLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztZQUN0RCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsbUNBQW1DLG1CQUFtQixDQUFDLElBQUksR0FBRyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9ILENBQUM7UUFDRCxzQkFBc0IsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUNqRCxJQUFJLE9BQU8sbUJBQW1CLENBQUMsRUFBRSxJQUFJLFFBQVEsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDeEgsY0FBYyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzdDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxvREFBb0QsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNySCxDQUFDO1FBQ0QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMxQyw0QkFBNEIsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUUzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEYscUJBQXFCLENBQUMsUUFBUSxFQUFFLHlDQUF5QyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzFHLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksZUFBZTtZQUM1RixtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2hELHFCQUFxQixDQUFDLFFBQVEsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNoRyxDQUFDO1FBQ0QsYUFBYSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUM1RSxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRTFHLEtBQUssTUFBTSxTQUFTLElBQUksbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUM1RyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsOEJBQThCLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDL0YsQ0FBQztZQUNELCtCQUErQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDNUYsQ0FBQztJQUNILENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNsRix3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDMUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUNyQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtRQUN2QyxPQUFPLEVBQUUsT0FBTyxDQUFDLGNBQWM7UUFDL0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1FBQzdCLFNBQVMsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO1FBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsY0FBYztLQUNoQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxRQUFRO0lBQ2xELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRXZDLElBQUksSUFBSTtRQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ2pJLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtJQUNqRCxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQzNFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sU0FBUyxHQUFHLHNDQUFzQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFaEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUN2SCxDQUFDO0lBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFN0MsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUE7SUFDekIsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsaUJBQWlCLENBQUMsNERBQTRELENBQUMsTUFBTTtBQUM1Riw2REFBNkQsQ0FBQyxRQUFRO0lBQ3RFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDeEgsQ0FBQztJQUNELEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLFNBQVM7UUFBRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzlGLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQ3pELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLEtBQUs7QUFDekQsNkRBQTZELENBQUMsUUFBUTtBQUN0RSwwQkFBMEIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7SUFDM0MsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU07SUFDekYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNmLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBRW5ELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU07SUFDdEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sU0FBUyxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUFFLFNBQVE7UUFDcEYsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUMzRyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQ2xFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzRixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNwRCxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDM0UscUJBQXFCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQzVFLENBQUM7YUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFILHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN2RSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsb0JBQW9CO0FBQzNCLGdFQUFnRSxDQUFDLE1BQU07QUFDdkUsaUVBQWlFLENBQUMsT0FBTztBQUN6RSxtRUFBbUUsQ0FBQyxTQUFTO0FBQzdFLDZEQUE2RCxDQUFDLFFBQVE7QUFDdEUsNERBQTRELENBQUMsY0FBYztJQUUzRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDaEgsTUFBTSxTQUFTLEdBQUcsUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RixRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUV2RyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDMUUsTUFBTSxNQUFNLEdBQUcsV0FBVyxJQUFJLE9BQU8sV0FBVyxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3pGLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFN0YsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLFdBQVcsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUUsV0FBVyxDQUFDLElBQUksSUFBSSxrQkFBa0IsSUFBSSxNQUFNLElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUM5RSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsc0NBQXNDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkYsQ0FBQztRQUNELHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ3JHLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM5RSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxTQUFTLEtBQUssRUFBRTtZQUNyQyxDQUFDLElBQUksTUFBTSxDQUFDLDRCQUE0QixLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEgscUJBQXFCLENBQUMsUUFBUSxFQUFFLGlEQUFpRCxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxRyxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQTtRQUV4RixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3RCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDNUcsQ0FBQztRQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjO0lBQ3pFLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU3QixLQUFLLE1BQU0sV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQUUsU0FBUTtRQUMxRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUU3QyxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVE7WUFBRSxTQUFRO1FBQ3JDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsS0FBSyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNuQyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUM5RSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDakYsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVOLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxtQkFBbUI7WUFDckcsQ0FBQyxDQUFDLDhCQUE4QixFQUFFLDZDQUE2QyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hJLHFCQUFxQixDQUFDLFFBQVEsRUFBRSx1Q0FBdUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNwRixDQUFDO1FBQ0QsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsNkJBQTZCLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDakcsNEJBQTRCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3BFLElBQUksT0FBTyxNQUFNLENBQUMsRUFBRSxJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLGtDQUFrQyxXQUFXLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwSCxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxrREFBa0QsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdEcsQ0FBQztRQUNELGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzdCLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM5QyxNQUFNLFVBQVUsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFBO1FBRTlFLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaUNBQWlDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbEksV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRTVCLEtBQUssSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUN2QyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUMxRSxNQUFNLFNBQVMsR0FBRyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDaEYsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUVOLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxhQUFhO2dCQUMzRixTQUFTLElBQUksNEJBQTRCLEVBQUUsQ0FBQztnQkFDNUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLGlDQUFpQyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1lBQ25GLENBQUM7WUFDRCx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDM0YsSUFBSSxLQUFLLENBQUMsRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsVUFBVSxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUNuRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsNENBQTRDLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQy9GLENBQUM7WUFDRCx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzlFLE1BQU0sU0FBUyxHQUFHLFFBQVEsSUFBSSxZQUFZLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUMxRyxRQUFRLElBQUksWUFBWSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDMUYsUUFBUSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzlELFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZILFFBQVEsSUFBSSxNQUFNLElBQUksa0NBQWtDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7WUFFakYsSUFBSSxTQUFTO2dCQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSwyQkFBMkIsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN4RyxNQUFNLFVBQVUsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFBO1lBRTVFLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLGtDQUFrQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ2hJLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDNUIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWM7SUFDbEcsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU3QixLQUFLLE1BQU0sV0FBVyxJQUFJLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQUUsU0FBUTtRQUMxRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUU3QyxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVE7WUFBRSxTQUFRO1FBQ3JDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsS0FBSyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN2QyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQzFFLE1BQU0sSUFBSSxHQUFHLFdBQVcsSUFBSSxPQUFPLFdBQVcsSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUN2RixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRTdGLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxrQkFBa0I7WUFDeEQsQ0FBQyxDQUFDLGtEQUFrRCxFQUFFLDREQUE0RCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNsSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDekcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxpQ0FBaUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxnREFBZ0QsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM3RixDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxVQUFVO1lBQ2xGLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksZUFBZSxJQUFJLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksUUFBUTtnQkFDbkcsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3ZELHFCQUFxQixDQUFDLFFBQVEsRUFBRSw4Q0FBOEMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMzRixDQUFDO1FBQ0QsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxzQ0FBc0MsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUUzSSw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1FBQzdFLE1BQU0sVUFBVSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUE7UUFFeEYsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw4QkFBOEIsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUE7UUFDeEksV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRTVCLEtBQUssSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakYsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUM1QyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ25FLE1BQU0sU0FBUyxHQUFHLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDMUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUV2RixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksY0FBYyxJQUFJLFNBQVMsSUFBSSw0QkFBNEI7Z0JBQ3JGLEtBQUssQ0FBQyxFQUFFLElBQUksR0FBRyxXQUFXLENBQUMsRUFBRSxVQUFVLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ3RELHFCQUFxQixDQUFDLFFBQVEsRUFBRSxrQ0FBa0MsRUFBRSxhQUFhLENBQUMsQ0FBQTtZQUNwRixDQUFDO1lBQ0QsTUFBTSxrQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1lBRTNILHdCQUF3QixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1lBQ25GLE1BQU0sVUFBVSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUE7WUFFNUUsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsbUNBQW1DLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1lBQ3JJLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDNUIsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUE7UUFDM0MsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQy9FLE1BQU0sZUFBZSxHQUFHLFdBQVcsSUFBSSxPQUFPLFdBQVcsSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNsRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRTdGLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSx3QkFBd0I7WUFDOUQsQ0FBQyxDQUFDLGtDQUFrQyxFQUFFLHFEQUFxRCxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztZQUN0SCxXQUFXLENBQUMsRUFBRSxJQUFJLEdBQUcsV0FBVyxDQUFDLEVBQUUsY0FBYyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzdGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw0Q0FBNEMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1FBQ3BHLENBQUM7UUFDRCxNQUFNLHdCQUF3QixHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGtDQUFrQyxFQUFFLG1CQUFtQixDQUFDLENBQUE7UUFFakosZ0NBQWdDLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixDQUFDLENBQUE7UUFDM0csTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUU3QixLQUFLLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDL0MsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUNyRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQzlFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFFeEYsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLG1CQUFtQjtnQkFDL0MsQ0FBQyxDQUFDLGtEQUFrRDtvQkFDbEQscUVBQXFFLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUM3RixNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsV0FBVyxDQUFDLEVBQUUsV0FBVyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDN0YscUJBQXFCLENBQUMsUUFBUSxFQUFFLHVDQUF1QyxFQUFFLGNBQWMsQ0FBQyxDQUFBO1lBQzFGLENBQUM7WUFDRCxNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLDZCQUE2QixFQUFFLG1CQUFtQixDQUFDLENBQUE7WUFDbEksTUFBTSxhQUFhLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDM0YsUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtZQUVsRixJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSx3Q0FBd0MsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUE7WUFDOUcsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUM1RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdELFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDOUQsUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7WUFFcEgsSUFBSSxZQUFZO2dCQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw4QkFBOEIsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUE7WUFDcEgsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDM0YscUJBQXFCLENBQUMsUUFBUSxFQUFFLHNCQUFzQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtnQkFDcEcsQ0FBQztZQUNILENBQUM7O2dCQUFNLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1lBQ3JGLE1BQU0sVUFBVSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUE7WUFFOUUsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1lBQ2pJLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzNELHFCQUFxQixDQUFDLFFBQVEsRUFBRSxrQ0FBa0MsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUE7WUFDeEcsQ0FBQztZQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDM0IsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUE7UUFDOUYsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsZ0NBQWdDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsYUFBYTtJQUNsRixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDdkUsTUFBTSxJQUFJLEdBQUcsU0FBUyxJQUFJLE9BQU8sU0FBUyxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFM0YsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUkseUJBQXlCLEVBQUUsQ0FBQztZQUNyRixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLEtBQUssWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BGLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUsscUJBQXFCLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFFekgsK0JBQStCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxRQUFRO0lBQ3pELElBQUksV0FBVyxDQUFDLGNBQWMsS0FBSyxTQUFTO1FBQUUsT0FBTTtJQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQzlDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxnREFBZ0QsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDekcsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDdkI7Ozs7T0FJRztJQUNILE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUN6QixXQUFXLENBQUMsSUFBSTtRQUNoQixHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztLQUNuSCxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBRWpCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDMUUsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuRCxNQUFNLElBQUksR0FBRyxTQUFTLElBQUksT0FBTyxTQUFTLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDakYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUUzRixJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZUFBZSxJQUFJLElBQUksSUFBSSx1QkFBdUI7WUFDcEYsU0FBUyxDQUFDLEVBQUUsSUFBSSxHQUFHLFdBQVcsQ0FBQyxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsK0NBQStDLEVBQUUsU0FBUyxFQUFFLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDL0gsQ0FBQztRQUNELHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN0Ryw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDMUUsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU1QyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hELHFCQUFxQixDQUFDLFFBQVEsRUFBRSxvQ0FBb0MsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM1RyxDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN2QixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLE1BQU07SUFDckMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDekUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDeEYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsUUFBUTtJQUNqRCxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxvQkFBb0IsQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDL0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztZQUNsQyxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzFCLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUN4RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxRQUFRO0lBQ3RELEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNDLHdCQUF3QixDQUFDLFdBQVcsSUFBSSxPQUFPLFdBQVcsSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNuRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQUNELHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQzVELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHdCQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO0lBQ2pFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFNO0lBQ3pGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDZixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUVuRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFNO0lBQ3RDLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFBRSxTQUFRO1FBQ3BGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzNDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFFdkcsSUFBSSxJQUFJLElBQUksZ0JBQWdCO1lBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLG9DQUFvQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzdHLElBQUksSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzFCLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUM5RSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDL0UsQ0FBQzthQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMxRSxDQUFDO2FBQU0sSUFBSSxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbEMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQ3hFLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMvRSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO0lBQzdELElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFNO0lBQ3pGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDZixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUVuRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFNO0lBQ3RDLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFBRSxTQUFRO1FBQ3BGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzNDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFFdkcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEcscUJBQXFCLENBQUMsUUFBUSxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzlFLENBQUM7UUFDRCxJQUFJLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUMxQixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDMUUsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQzNFLENBQUM7YUFBTSxJQUFJLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNsQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDcEUsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQzNFLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUTtJQUMzQyxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sV0FBVyxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUFFLFNBQVE7UUFDMUYsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQTtRQUV4RSxJQUFJLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDNUUsQ0FBQztRQUNELEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUgsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDMUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLGtDQUFrQyxFQUFFLFNBQVMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUE7WUFDckcsQ0FBQztRQUNILENBQUM7UUFDRCx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUN0RSxDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDNUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUTtJQUMvQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUFFLE9BQU07SUFDMUgsS0FBSyxNQUFNLFNBQVMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQUUsU0FBUTtRQUNwRixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksb0JBQW9CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakYscUJBQXFCLENBQUMsUUFBUSxFQUFFLDhCQUE4QixFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNyRixDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDeEQsSUFBSSxTQUFTLENBQUMsU0FBUztnQkFBRSx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2xGLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQ3BGLElBQUksb0JBQW9CLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsMENBQTBDLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3BJLENBQUM7WUFDRCx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BELENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCO1lBQUUsd0JBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMxRixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7WUFDckMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUNsRCx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3pELENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO0lBQ2xELElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUMzRixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFdEMsSUFBSSxJQUFJLElBQUksY0FBYztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQ3ZDLElBQUksSUFBSSxJQUFJLFVBQVU7UUFBRSxPQUFPLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzNGLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksZ0JBQWdCO1FBQUUsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDaEgsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFFNUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxRQUFRO0lBQzdDLEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQUUsU0FBUTtRQUMxRixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFBO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBRXpELElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsMkNBQTJDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDeEYsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBRXpELEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRSxJQUFJLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7Z0JBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLDhDQUE4QyxFQUFFLFNBQVMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUE7UUFDeEosQ0FBQztRQUNELDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFDRCwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDBCQUEwQixDQUFDLEtBQUssRUFBRSxRQUFRO0lBQ2pELElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQUUsT0FBTTtJQUMxSCxLQUFLLE1BQU0sU0FBUyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFBRSxTQUFRO1FBQ3BGLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3RSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsMENBQTBDLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2pHLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7WUFDcEMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUMxRCxJQUFJLFNBQVMsQ0FBQyxTQUFTO2dCQUFFLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDcEYsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDcEYsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELHFCQUFxQixDQUFDLFFBQVEsRUFBRSxzREFBc0QsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDaEosQ0FBQztZQUNELDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDdEQsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0I7WUFBRSwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzVGLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNyQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ3BELDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDM0QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsSUFBSTtJQUM1QixPQUFPLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDcEUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsUUFBUTtJQUNoRCw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDaEQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNwRSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFBO0lBQ25ILE1BQU0sYUFBYSxHQUFHLFFBQVEsSUFBSSxLQUFLLElBQUksNEJBQTRCLENBQUMsTUFBTSxFQUFFLDBCQUEwQixDQUFDLENBQUE7SUFDM0csTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckYsTUFBTSxlQUFlLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3BGLE1BQU0sdUJBQXVCLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRyxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUE7SUFDcEYsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUgsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDL0IsUUFBUSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFVBQVU7U0FDOUgsQ0FBQyxDQUFDLENBQUM7WUFDRixRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUN4RSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUE7SUFDdkY7Ozs7O09BS0c7SUFDSCxNQUFNLHdCQUF3QixHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMzRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLElBQUksdUJBQXVCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLGVBQWUsU0FBUyxDQUFDLElBQUksZ0NBQWdDLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzVILENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxNQUFNLFNBQVMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksdUJBQXVCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4RixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLFdBQVcsU0FBUyxDQUFDLElBQUksZ0NBQWdDLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3hILENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksdUJBQXVCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDckcscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsS0FBSyx1QkFBdUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLGdDQUFnQyxFQUN4SCxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3BDLENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztnQkFDNUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ3JFLElBQUksdUJBQXVCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUM5QyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLHVCQUF1QixPQUFPLENBQUMsSUFBSSxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7b0JBQ2hJLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksY0FBYyxJQUFJLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2pHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssbUJBQW1CLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxnQ0FBZ0MsRUFDcEgsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELEtBQUssTUFBTSxTQUFTLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLGdDQUFnQyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNySCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw0QkFBNEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLGdDQUFnQyxFQUNySCxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3BDLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUM1QyxLQUFLLE1BQU0sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDckUsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN0QyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsNEJBQTRCLE9BQU8sQ0FBQyxJQUFJLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDN0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGNBQWMsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxnQ0FBZ0MsRUFDakgsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUNELEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sVUFBVSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUE7UUFFeEYsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsYUFBYSxXQUFXLENBQUMsSUFBSSxnQ0FBZ0MsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBQ3RJLENBQUM7UUFDRCxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLFNBQVMsR0FBRyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUUzRCxJQUFJLFNBQVMsSUFBSSxrQ0FBa0MsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDbkUscUJBQXFCLENBQ25CLFFBQVEsRUFDUixhQUFhLFNBQVMsZ0VBQWdFLEVBQ3RGLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUNyQyxDQUFBO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDaEYsQ0FBQztJQUNELEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMvQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUN6RyxLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxPQUFPO1lBQUUsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzlHLENBQUM7SUFDRCxJQUFJLFFBQVEsSUFBSSxNQUFNO1FBQUUsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsUUFBUTtJQUN0RCxJQUFJLFFBQVEsSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLFlBQVk7UUFBRSxPQUFNO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN0RCxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDaEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ3BELENBQUMsQ0FBQTtJQUVGOzs7OztPQUtHO0lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMxQyxLQUFLLE1BQU0sU0FBUyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdDLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM1RSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLFdBQVcsU0FBUyxDQUFDLElBQUksK0JBQStCLEVBQUUsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtZQUNuSSxDQUFDO1lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN6RixxQkFBcUIsQ0FDbkIsUUFBUSxFQUNSLEdBQUcsS0FBSyx1QkFBdUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLCtCQUErQixFQUN6RixtQkFBbUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQzVDLENBQUE7WUFDSCxDQUFDO1lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQzVDLEtBQUssTUFBTSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUNyRSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2xDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssdUJBQXVCLE9BQU8sQ0FBQyxJQUFJLCtCQUErQixFQUN4RyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO29CQUNqQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGNBQWMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDckYscUJBQXFCLENBQ25CLFFBQVEsRUFDUixHQUFHLEtBQUssbUJBQW1CLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxnQ0FBZ0MsRUFDdEYsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUM1QyxDQUFBO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNuRCxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSx1QkFBdUIsU0FBUyxDQUFDLElBQUksK0JBQStCLEVBQUUsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtZQUN2SSxDQUFDO1FBQ0gsQ0FBQztRQUNELGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUNELEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMvQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0QsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsMEJBQTBCLFNBQVMsQ0FBQyxJQUFJLGdDQUFnQyxFQUN0RyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBQ0Qsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDL0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDcEMscUJBQXFCLENBQUMsUUFBUSxFQUFFLHFCQUFxQixTQUFTLENBQUMsSUFBSSxnQ0FBZ0MsRUFDakcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtnQkFDbkMsQ0FBQztZQUNILENBQUM7WUFDRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzNDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDRCQUE0QixDQUFDLE1BQU07SUFDMUM7Ozs7OztPQU1HO0lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDckQsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFBO1FBRXZCLEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pDLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNyRSxPQUFPLEdBQUc7b0JBQ1IsTUFBTSxFQUFFLEdBQUcsS0FBSyxpREFBaUQ7b0JBQ2pFLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtpQkFDN0IsQ0FBQTtZQUNILENBQUM7WUFDRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzFELFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDckQsU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUMzRCxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7Z0NBQzVELFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQ0FDOUQsU0FBUyxDQUFDLElBQUksSUFBSSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dDQUN2RSxTQUFTLENBQUMsSUFBSSxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7NENBQzFELFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dEQUNwRyxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1lBRWxGLElBQUksT0FBTyxJQUFJLFVBQVUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUM7Z0JBQzdFLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7Z0JBQzNHLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUM7Z0JBQ2xELHNCQUFzQixDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELHFCQUFxQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNqRSxDQUFDO1lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNwQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDeEQsSUFBSSxTQUFTLENBQUMsU0FBUztvQkFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNsRixDQUFDO1lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQjtnQkFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUMxRixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxFQUFFLEdBQUcsS0FBSyw2REFBNkQ7b0JBQzdFLFFBQVEsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVE7aUJBQzFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtnQkFFWCxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN4RCxDQUFDO1lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQzVDLE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFBO2dCQUN2RyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLEVBQUUsR0FBRyxLQUFLLDZEQUE2RDtvQkFDN0UsUUFBUSxFQUFFLGVBQWUsQ0FBQyxRQUFRO2lCQUNuQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7Z0JBRVgsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDeEQsQ0FBQztZQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDckMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBQ2xELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzNELE1BQU0sRUFBRSxHQUFHLEtBQUsseURBQXlEO29CQUN6RSxRQUFRLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRO2lCQUMxQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7Z0JBRVgsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDOUQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDOUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUE7UUFDekUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLEVBQUUsNkRBQTZEO1lBQ3JFLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtTQUM3QixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFYixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBQ0QsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEVBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBQztZQUNqSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDO1NBQ3JJLENBQUE7UUFFRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFBO1lBQ3RFLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLHFEQUFxRDtnQkFDOUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO2FBQzdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtZQUViLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM1RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLElBQUk7SUFDaEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDbEUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztLQUNsRixDQUFDLENBQUE7SUFFRixPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDekgsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEUsU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxRCxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3JELFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDM0QsU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUM1RCxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0NBQzlELFNBQVMsQ0FBQyxJQUFJLElBQUksNEJBQTRCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQ0FDdkUsU0FBUyxDQUFDLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dDQUMxRCxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQzs0Q0FDcEcsU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUVsRixPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDdEUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNQLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLElBQUk7SUFDOUMsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUN4QyxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksaUJBQWlCO1FBQUUsT0FBTyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ2pHLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLE9BQU8sc0JBQXNCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3hHLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUMvQyxPQUFPLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQ3ZELHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO1lBQ25ELHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0I7UUFBRSxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMvSCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUM5QyxPQUFPLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLG9CQUFvQixJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUMxRixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN4RixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDN0UsT0FBTyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksYUFBYTtRQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3pILElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQzlFLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksc0JBQXNCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2pJLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksc0JBQXNCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUM5RyxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDN0MsT0FBTyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDNUcsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSwwQkFBMEI7UUFBRSxPQUFPLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDN0csSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGNBQWM7UUFBRSxPQUFPLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDNUYsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLG1CQUFtQixJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNsRixPQUFPLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLFdBQVc7SUFDMUMsT0FBTyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFBO0FBQzFFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxPQUFPO0lBQ2xDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQTtBQUNsRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsNEJBQTRCLENBQUMsV0FBVztJQUMvQyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUE7SUFFekIsS0FBSyxNQUFNLFNBQVMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQTtRQUUzQixJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBQzdFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxJQUFJLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFekUsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUM5QixjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRCxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxLQUFLO0lBQzFCLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUM1QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7WUFDcEMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDaEksQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDcEYsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN0RCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQjtZQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDNUYsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGNBQWM7WUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUVqSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDcEIsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDeEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFdEgsS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUM3RSxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUMxRyxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7SUFFYjs7Ozs7O09BTUc7SUFDSCxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUM3QyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTTtRQUMzRixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUVuRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFNO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTVCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDZixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUFFLFNBQVE7WUFDcEYsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFFbkQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2pGLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO2dCQUV2RyxJQUFJLE9BQU8sRUFBRSxJQUFJLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQUUsU0FBUTtnQkFDakUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQUUsUUFBUSxDQUFDLENBQUE7Z0JBQ25HLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUNyQixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQ3BELENBQUM7aUJBQU0sSUFBSSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ3hELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDekQsQ0FBQztpQkFBTSxJQUFJLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUN6RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLHNCQUFzQixHQUFHLElBQUksR0FBRyxFQUFFO0lBQzVILElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsbURBQW1ELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3RSxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBRXRFLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3hGLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxPQUFPO1FBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLFNBQVMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUN2SCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLHFDQUFxQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzFILE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRXJDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDeEIsS0FBSyxNQUFNLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsc0JBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQUU7SUFDcEksSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzNFLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLDhCQUE4QixFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUMzQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFFL0QsSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRO1FBQUUsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsOEJBQThCLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDN0csSUFBSSxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyw4REFBOEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRTlGLElBQUksT0FBTyxXQUFXLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzVDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSwyQ0FBMkMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN4RixDQUFDO1FBQ0QsK0JBQStCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzlFLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksZ0JBQWdCLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN2RyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUseURBQXlELEVBQ3ZGLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDcEUsQ0FBQztRQUNELElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksbUJBQW1CLElBQUksV0FBVyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMxRixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUscUNBQXFDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbEYsQ0FBQztRQUNELGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxzQkFBc0IsRUFDdEcsUUFBUSxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxDQUFBO1FBQzdFLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxpRUFBaUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRWhHLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQy9ELGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3ZHLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUksNEJBQTRCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFVBQVUsR0FBRyx3RUFBd0UsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZHLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFbEcsSUFBSSxNQUFNLElBQUkseUNBQXlDLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxJQUFJLFFBQVE7WUFDNUYsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUNwRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsNERBQTRELEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDekcsQ0FBQztRQUNELGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3JHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3ZHLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUV2RCxJQUFJLFVBQVUsS0FBSyxTQUFTO1lBQUUsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUMxSCxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksSUFBSSxJQUFJLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztZQUMzSCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDNUUsQ0FBQztRQUNELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDcEMscUJBQXFCLENBQUMsUUFBUSxFQUFFLHlDQUF5QyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3RGLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUV2RCxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sVUFBVSxJQUFJLFFBQVE7WUFDOUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4SCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsMkRBQTJELEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDeEcsQ0FBQztRQUNELGtCQUFrQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDNUYsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUN0SCxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLHlEQUF5RCxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFcEYsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDbEcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDckcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3RHLENBQUM7UUFDRCxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxJQUFJLGdCQUFnQixJQUFJLElBQUksSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQzVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2pILHVCQUF1QixDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUNqRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV6SCxJQUFJLE1BQU0sSUFBSSw0QkFBNEI7WUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsYUFBYSxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMxRyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUMzRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXpDLElBQUksQ0FBQyxPQUFPO1lBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDNUgsSUFBSSxPQUFPLFlBQVksSUFBSSxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzdFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxzQ0FBc0MsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNuRixDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0QscUJBQXFCLENBQUMsUUFBUSxFQUFFLGlEQUFpRCxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzlGLENBQUM7UUFDRCxJQUFJLFlBQVksSUFBSSxPQUFPLENBQUMsRUFBRTtZQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxxREFBcUQsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNoSSxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDcEgsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUM3RyxNQUFNLElBQUksR0FBRyw0REFBNEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3JGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFNUYsSUFBSSxNQUFNLElBQUksaUNBQWlDO1lBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLDBCQUEwQixFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzFILElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxJQUFJLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzSCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDckYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMxRixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsd0RBQXdELEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDekcsQ0FBQztRQUNELHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsOENBQThDLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDeEksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDcEcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxtREFBbUQsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUNwRyxDQUFDO1FBQ0QsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSx5Q0FBeUMsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUM5SCxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUM3QyxFQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBQyxFQUFFLFVBQVUsRUFDekcsc0JBQXNCLENBQUMsQ0FBQTtRQUN6QixPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaUNBQWlDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDakgsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUMvRyxNQUFNLElBQUksR0FBRyw4REFBOEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFNUYsSUFBSSxNQUFNLElBQUkseUNBQXlDO1lBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLDRCQUE0QixFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ3BJLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxJQUFJLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzSCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDckYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUseUNBQXlDLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDMUYsQ0FBQztRQUNELHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsK0JBQStCLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDcEgsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDL0YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ25HLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxzQ0FBc0MsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUN2RixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtRQUNqQyxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDdkksTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV0RyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksY0FBYyxJQUFJLGFBQWEsSUFBSSxpQ0FBaUMsRUFBRSxDQUFDO1lBQ3pGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw2QkFBNkIsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUNqRixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUs7WUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDNUcsK0JBQStCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDN0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxtQ0FBbUMsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUNwRixDQUFDO1FBQ0QsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUM5RyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUM3QyxFQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBQyxFQUFFLFVBQVUsRUFDekcsc0JBQXNCLENBQUMsQ0FBQTtRQUN6QixPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDaEgsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUNsSCxNQUFNLElBQUksR0FBRyxpRUFBaUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzFGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFNUYsSUFBSSxNQUFNLElBQUksbURBQW1ELEVBQUUsQ0FBQztZQUNsRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDaEYsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxJQUFJLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzSCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDckYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUscURBQXFELEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDdEcsQ0FBQztRQUNELHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsMkNBQTJDLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDL0gsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDOUYsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkYsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLElBQUksVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFBO1lBQ25HLENBQUM7WUFDRCxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsSUFBSSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQTtZQUNuSSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBRXRHLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxjQUFjLElBQUksYUFBYSxJQUFJLGlDQUFpQyxFQUFFLENBQUM7Z0JBQ3pGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSwyQkFBMkIsSUFBSSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUE7WUFDN0YsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLO2dCQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSwwQ0FBMEMsRUFBRSxlQUFlLENBQUMsQ0FBQTtZQUMzSCwrQkFBK0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxpQkFBaUIsSUFBSSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDM0csQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsdUNBQXVDLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDeEYsQ0FBQztRQUNELHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDbEgsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFDN0MsRUFBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUMsRUFBRSxVQUFVLEVBQ3pHLHNCQUFzQixDQUFDLENBQUE7UUFDekIsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3pILE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzlDLE1BQU0sYUFBYSxHQUFHLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDOUcsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDdEYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUV4RixJQUFJLE1BQU0sSUFBSSxxQkFBcUIsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbEcsTUFBTSxDQUFDLElBQUksSUFBSSxtQkFBbUIsSUFBSSxrQkFBa0IsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO1lBQzVGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUM1RSxDQUFDO1FBQ0QsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsNkJBQTZCLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDaEcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9ELGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUN2RyxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sT0FBTyxHQUFHLDBEQUEwRCxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDdEYsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUMxRyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRS9GLElBQUksTUFBTSxJQUFJLHFEQUFxRCxFQUFFLENBQUM7WUFDcEUscUJBQXFCLENBQUMsUUFBUSxFQUFFLHdCQUF3QixFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQ3hFLENBQUM7UUFDRCxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUNoRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFBO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLE9BQU8sSUFBSSxPQUFPLE9BQU8sSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNwRixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ3pGLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRW5ILElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxjQUFjLElBQUksYUFBYSxJQUFJLGlDQUFpQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbEkscUJBQXFCLENBQUMsUUFBUSxFQUFFLHlCQUF5QixFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQzdFLENBQUM7UUFDRCwrQkFBK0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDekYsc0JBQXNCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDL0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2xFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw2QkFBNkIsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUNqRixDQUFDO1FBQ0QsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDbkcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDeEcsT0FBTTtJQUNSLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsYUFBYSxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJO0FBQ3pELDZEQUE2RCxDQUFDLFFBQVE7QUFDdEUsNERBQTRELENBQUMsYUFBYTtJQUMxRSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDcEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUN0RixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDdkUsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUV0RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksV0FBVyxJQUFJLE1BQU0sSUFBSSxvQkFBb0IsSUFBSSxPQUFPLFNBQVMsQ0FBQyxhQUFhLElBQUksUUFBUTtRQUMvRyxDQUFDLGtHQUFrRzthQUNoRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDbkMscUJBQXFCLENBQUMsUUFBUSxFQUFFLCtCQUErQixFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ2pGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxRQUFRO0lBQzdDLElBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFDbkQsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQTtJQUVqRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUTtJQUNyRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDO1FBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLHNCQUFzQixPQUFPLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUU3SSxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUMsUUFBUTtJQUNsQyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sUUFBUSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQ3JGLE1BQU0sU0FBUyxHQUFHLG1FQUFtRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFaEcsSUFBSSxPQUFPLFNBQVMsQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDekUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUVwRixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSTtRQUNqRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDbEcsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxLQUFLO0lBQzVCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDNUUsTUFBTSxTQUFTLEdBQUcsbUVBQW1FLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU3RixPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1RSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDM0UsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhO0lBQy9ELElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxzQ0FBc0MsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUMvRixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsa0VBQWtFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM3RixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQTtJQUVwRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxxQkFBcUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM5RyxDQUFDO0lBRUQsK0JBQStCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDMUYsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLDhCQUE4QixHQUFHLEtBQUssRUFBRSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLHVCQUF1QixHQUFHLEtBQUs7SUFDbE0sSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLFVBQVUsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzlFLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLCtCQUErQixFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ3hGLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyx3REFBd0QsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFBO0lBRXBELElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDN0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFMUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUU3QixJQUFJLE9BQU8sU0FBUyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN0QyxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSwrQkFBK0IsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDN0Msd0JBQXdCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3pFLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVqRyxJQUFJLE1BQU0sSUFBSSx1QkFBdUIsSUFBSSxPQUFPLFNBQVMsQ0FBQyxPQUFPLElBQUksUUFBUTtZQUMzRSxDQUFDLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDL0UsQ0FBQztRQUNELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVqRyxJQUFJLE1BQU0sSUFBSSx3QkFBd0IsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQzdGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN6RSxDQUFDO1FBQ0Qsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUN6RyxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDekYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqRyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsb0NBQW9DLENBQUE7UUFFakksSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLHNCQUFzQixJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLG9CQUFvQjtZQUNoSSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxrQkFBa0I7WUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsYUFBYSxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDM0gsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUMzRyxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBQ0QsTUFBTSwwQkFBMEIsR0FBRyw4QkFBOEIsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQTtRQUVsRyxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQywwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3pILHFCQUFxQixDQUFDLFFBQVEsRUFBRSxpREFBaUQsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM5RixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztZQUN0TSxDQUFDLFFBQVEsSUFBSSxHQUFHLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0SyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsb0RBQW9ELEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDakcsQ0FBQztRQUNELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZUFBZTtRQUFFLE9BQU07SUFDbkYsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDMUcsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqRyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDekUsU0FBUyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQTtRQUVwRixJQUFJLE1BQU0sSUFBSSxjQUFjO1lBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLGFBQWEsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3RHLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxjQUFjO1lBQUUsT0FBTTtRQUM1QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7WUFDckMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtZQUN0RyxPQUFNO1FBQ1IsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLCtHQUErRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFN0ksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMzRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxTQUFTLENBQUMsSUFBSSxzQ0FBc0MsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNwRyxDQUFDO1FBQ0Qsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUN4RyxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLDBCQUEwQixDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLGdDQUFnQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2hILElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxtQkFBbUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM3RSxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLG1CQUFtQixJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzVGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw2Q0FBNkMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMxRixDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaUNBQWlDLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDbkgsS0FBSyxNQUFNLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtZQUNoRyxDQUFDO1lBQ0QsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7Z0JBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLCtCQUErQixFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ2hILElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDMUYscUJBQXFCLENBQUMsUUFBUSxFQUFFLCtDQUErQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQzVGLENBQUM7WUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQzFGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFBO2dCQUM5RixDQUFDO2dCQUNELGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO2dCQUN0RyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtZQUMxRyxDQUFDO1lBQ0QsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUM1QyxJQUFJLFNBQVMsQ0FBQyxRQUFRLElBQUksaUJBQWlCLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNsRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUscURBQXFELEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDbEcsQ0FBQztZQUNELGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixDQUFDLENBQUE7WUFDM0csa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtZQUN0RyxPQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzVDLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxpQkFBaUIsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2xFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxrREFBa0QsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUMvRixDQUFDO1lBQ0Qsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtZQUMzRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1lBQ3BHLE9BQU07UUFDUixDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLDBCQUEwQixFQUFFLENBQUM7WUFDakQsSUFBSSxTQUFTLENBQUMsY0FBYyxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsY0FBYyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUM1RSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsbURBQW1ELEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDaEcsQ0FBQztZQUNELGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixDQUFDLENBQUE7WUFDM0csT0FBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDdkMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsSUFBSSxPQUFPLFNBQVMsQ0FBQyxVQUFVLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQzNILENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDO1lBQ3BELENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFYixJQUFJLE9BQU8sYUFBYSxJQUFJLFFBQVEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ25GLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMxRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksT0FBTyxTQUFTLENBQUMsVUFBVSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzVHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw0Q0FBNEMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDeEMscUJBQXFCLENBQUMsUUFBUSxFQUFFLG1DQUFtQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2hGLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxvQ0FBb0MsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNqRixDQUFDO1FBQ0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0Msa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ2pHLENBQUM7UUFDRCxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDakcsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQTtRQUV2QyxJQUFJLE1BQU0sSUFBSSwyREFBMkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQzdHLE9BQU8sU0FBUyxDQUFDLFlBQVksSUFBSSxRQUFRLElBQUksT0FBTyxTQUFTLENBQUMsU0FBUyxJQUFJLFFBQVEsSUFBSSxDQUFDLFVBQVU7WUFDbEcsVUFBVSxDQUFDLElBQUksSUFBSSxrQ0FBa0MsSUFBSSxVQUFVLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxTQUFTO1lBQ3RHLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDOUgscUJBQXFCLENBQUMsUUFBUSxFQUFFLGtDQUFrQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQy9FLENBQUM7UUFDRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsQ0FBQyxTQUFTO1lBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQzNJLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqRyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFBO1FBQ3ZDLE1BQU0sZUFBZSxHQUFHLDhFQUE4RSxDQUFBO1FBQ3RHLE1BQU0sVUFBVSxHQUFHLDhDQUE4QyxDQUFBO1FBRWpFLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2pELFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLGVBQWUsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxvQkFBb0I7WUFDakcsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsSUFBSSxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUMxRixDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLDhCQUE4QjtZQUNoRSxVQUFVLENBQUMsYUFBYSxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxhQUFhLGNBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQzFILE1BQU0sSUFBSSxlQUFlO2dCQUN6QixDQUFDLE9BQU8sU0FBUyxDQUFDLFlBQVksSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0gscUJBQXFCLENBQUMsUUFBUSxFQUFFLG9FQUFvRSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2pILENBQUM7UUFDRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDakcsQ0FBQztRQUNELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqRyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFBO1FBRXZDLE1BQU0sZUFBZSxHQUFHLG9GQUFvRixDQUFBO1FBQzVHLE1BQU0sVUFBVSxHQUFHLG9EQUFvRCxDQUFBO1FBRXZFLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLFFBQVE7WUFDeEYsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUkseUJBQXlCO1lBQ2pHLFVBQVUsQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQ3hGLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDO1lBQ3JGLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLElBQUksUUFBUSxDQUFDO1lBQzlILE1BQU0sSUFBSSxlQUFlO2dCQUN6QixDQUFDLE9BQU8sU0FBUyxDQUFDLFlBQVksSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0gscUJBQXFCLENBQUMsUUFBUSxFQUFFLHNEQUFzRCxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ25HLENBQUM7UUFDRCxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3pHLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUNqRyxDQUFDO1FBQ0QsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWpHLElBQUksTUFBTSxJQUFJLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxZQUFZO1lBQzFHLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzFGLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMzRSxDQUFDO1FBQ0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0Msa0JBQWtCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ2pHLENBQUM7UUFDRCxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWpHLElBQUksTUFBTSxJQUFJLDhCQUE4QixJQUFJLE9BQU8sU0FBUyxDQUFDLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNuRixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkUsQ0FBQztRQUNELGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDekcsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWpHLElBQUksTUFBTSxJQUFJLDhCQUE4QixJQUFJLE9BQU8sU0FBUyxDQUFDLEtBQUssSUFBSSxRQUFRO1lBQ2hGLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDbkQscUJBQXFCLENBQUMsUUFBUSxFQUFFLDREQUE0RCxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3pHLENBQUM7UUFDRCxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3pHLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEUscUJBQXFCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDN0YsQ0FBQztRQUNELGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsU0FBUyxJQUFJLGVBQWUsRUFBRSxjQUFjLEVBQzlHLHNCQUFzQixDQUFDLENBQUE7UUFDekIsMEJBQTBCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN6RCxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxvQkFBb0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzlGLENBQUM7UUFDRCxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3JHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDdEcsMEJBQTBCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN6RCxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFakcsSUFBSSxNQUFNLElBQUksbURBQW1ELEVBQUUsQ0FBQztZQUNsRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaUNBQWlDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDOUUsQ0FBQztRQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzVILGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixDQUFDLENBQUE7UUFDMUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUMzRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQzFHLE9BQU07SUFDUixDQUFDO0lBRUQscUJBQXFCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQ3BGLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUTtJQUNoRSxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUUzQyxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMvRixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsc0VBQXNFLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbkgsQ0FBQztJQUNELElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssU0FBUztRQUNuTSxDQUFDLEtBQUssR0FBRyxDQUFDLG9CQUFvQixJQUFJLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxNQUFNLEdBQUcsUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBRXZHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSw4REFBOEQsTUFBTSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDekgsQ0FBQztJQUNELElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssU0FBUztRQUNyRSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsaUZBQWlGLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDOUgsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxVQUFVO0lBQ25DLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEgsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEYsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXJELE9BQU8sT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtJQUNyRCxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGtCQUFrQjtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBRTNELE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMvQyxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFakQsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFDL0QsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLFlBQVk7UUFBRSxPQUFPLElBQUksR0FBRyxLQUFLLENBQUE7SUFDN0QsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLGlCQUFpQjtRQUFFLE9BQU8sSUFBSSxHQUFHLEtBQUssQ0FBQTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksaUJBQWlCO1FBQUUsT0FBTyxJQUFJLEdBQUcsS0FBSyxDQUFBO0lBRWxFLE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsR0FBRyxLQUFLO0lBQ3RFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFN0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUMzRyxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVyRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3hELFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU07U0FDeEUsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1lBQ3hGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN6QyxJQUFJLEtBQUssR0FBRyxDQUFDO29CQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUN4RyxpQ0FBaUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFDcEQsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLGNBQWMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQTtZQUN4RixDQUFDLENBQUMsQ0FBQTtZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUMxRixDQUFDO1FBQ0QsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFekQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN2RCxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNO1NBQzdFLENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUN2SSxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ3hJLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsSUFBSSxNQUFNLElBQUksU0FBUztZQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNySCxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUVsQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDL0UsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRXhGLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUM3RSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFBO1FBQ25GLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RHLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdkYsT0FBTTtJQUNSLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVU7UUFDcEMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUMzRCxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RCxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQTtJQUV0SCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDN0UsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLENBQUE7SUFDekYsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFBO1FBQy9FLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6SCxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFBO0lBQ3JGLENBQUM7SUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7QUFDMUYsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsY0FBYztJQUMvRSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFaEUsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM3RyxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDNUcsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQzlFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxxQkFBcUIsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDM0YsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUk7Z0JBQy9HLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzFDLENBQUM7YUFBTSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDOUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUM5RSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDckUsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUVuRSxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksc0JBQXNCLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1lBQ2pILENBQUM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQzFELEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUNuRixDQUFDO1FBQ0QsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWpILE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQTtRQUN4RixPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUVqSCxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2pHLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFDeEYsSUFBSSxRQUFRLElBQUksTUFBTTtZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLCtCQUErQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3BHLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFDN0gsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDckcsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUztTQUM5RCxDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUN2RyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNsRixDQUFDO1FBQ0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ25GLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFFBQVEsSUFBSSxNQUFNO1lBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO2FBQ3ZHLElBQUksUUFBUSxJQUFJLE1BQU07WUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ2hHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUN2RixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDOUYsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVTtTQUMvRCxDQUFDLENBQUE7UUFDRixJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU07WUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ2pILE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDeEMsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQ3BGLENBQUM7UUFDRCxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDdkYsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQ3pGLENBQUM7O1lBQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUMxRSxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUMvRyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEtBQUs7Z0JBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDakYsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLGFBQWEsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ3hGLENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQzlGLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDOUUsTUFBTSxJQUFJLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUgsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7UUFDL0IsTUFBTSxLQUFLLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksWUFBWSxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BHLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1FBRS9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDcEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLFlBQVksS0FBSyxFQUFFLENBQUE7WUFFNUMsSUFBSSxLQUFLO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQzlFLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWTtnQkFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQTtZQUNuSSxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7WUFDL0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUM3RSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVTthQUNyRSxDQUFDLENBQUE7WUFDRixjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxTQUFTLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7WUFDbkYsSUFBSSxRQUFRLElBQUksWUFBWSxJQUFJLFFBQVEsSUFBSSxZQUFZO2dCQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFBO1FBQ3JJLENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNyRSxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzdDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksYUFBYSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUM3RixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUNuSCxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQzlGLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDN0MsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQzdGLE1BQU0sUUFBUSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFFbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBQ3pGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUMvRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDN0YsSUFBSSxRQUFRLElBQUksWUFBWSxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDN0UsQ0FBQztRQUNELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDbEQsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1lBQ3pGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksYUFBYSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtZQUM3RixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1lBQ25FLE9BQU07UUFDUixDQUFDO1FBQ0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQzdGLE1BQU0sUUFBUSxHQUFHLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkUsVUFBVSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO1FBRTNELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUM1RCxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVO1NBQy9ELENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDeEMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDbkUsTUFBTSxhQUFhLEdBQUcsUUFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMxRyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDcEQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRWpFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM1QyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRO1NBQ3RGLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxhQUFhO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFVBQVUsSUFBSSxFQUFFLDJCQUEyQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO2lCQUN4SCxJQUFJLEtBQUssR0FBRyxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3RGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxjQUFjLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtZQUN4RixJQUFJLGFBQWE7Z0JBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdkcsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFVBQVUsS0FBSyxrQkFBa0IsS0FBSyxDQUFDLENBQUM7Z0JBQ3BILEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEVBQ25FLHlDQUF5QyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2xFLENBQUM7UUFDRCxJQUFJLGFBQWE7WUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSwrQkFBK0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN0RyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNuRSxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLDJCQUEyQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzFGLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3hFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVE7U0FDbkYsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEtBQUssR0FBRyxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLDJCQUEyQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3hGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxjQUFjLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUMxRixDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDekUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBQzVHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxLQUFLLEdBQUcsQ0FBQztnQkFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUM3RixjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksY0FBYyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDMUYsQ0FBQyxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDOUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ3pGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXBELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0QsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUTtTQUNoRixDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQy9DLElBQUksS0FBSyxHQUFHLENBQUM7Z0JBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDeEYsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLGNBQWMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQzFGLENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2hGLE1BQU0sTUFBTSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sVUFBVSxFQUFFLENBQUE7UUFFN0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQ3hHLElBQUksQ0FBQyxRQUFRLElBQUksWUFBWSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBQyxDQUFDLENBQUE7WUFDNUYsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN0RCxJQUFJLEtBQUssR0FBRyxDQUFDO29CQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUseUNBQXlDLEVBQ3hHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUE7Z0JBQzFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxxQkFBcUIsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQTtZQUMvRixDQUFDLENBQUMsQ0FBQTtZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFDOUYsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxLQUFLLEdBQUcsQ0FBQztnQkFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSwyQkFBMkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN4RixjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksY0FBYyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDMUYsQ0FBQyxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksV0FBVyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUN6RixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNqRCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsSUFBSSxLQUFLO1lBQ3hDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM3RSxNQUFNLFFBQVEsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRixRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFNUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZGLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV4RCxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtZQUNqSCxPQUFNO1FBQ1IsQ0FBQztRQUNELGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksV0FBVyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUN6RixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQ25ILEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUNuRixPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksV0FBVyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUN6RixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRTtZQUN0RyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRO1NBQzdELENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDM0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBQ3RGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksYUFBYSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUM3RixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDbkYsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQzNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNsRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRTtnQkFDM0UsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUM7YUFDeEMsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSw0QkFBNEIsRUFBRTtnQkFDOUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUM7YUFDeEMsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwRSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1lBQzFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtZQUNwRixjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7WUFDdkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtZQUNuRSxPQUFNO1FBQ1IsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoSSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVO1NBQy9ELENBQUMsQ0FBQTtRQUNGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUN2RixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzlHLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzlFLFVBQVUsQ0FBQyxTQUFTLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQTtRQUUzRyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDdEQsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLFFBQVEsQ0FBQztTQUN2RSxDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNoSCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUMvRSxVQUFVLENBQUMsU0FBUyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUE7UUFFN0csdUJBQXVCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUM7U0FDdkUsQ0FBQyxDQUFBO1FBQ0YsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLHdCQUF3QixFQUFFO1FBQzNELENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxhQUFhLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDdEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDdEYsQ0FBQztRQUNELGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUNqRixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDM0YsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ25GLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDcEUsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDaEgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUMxRSxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDakYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDL0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3JFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVU7U0FDL0QsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDL0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ25GLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLGFBQWEsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUM5RyxNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUE7UUFFM0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDdEYsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDdkIsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVO1NBQ3hHLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ25GLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksYUFBYSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQy9HLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyw4QkFBOEIsRUFBRTtZQUNqSCxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVO1NBQy9ELENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLG1DQUFtQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2hGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUNqRixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSwwQ0FBMEMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN4RixjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDbkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDaEYsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxRQUFRLElBQUksTUFBTSxJQUFJLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUM5RixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUNuRSxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDakYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDL0QsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUV4RSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQUN0RyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUNyRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBQyxDQUFDLENBQUE7SUFDNUcsQ0FBQzs7UUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDaEcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN2RyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtBQUNyRSxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVE7SUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLG9DQUFvQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2pGLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNqRCxJQUFJLEtBQUs7WUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSwyQ0FBMkMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNwRyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDNUUsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUNuRixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRO0lBQ3ZFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNqRixLQUFLLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMxRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBQ3JELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUV6RCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDdkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDL0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2pELElBQUksU0FBUztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxFQUFFLDJDQUEyQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO2FBQ2hJLElBQUksS0FBSztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHlDQUF5QyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUN4RSxJQUFJLFNBQVM7WUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxtREFBbUQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNuSCxDQUFDLENBQUMsQ0FBQTtJQUNGLElBQUksU0FBUztRQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLDBDQUEwQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3pHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ2pGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsOEJBQThCLENBQUMsTUFBTSxFQUFFLFVBQVU7SUFDeEQsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtBQUMvRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsaUJBQWlCLENBQUMsTUFBTTtJQUMvQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUNyRixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVU7SUFDbkQsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHNCQUFzQjtRQUFFLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQTtJQUNyRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksZ0JBQWdCO1FBQUUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hFLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0I7UUFBRSxPQUFPLHVCQUF1QixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFBO0lBQzdHLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxlQUFlO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzFGLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtRQUMvRixNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVuRSxJQUFJLGtCQUFrQjtZQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUUzRCxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUE7SUFDdEUsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFOUQsT0FBTyxVQUFVLENBQUMsU0FBUyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sR0FBRyxDQUFBO0lBQzVHLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hELE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFMUQsSUFBSSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN4RixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDOUUsVUFBVSxDQUFDLFNBQVMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFBO1lBRTNHLE9BQU8sR0FBRyxNQUFNLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFBO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLElBQUksSUFBSSxJQUFJLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUE7SUFDdEYsQ0FBQztJQUNELE1BQU0sSUFBSSxTQUFTLENBQUMseUVBQXlFLENBQUMsQ0FBQTtBQUNoRyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUMsSUFBSTtJQUM5QixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsOEJBQThCLENBQUMsTUFBTTtJQUNuRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEcsbUNBQW1DLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUMvRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsbUNBQW1DLENBQUMsS0FBSztJQUNoRCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDekMsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sd0NBQXdDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDbEUsbUNBQW1DLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztnQkFDekQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksbUNBQW1DLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDNUYsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sd0NBQXdDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLG1DQUFtQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4SCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDNUMsT0FBTyx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksbUNBQW1DLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZILENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUN2QyxPQUFPLHdDQUF3QyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDN0gsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNyQyxPQUFPLG1DQUFtQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDeEgsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0I7WUFBRSxPQUFPLHdDQUF3QyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEgsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQjtZQUFFLE9BQU8sd0NBQXdDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2hILElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUM3SCxPQUFPLHdDQUF3QyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUN4RyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyx3Q0FBd0MsQ0FBQyxVQUFVO0lBQzFELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sVUFBVSxDQUFDLFNBQVMsSUFBSSxlQUFlLElBQUksd0NBQXdDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2hILENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFVBQVUsQ0FBQyxTQUFTLElBQUksaUJBQWlCLElBQUksd0NBQXdDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUMzRyx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUQsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLHdDQUF3QyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDcEcsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQzVDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLHdDQUF3QyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDcEcsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxZQUFZO1FBQUUsT0FBTyx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDekcsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGFBQWE7UUFBRSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3JJLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQzlFLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLHdDQUF3QyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDM0Ysd0NBQXdDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDMUQsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzdDLE9BQU8sd0NBQXdDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN0SSxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDN0MsT0FBTyx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksd0NBQXdDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BJLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksMEJBQTBCO1FBQUUsT0FBTyx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekgsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGNBQWM7UUFBRSxPQUFPLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN4RyxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksbUJBQW1CLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xGLE9BQU8sd0NBQXdDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLFFBQVE7SUFDbEQsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFL0MsSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHO1FBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFBO0lBQ3RELElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUMvRCxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksWUFBWSxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUV0SCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUE7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtpc0RlbnNlQXJyYXl9IGZyb20gXCIuLi9hcnJheS5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlQmFja2VuZFR5cGVzfSBmcm9tIFwiLi4vc2VtYW50aWMvdmFsaWRhdGUuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyLCB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIsIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXJ9IGZyb20gXCIuL2lkZW50aWZpZXJzLmpzXCJcbmltcG9ydCB7ZW1pdFNjYWxhclR5cGUsIGVtaXRTdHJpbmdMaXRlcmFsfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcblxuLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNVbmFyeU9wZXJhdGlvbiwgc3RyaW5nPj59ICovXG5jb25zdCB1bmFyeU9wZXJhdGlvblN5bnRheCA9IE9iamVjdC5mcmVlemUoe0Jvb2xlYW5Ob3Q6IFwiIVwiLCBJbnRlZ2VyTmVnYXRlOiBcIi1cIn0pXG4vKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0JpbmFyeU9wZXJhdGlvbiwgUmVhZG9ubHk8e2RlZmF1bHQ6IHN0cmluZywgcGhwPzogc3RyaW5nLCBweXRob24/OiBzdHJpbmcsIHN0cmljdD86IHN0cmluZ30+Pj59ICovXG5jb25zdCBiaW5hcnlPcGVyYXRpb25TeW50YXggPSBPYmplY3QuZnJlZXplKHtcbiAgQm9vbGVhbkFuZDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCImJlwiLCBweXRob246IFwiYW5kXCJ9KSxcbiAgQm9vbGVhbkVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBCb29sZWFuTm90RXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiIT1cIiwgc3RyaWN0OiBcIiE9PVwifSksXG4gIEJvb2xlYW5PcjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCJ8fFwiLCBweXRob246IFwib3JcIn0pLFxuICBJbnRlZ2VyQWRkOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIitcIn0pLFxuICBJbnRlZ2VyRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIEludGVnZXJHcmVhdGVyVGhhbjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI+XCJ9KSxcbiAgSW50ZWdlckdyZWF0ZXJUaGFuT3JFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI+PVwifSksXG4gIEludGVnZXJMZXNzVGhhbjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI8XCJ9KSxcbiAgSW50ZWdlckxlc3NUaGFuT3JFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI8PVwifSksXG4gIEludGVnZXJNdWx0aXBseTogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIqXCJ9KSxcbiAgSW50ZWdlck5vdEVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiE9XCIsIHN0cmljdDogXCIhPT1cIn0pLFxuICBJbnRlZ2VyU3VidHJhY3Q6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiLVwifSksXG4gIFN0cmluZ0NvbmNhdDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIrXCIsIHBocDogXCIuXCJ9KSxcbiAgU3RyaW5nRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIFN0cmluZ05vdEVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiE9XCIsIHN0cmljdDogXCIhPT1cIn0pXG59KVxuY29uc3QgdGFzazAwNUxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiLCBcImRhcnRcIiwgXCJ6aWdcIl0pXG5jb25zdCB0YXNrMDA2TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAwN0xhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMDhMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDA5TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAxMUxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMTJMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDE0TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAzMkxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMzNMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDQ4Q29uZGl0aW9uYWxMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCBqYXZhUmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcImNsb25lXCIsIFwiZXF1YWxzXCIsIFwiZmluYWxpemVcIiwgXCJnZXRDbGFzc1wiLCBcImhhc2hDb2RlXCIsIFwibm90aWZ5XCIsIFwibm90aWZ5QWxsXCIsIFwidG9TdHJpbmdcIiwgXCJ3YWl0XCJdKVxuY29uc3QgamF2YXNjcmlwdFJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19kZWZpbmVHZXR0ZXJfX1wiLCBcIl9fZGVmaW5lU2V0dGVyX19cIiwgXCJfX2xvb2t1cEdldHRlcl9fXCIsIFwiX19sb29rdXBTZXR0ZXJfX1wiLCBcIl9fcHJvdG9fX1wiLCBcImNvbnN0cnVjdG9yXCIsXG4gIFwiaGFzT3duUHJvcGVydHlcIiwgXCJpc1Byb3RvdHlwZU9mXCIsIFwicHJvcGVydHlJc0VudW1lcmFibGVcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInRvU3RyaW5nXCIsIFwidmFsdWVPZlwiXG5dKVxuY29uc3QgcnVieVJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19zZW5kX19cIiwgXCJleHRlbmRcIiwgXCJmZXRjaFwiLCBcImluc3RhbmNlX2V2YWxcIiwgXCJpbnN0YW5jZV9leGVjXCIsIFwibWV0aG9kXCIsIFwibWV0aG9kX21pc3NpbmdcIiwgXCJwdWJsaWNfc2VuZFwiLFxuICBcInJlc3BvbmRfdG9fbWlzc2luZz9cIiwgXCJzZW5kXCIsIFwic2luZ2xldG9uX2NsYXNzXCIsIFwic2l6ZVwiXG5dKVxuY29uc3QgamF2YU9iamVjdEluc3RhbmNlTWV0aG9kU2lnbmF0dXJlcyA9IG5ldyBTZXQoW1xuICBcImNsb25lKClcIiwgXCJlcXVhbHMoT2JqZWN0KVwiLCBcImZpbmFsaXplKClcIiwgXCJnZXRDbGFzcygpXCIsIFwiaGFzaENvZGUoKVwiLCBcIm5vdGlmeSgpXCIsIFwibm90aWZ5QWxsKClcIiwgXCJ0b1N0cmluZygpXCIsXG4gIFwid2FpdCgpXCIsIFwid2FpdChsb25nKVwiLCBcIndhaXQobG9uZyxpbnQpXCJcbl0pXG5cbi8qKlxuICogQ2hlY2tzIHRoZSBpbnRlbnRpb25hbGx5IG5hcnJvdyBiYWNrZW5kIGNvbnRyYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHt7ZXh0ZXJuYWxEZWNsYXJhdGlvbklkcz86IFNldDxzdHJpbmc+LCBwcm9ncmFtPzogYm9vbGVhbiwgdmlzaWJsZUZ1bmN0aW9ucz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24+LCB2aXNpYmxlUmVjb3Jkcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgdmlzaWJsZUNsYXNzZXM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPiwgdmlzaWJsZUVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCB2aXNpYmxlQ2FsbEVmZmVjdHM/OiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj59fSBbb3B0aW9uc10gLSBSZXNvbHZlZCBwcm9ncmFtIHZhbGlkYXRpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCYWNrZW5kTW9kdWxlKG1vZHVsZSwgbGFuZ3VhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoIW1vZHVsZSB8fCB0eXBlb2YgbW9kdWxlICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbW9kdWxlXCIsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAobW9kdWxlLmtpbmQgIT0gXCJNb2R1bGVcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBtb2R1bGUua2luZCwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkobW9kdWxlLmZ1bmN0aW9ucykgfHwgIW1vZHVsZS5lbnRyeVBvaW50IHx8IHR5cGVvZiBtb2R1bGUuZW50cnlQb2ludCAhPSBcIm9iamVjdFwiIHx8XG4gICAgbW9kdWxlLmVudHJ5UG9pbnQua2luZCAhPSBcIkVudHJ5UG9pbnRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtb2R1bGUgbWVtYmVyc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGNvbnN0IGRlY2xhcmVkUmVjb3JkcyA9IG1vZHVsZS5yZWNvcmRzXG4gIGNvbnN0IHJlY29yZHMgPSBkZWNsYXJlZFJlY29yZHMgPT09IHVuZGVmaW5lZCA/IFtdIDogZGVjbGFyZWRSZWNvcmRzXG4gIGNvbnN0IGRlY2xhcmVkQ2xhc3NlcyA9IG1vZHVsZS5jbGFzc2VzXG4gIGNvbnN0IGNsYXNzZXMgPSBkZWNsYXJlZENsYXNzZXMgPT09IHVuZGVmaW5lZCA/IFtdIDogZGVjbGFyZWRDbGFzc2VzXG4gIGNvbnN0IGRlY2xhcmVkRXJyb3JzID0gbW9kdWxlLmVycm9yc1xuICBjb25zdCBlcnJvcnMgPSBkZWNsYXJlZEVycm9ycyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZEVycm9yc1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShyZWNvcmRzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWNvcmQgZGVjbGFyYXRpb25zXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNsYXNzZXMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoZXJyb3JzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAobW9kdWxlLmZ1bmN0aW9ucy5sZW5ndGggPT0gMCAmJiAoIW9wdGlvbnMucHJvZ3JhbSB8fFxuICAgIHJlY29yZHMubGVuZ3RoID09IDAgJiYgY2xhc3Nlcy5sZW5ndGggPT0gMCAmJiBlcnJvcnMubGVuZ3RoID09IDAgJiYgbW9kdWxlLmVudHJ5UG9pbnQuYm9keT8uc3RhdGVtZW50cz8ubGVuZ3RoID09IDApKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1vZHVsZSB3aXRob3V0IGRlY2xhcmF0aW9ucyBvciBleGVjdXRhYmxlIGVudHJ5XCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoIXRhc2swMTJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSAmJiBtb2R1bGVIYXNUeXBlUGFyYW1ldGVycyhtb2R1bGUpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDEyIHR5cGUgcGFyYW1ldGVycyBhbmQgZ2VuZXJpYyBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChyZWNvcmRzLmxlbmd0aCA+IDAgJiYgIXRhc2swMDlMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwOSBjbG9zZWQgcmVjb3Jkc1wiLCByZWNvcmRzWzBdPy5sb2NhdGlvbiA/PyBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKGNsYXNzZXMubGVuZ3RoID4gMCAmJiAhdGFzazAzM0xhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMzIHJlZmVyZW5jZSBjbGFzc2VzLCBtZXRob2RzLCBhbmQgY29uc3RydWN0b3JzXCIsIGNsYXNzZXNbMF0/LmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoIXRhc2swMTFMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0VHlwZWRFcnJvcnMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDMyTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdENvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMTRMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0T3JkZXJlZE1hcENhcGFiaWxpdHkobW9kdWxlLCBsYW5ndWFnZSlcbiAgdmFsaWRhdGVSZWNvcmRUYXJnZXRzKHJlY29yZHMsIG1vZHVsZS5mdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGUubG9jYXRpb24pXG4gIHZhbGlkYXRlUmVmZXJlbmNlQ2xhc3NUYXJnZXRzKGNsYXNzZXMsIHJlY29yZHMsIGVycm9ycywgbW9kdWxlLmZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKCF0YXNrMDA4TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdEl0ZXJhdGlvblN0YXRlbWVudHMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDA3TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdE9wdGlvbmFsVHlwZXMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDA2TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdENvbGxlY3Rpb25UeXBlcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBjb25zdCBsb29wT3duZXJzID0gY29sbGVjdExvb3BPd25lcnMobW9kdWxlLCBsYW5ndWFnZSlcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGNsYXNzZXMpIHtcbiAgICB2YWxpZGF0ZUJsb2NrKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHksIGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5sb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFtdLCBvd25lcjogZGVjbGFyYXRpb24uY29uc3RydWN0b3IsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHtcbiAgICAgIHZhbGlkYXRlQmxvY2sobWV0aG9kLmJvZHksIGxhbmd1YWdlLCBtZXRob2QubG9jYXRpb24sXG4gICAgICAgIHthY3RpdmU6IFtdLCBvd25lcjogbWV0aG9kLCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlLCBtb2R1bGUuZW50cnlQb2ludC5sb2NhdGlvbixcbiAgICB7YWN0aXZlOiBbXSwgb3duZXI6IG1vZHVsZS5lbnRyeVBvaW50LCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgY29uc3QgZGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgZGVjbGFyYXRpb25OYW1lcyA9IG5ldyBTZXQoKVxuICBjb25zdCB0YXJnZXREZWNsYXJhdGlvbk5hbWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBmdW5jdGlvbkRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBpZiAoIWZ1bmN0aW9uRGVjbGFyYXRpb24gfHwgdHlwZW9mIGZ1bmN0aW9uRGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGZ1bmN0aW9uRGVjbGFyYXRpb24pIHx8XG4gICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uLmtpbmQgIT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgfHwgIUFycmF5LmlzQXJyYXkoZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBmdW5jdGlvbiBkZWNsYXJhdGlvblwiLCBtb2R1bGUubG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSwgXCJmdW5jdGlvblwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIGlmIChkZWNsYXJhdGlvbk5hbWVzLmhhcyhmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgZnVuY3Rpb24gJyR7ZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lfSdgLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNsYXJhdGlvbk5hbWVzLmFkZChmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUpXG4gICAgY29uc3QgdGFyZ2V0RGVjbGFyYXRpb25OYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIlxuICAgICAgPyBmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUucmVwbGFjZSgvW0EtWl0vZ3UsIChjaGFyYWN0ZXIpID0+IGNoYXJhY3Rlci50b0xvd2VyQ2FzZSgpKVxuICAgICAgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWVcblxuICAgIGlmICh0YXJnZXREZWNsYXJhdGlvbk5hbWVzLmhhcyh0YXJnZXREZWNsYXJhdGlvbk5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgZnVuY3Rpb24tbmFtZSBjb2xsaXNpb24gJyR7ZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lfSdgLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICB0YXJnZXREZWNsYXJhdGlvbk5hbWVzLmFkZCh0YXJnZXREZWNsYXJhdGlvbk5hbWUpXG4gICAgaWYgKHR5cGVvZiBmdW5jdGlvbkRlY2xhcmF0aW9uLmlkICE9IFwic3RyaW5nXCIgfHwgIS9eKD86W2Etel1bYS16MC05Ll8tXSojKT9mdW5jdGlvbjpbMC05XSskL3UudGVzdChmdW5jdGlvbkRlY2xhcmF0aW9uLmlkKSB8fFxuICAgICAgZGVjbGFyYXRpb25JZHMuaGFzKGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgZnVuY3Rpb24gZGVjbGFyYXRpb24gaWRlbnRpdHlcIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgZGVjbGFyYXRpb25JZHMuYWRkKGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpXG4gICAgdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhmdW5jdGlvbkRlY2xhcmF0aW9uLCBsYW5ndWFnZSlcblxuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycy5sZW5ndGggIT0gMikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImZ1bmN0aW9uIHBhcmFtZXRlciBjb3VudCBvdGhlciB0aGFuIHR3b1wiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIXRhc2swMDVMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSAmJiBmdW5jdGlvbkRlY2xhcmF0aW9uLnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiZcbiAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb24ucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDUgdm9pZCBmdW5jdGlvbiByZXR1cm5cIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVCbG9jayhmdW5jdGlvbkRlY2xhcmF0aW9uLmJvZHksIGxhbmd1YWdlLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBmdW5jdGlvbkRlY2xhcmF0aW9uLCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcblxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycykge1xuICAgICAgaWYgKCFwYXJhbWV0ZXIgfHwgdHlwZW9mIHBhcmFtZXRlciAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocGFyYW1ldGVyKSB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlBhcmFtZXRlclwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcGFyYW1ldGVyXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBwYXJhbWV0ZXIubmFtZSwgXCJwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyLmxvY2F0aW9uKVxuICAgIH1cbiAgfVxuICB2YWxpZGF0ZUVycm9yVGFyZ2V0cyhlcnJvcnMsIHJlY29yZHMsIG1vZHVsZS5mdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGUubG9jYXRpb24pXG4gIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKVxuICB2YWxpZGF0ZUJhY2tlbmRUeXBlcyhtb2R1bGUsIGxhbmd1YWdlLCB7XG4gICAgY2FsbEVmZmVjdHM6IG9wdGlvbnMudmlzaWJsZUNhbGxFZmZlY3RzLFxuICAgIGNsYXNzZXM6IG9wdGlvbnMudmlzaWJsZUNsYXNzZXMsXG4gICAgZXJyb3JzOiBvcHRpb25zLnZpc2libGVFcnJvcnMsXG4gICAgZnVuY3Rpb25zOiBvcHRpb25zLnZpc2libGVGdW5jdGlvbnMsXG4gICAgcmVjb3Jkczogb3B0aW9ucy52aXNpYmxlUmVjb3Jkc1xuICB9KVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMTQgSVIgdHJhbnNhY3Rpb25hbGx5IGJlZm9yZSBhIG5vbi1jb2hvcnQgdGFyZ2V0IGFsbG9jYXRlcyBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdE9yZGVyZWRNYXBDYXBhYmlsaXR5KG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgY29uc3Qgbm9kZSA9IGZpbmRPcmRlcmVkTWFwTm9kZShtb2R1bGUpXG5cbiAgaWYgKG5vZGUpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxNCBvcmRlcmVkLW1hcCBpdGVyYXRpb25cIiwgZGlhZ25vc3RpY0xvY2F0aW9uKG5vZGUubG9jYXRpb24sIG1vZHVsZS5sb2NhdGlvbikpXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IGRpc3RpbmN0IG9yZGVyZWQtbWFwIHR5cGUsIGxpdGVyYWwsIG9yIGxvb3AgaW4gcGFyc2VyLW5ldXRyYWwgSVIuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHN1YnRyZWUuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkfSBGaXJzdCBUYXNrIDAxNCBub2RlLlxuICovXG5mdW5jdGlvbiBmaW5kT3JkZXJlZE1hcE5vZGUodmFsdWUsIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWRcbiAgc2Vlbi5hZGQodmFsdWUpXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG5cbiAgICBpZiAoW1wiT3JkZXJlZE1hcFR5cGVcIiwgXCJPcmRlcmVkTWFwTGl0ZXJhbFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoU3RyaW5nKGNhbmRpZGF0ZS5raW5kKSkpIHJldHVybiBjYW5kaWRhdGVcbiAgfVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgIGNvbnN0IGZvdW5kID0gZmluZE9yZGVyZWRNYXBOb2RlKGNoaWxkLCBzZWVuKVxuXG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZWplY3RzIHR5cGVkIGVycm9ycyBmb3IgYSB0YXJnZXQgb3V0c2lkZSB0aGUgVGFzayAwMTEgY29ob3J0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RUeXBlZEVycm9ycygvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSAqLyBtb2R1bGUsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSkge1xuICBpZiAoKG1vZHVsZS5lcnJvcnMgPz8gW10pLmxlbmd0aCA+IDApIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMTEgdHlwZWQgZXJyb3JzIGFuZCBoYW5kbGluZ1wiLCBtb2R1bGUuZXJyb3JzPy5bMF0/LmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHJlamVjdFR5cGVkRXJyb3JCbG9jayhkZWNsYXJhdGlvbj8uYm9keSwgbGFuZ3VhZ2UpXG4gIHJlamVjdFR5cGVkRXJyb3JCbG9jayhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBGaW5kcyB0eXBlZC1lcnJvciBzdGF0ZW1lbnRzIHdpdGhvdXQgZGVzY2VuZGluZyB0aHJvdWdoIG1hbGZvcm1lZCBvciBjeWNsaWMgYmxvY2tzLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIFZpc2l0ZWQgYmxvY2tzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdFR5cGVkRXJyb3JCbG9jaygvKiogQHR5cGUge3Vua25vd259ICovIGJsb2NrLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gbGFuZ3VhZ2UsXG4gIC8qKiBAdHlwZSB7U2V0PG9iamVjdD59ICovIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCBzZWVuLmhhcyhibG9jaykpIHJldHVyblxuICBzZWVuLmFkZChibG9jaylcbiAgY29uc3Qgc3RhdGVtZW50cyA9IFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIilcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50cykpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBpZiAoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJSYWlzZVN0YXRlbWVudFwiIHx8IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxMSB0eXBlZCBlcnJvcnMgYW5kIGhhbmRsaW5nXCIsXG4gICAgICAgIGRpYWdub3N0aWNMb2NhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIiksIFJlZmxlY3QuZ2V0KGJsb2NrLCBcImxvY2F0aW9uXCIpKSlcbiAgICB9XG4gICAgaWYgKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjb25zZXF1ZW50XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdFR5cGVkRXJyb3JCbG9jayhSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiV2hpbGVTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoU3RyaW5nKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpKSkpIHtcbiAgICAgIHJlamVjdFR5cGVkRXJyb3JCbG9jayhSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYm9keVwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRhcmdldC12aXNpYmxlIG5vbWluYWwgZXJyb3IgZGVjbGFyYXRpb25zIGJlZm9yZSBlbWlzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSBlcnJvcnMgLSBFcnJvciBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uW119IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119IGZ1bmN0aW9ucyAtIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG1vZHVsZUxvY2F0aW9uIC0gTW9kdWxlIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRXJyb3JUYXJnZXRzKFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb25bXX0gKi8gZXJyb3JzLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uW119ICovIHJlY29yZHMsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbltdfSAqLyBmdW5jdGlvbnMsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gKi8gbW9kdWxlTG9jYXRpb25cbikge1xuICBjb25zdCBpZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0KFsuLi5yZWNvcmRzLCAuLi5mdW5jdGlvbnNdLm1hcCgoe25hbWV9KSA9PiBsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSkpXG4gIGNvbnN0IGZvcmJpZGRlbiA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gbmV3IFNldChbXCJFcnJvclwiLCBcIkFnZ3JlZ2F0ZUVycm9yXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG5ldyBTZXQoW1wiVGhyb3dhYmxlXCIsIFwiRXhjZXB0aW9uXCIsIFwiUnVudGltZUV4Y2VwdGlvblwiLCBcIkVycm9yXCJdKSA6XG4gICAgICBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IG5ldyBTZXQoW1wiRXhjZXB0aW9uXCIsIFwiU3RhbmRhcmRFcnJvclwiLCBcIlNjcmlwdEVycm9yXCIsIFwiU3lzdGVtRXhpdFwiXSkgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wiVGhyb3dhYmxlXCIsIFwiRXhjZXB0aW9uXCIsIFwiUnVudGltZUV4Y2VwdGlvblwiLCBcIkVycm9yXCJdKSA6IG5ldyBTZXQoKVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlcnJvcnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBlcnJvcnNbaW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZGVjbGFyYXRpb24/LmxvY2F0aW9uLCBtb2R1bGVMb2NhdGlvbilcbiAgICBjb25zdCBmaWVsZHMgPSBkZWNsYXJhdGlvbiAmJiB0eXBlb2YgZGVjbGFyYXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbilcbiAgICAgID8gT2JqZWN0LmtleXMoZGVjbGFyYXRpb24pLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikgfHxcbiAgICAgIGRlY2xhcmF0aW9uLmtpbmQgIT0gXCJFcnJvckRlY2xhcmF0aW9uXCIgfHwgZmllbGRzICE9IFwiaWQsa2luZCxsb2NhdGlvbixuYW1lXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGRlY2xhcmF0aW9uLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJlcnJvciBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICBpZiAoKGRlY2xhcmF0aW9uLmlkICE9IGBlcnJvcjoke2luZGV4fWAgJiZcbiAgICAgICFuZXcgUmVnRXhwKGBeW2Etel1bYS16MC05Ll8tXSojZXJyb3I6JHtpbmRleH0kYCwgXCJ1XCIpLnRlc3QoZGVjbGFyYXRpb24uaWQgPz8gXCJcIikpIHx8IGlkcy5oYXMoZGVjbGFyYXRpb24uaWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgZXJyb3IgZGVjbGFyYXRpb24gaWRlbnRpdHlcIiwgZGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZGVjbGFyYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpIDogZGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKG5hbWVzLmhhcyhub3JtYWxpemVkKSB8fCBmb3JiaWRkZW4uaGFzKGRlY2xhcmF0aW9uLm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlcnJvciBkZWNsYXJhdGlvbiBjb2xsaXNpb24gJyR7ZGVjbGFyYXRpb24ubmFtZX0nYCwgZGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGlkcy5hZGQoZGVjbGFyYXRpb24uaWQpXG4gICAgbmFtZXMuYWRkKG5vcm1hbGl6ZWQpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgZXZlcnkgbm9taW5hbCByZWNvcmQgaWRlbnRpZmllciwgaWRlbnRpdHksIGZpZWxkLCBhbmQgdGFyZ2V0IGNvbGxpc2lvbiBiZWZvcmUgb3V0cHV0IGFsbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uW119IHJlY29yZHMgLSBDYW5kaWRhdGUgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbltdfSBmdW5jdGlvbnMgLSBDYW5kaWRhdGUgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbW9kdWxlTG9jYXRpb24gLSBNb2R1bGUgZmFsbGJhY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWNvcmRUYXJnZXRzKHJlY29yZHMsIGZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZUxvY2F0aW9uKSB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpXG4gIGNvbnN0IHRhcmdldE5hbWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbnMpIHtcbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IHR5cGVvZiBkZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pKSBjb250aW51ZVxuICAgIGNvbnN0IG5hbWUgPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJuYW1lXCIpXG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT0gXCJzdHJpbmdcIikgY29udGludWVcbiAgICB0YXJnZXROYW1lcy5hZGQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWUpXG4gIH1cblxuICBmb3IgKGxldCByZWNvcmRJbmRleCA9IDA7IHJlY29yZEluZGV4IDwgcmVjb3Jkcy5sZW5ndGg7IHJlY29yZEluZGV4ICs9IDEpIHtcbiAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzW3JlY29yZEluZGV4XVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKHJlY29yZD8ubG9jYXRpb24sIG1vZHVsZUxvY2F0aW9uKVxuICAgIGNvbnN0IHJlY29yZEtleXMgPSByZWNvcmQgJiYgdHlwZW9mIHJlY29yZCA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHJlY29yZClcbiAgICAgID8gT2JqZWN0LmtleXMocmVjb3JkKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICAgIDogXCJcIlxuXG4gICAgaWYgKCFyZWNvcmQgfHwgdHlwZW9mIHJlY29yZCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmVjb3JkKSB8fCByZWNvcmQua2luZCAhPSBcIlJlY29yZERlY2xhcmF0aW9uXCIgfHxcbiAgICAgICFbXCJmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixuYW1lXCIsIFwiZmllbGRzLGlkLGtpbmQsbG9jYXRpb24sbmFtZSx0eXBlUGFyYW1ldGVyc1wiXS5pbmNsdWRlcyhyZWNvcmRLZXlzKSB8fCAhaXNEZW5zZUFycmF5KHJlY29yZC5maWVsZHMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocmVjb3JkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJyZWNvcmQgZGVjbGFyYXRpb24gbG9jYXRpb25cIiwgbW9kdWxlTG9jYXRpb24pXG4gICAgdmFsaWRhdGVUYXJnZXRUeXBlSWRlbnRpZmllcihsYW5ndWFnZSwgcmVjb3JkLm5hbWUsIHJlY29yZC5sb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIHJlY29yZC5pZCAhPSBcInN0cmluZ1wiIHx8ICFuZXcgUmVnRXhwKGBeKD86W2Etel1bYS16MC05Ll8tXSojKT9yZWNvcmQ6JHtyZWNvcmRJbmRleH0kYCwgXCJ1XCIpLnRlc3QocmVjb3JkLmlkKSB8fFxuICAgICAgZGVjbGFyYXRpb25JZHMuaGFzKHJlY29yZC5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCByZWNvcmQgZGVjbGFyYXRpb24gaWRlbnRpdHlcIiwgcmVjb3JkLmxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNsYXJhdGlvbklkcy5hZGQocmVjb3JkLmlkKVxuICAgIHZhbGlkYXRlVHlwZVBhcmFtZXRlclRhcmdldHMocmVjb3JkLCBsYW5ndWFnZSlcbiAgICBjb25zdCB0YXJnZXROYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IHJlY29yZC5uYW1lLnRvTG93ZXJDYXNlKCkgOiByZWNvcmQubmFtZVxuXG4gICAgaWYgKHRhcmdldE5hbWVzLmhhcyh0YXJnZXROYW1lKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVjb3JkIGRlY2xhcmF0aW9uIGNvbGxpc2lvbiAnJHtyZWNvcmQubmFtZX0nYCwgcmVjb3JkLmxvY2F0aW9uKVxuICAgIHRhcmdldE5hbWVzLmFkZCh0YXJnZXROYW1lKVxuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KClcblxuICAgIGZvciAobGV0IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgcmVjb3JkLmZpZWxkcy5sZW5ndGg7IGZpZWxkSW5kZXggKz0gMSkge1xuICAgICAgY29uc3QgZmllbGQgPSByZWNvcmQuZmllbGRzW2ZpZWxkSW5kZXhdXG4gICAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGZpZWxkPy5sb2NhdGlvbiwgcmVjb3JkLmxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGRLZXlzID0gZmllbGQgJiYgdHlwZW9mIGZpZWxkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZmllbGQpXG4gICAgICAgID8gT2JqZWN0LmtleXMoZmllbGQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgICAgICA6IFwiXCJcblxuICAgICAgaWYgKCFmaWVsZCB8fCB0eXBlb2YgZmllbGQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGZpZWxkKSB8fCBmaWVsZC5raW5kICE9IFwiUmVjb3JkRmllbGRcIiB8fFxuICAgICAgICBmaWVsZEtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVjb3JkIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihmaWVsZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwicmVjb3JkIGZpZWxkIGxvY2F0aW9uXCIsIHJlY29yZC5sb2NhdGlvbilcbiAgICAgIGlmIChmaWVsZC5pZCAhPSBgJHtyZWNvcmQuaWR9OmZpZWxkOiR7ZmllbGRJbmRleH1gKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCByZWNvcmQgZmllbGQgaWRlbnRpdHlcIiwgZmllbGQubG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIGZpZWxkLm5hbWUsIFwicmVjb3JkIGZpZWxkXCIsIGZpZWxkLmxvY2F0aW9uKVxuICAgICAgY29uc3QgY29sbGlzaW9uID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgJiYgW1wiY29uc3RydWN0b3JcIiwgXCJwcm90b3R5cGVcIiwgXCJfX3Byb3RvX19cIl0uaW5jbHVkZXMoZmllbGQubmFtZSkgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgW1wiY29uc3RydWN0b3JcIiwgXCJwcm90b3R5cGVcIiwgXCJfX3Byb3RvX19cIl0uaW5jbHVkZXMoZmllbGQubmFtZSkgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJiBmaWVsZC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcIl9fXCIpIHx8XG4gICAgICAgIGxhbmd1YWdlID09IFwicnVieVwiICYmIFtcImluaXRpYWxpemVcIiwgXCJmcmVlemVcIiwgXCJzZW5kXCIsIFwicHVibGljX3NlbmRcIiwgXCJtZXRob2RcIiwgXCJzaW5nbGV0b25fY2xhc3NcIl0uaW5jbHVkZXMoZmllbGQubmFtZSkgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgamF2YU9iamVjdEluc3RhbmNlTWV0aG9kU2lnbmF0dXJlcy5oYXMoYCR7ZmllbGQubmFtZX0oKWApXG5cbiAgICAgIGlmIChjb2xsaXNpb24pIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHJlY29yZCBmaWVsZCBjb2xsaXNpb24gJyR7ZmllbGQubmFtZX0nYCwgZmllbGQubG9jYXRpb24pXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKSA6IGZpZWxkLm5hbWVcblxuICAgICAgaWYgKGZpZWxkTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgdGFyZ2V0IHJlY29yZCBmaWVsZCAnJHtmaWVsZC5uYW1lfSdgLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIGZpZWxkTmFtZXMuYWRkKG5vcm1hbGl6ZWQpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBleGFjdCB0YXJnZXQtdmlzaWJsZSBzaGFwZSBvZiBldmVyeSByZWZlcmVuY2UgY2xhc3MgYmVmb3JlIG91dHB1dCBhbGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uW119IGNsYXNzZXMgLSBDYW5kaWRhdGUgY2xhc3Nlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIEV4aXN0aW5nIHJlY29yZHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb25bXX0gZXJyb3JzIC0gRXhpc3RpbmcgdHlwZWQgZXJyb3JzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119IGZ1bmN0aW9ucyAtIEV4aXN0aW5nIGZ1bmN0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG1vZHVsZUxvY2F0aW9uIC0gRmFsbGJhY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1RhcmdldHMoY2xhc3NlcywgcmVjb3JkcywgZXJyb3JzLCBmdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGVMb2NhdGlvbikge1xuICBjb25zdCB0YXJnZXROYW1lcyA9IG5ldyBTZXQoKVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgWy4uLnJlY29yZHMsIC4uLmVycm9ycywgLi4uZnVuY3Rpb25zXSkge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbmFtZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcIm5hbWVcIilcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiKSBjb250aW51ZVxuICAgIHRhcmdldE5hbWVzLmFkZChsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSlcbiAgfVxuXG4gIGZvciAobGV0IGNsYXNzSW5kZXggPSAwOyBjbGFzc0luZGV4IDwgY2xhc3Nlcy5sZW5ndGg7IGNsYXNzSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY2xhc3Nlc1tjbGFzc0luZGV4XVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGRlY2xhcmF0aW9uPy5sb2NhdGlvbiwgbW9kdWxlTG9jYXRpb24pXG4gICAgY29uc3Qga2V5cyA9IGRlY2xhcmF0aW9uICYmIHR5cGVvZiBkZWNsYXJhdGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKVxuICAgICAgPyBPYmplY3Qua2V5cyhkZWNsYXJhdGlvbikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCBkZWNsYXJhdGlvbi5raW5kICE9IFwiQ2xhc3NEZWNsYXJhdGlvblwiIHx8XG4gICAgICAhW1wiY29uc3RydWN0b3IsZmllbGRzLGlkLGtpbmQsbG9jYXRpb24sbWV0aG9kcyxuYW1lXCIsIFwiY29uc3RydWN0b3IsZmllbGRzLGlkLGtpbmQsbG9jYXRpb24sbWV0aG9kcyxuYW1lLG93bmVyc2hpcFwiXS5pbmNsdWRlcyhrZXlzKSB8fFxuICAgICAgIWlzRGVuc2VBcnJheShkZWNsYXJhdGlvbi5maWVsZHMpIHx8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGggPT0gMCB8fCAhaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLm1ldGhvZHMpIHx8XG4gICAgICAhbmV3IFJlZ0V4cChgXig/OlthLXpdW2EtejAtOS5fLV0qIyk/Y2xhc3M6JHtjbGFzc0luZGV4fSRgLCBcInVcIikudGVzdChTdHJpbmcoZGVjbGFyYXRpb24uaWQpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5vd25lcnNoaXAgIT09IHVuZGVmaW5lZCAmJiBkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgIT0gXCJvcmRpbmFyeVwiICYmXG4gICAgICAoZGVjbGFyYXRpb24ub3duZXJzaGlwPy5raW5kICE9IFwib3duZWRSZXNvdXJjZVwiIHx8IHR5cGVvZiBkZWNsYXJhdGlvbi5vd25lcnNoaXAuZmllbGRJZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICB0eXBlb2YgZGVjbGFyYXRpb24ub3duZXJzaGlwLnJlc291cmNlSWQgIT0gXCJzdHJpbmdcIikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcmVmZXJlbmNlIGNsYXNzIHJlc291cmNlIG93bmVyc2hpcFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyYXRpb25Mb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGRlY2xhcmF0aW9uLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJyZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb24gbG9jYXRpb25cIiwgbW9kdWxlTG9jYXRpb24pXG5cbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZGVjbGFyYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpIDogZGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKHRhcmdldE5hbWVzLmhhcyh0YXJnZXROYW1lKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVmZXJlbmNlIGNsYXNzIGNvbGxpc2lvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfSdgLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgIHRhcmdldE5hbWVzLmFkZCh0YXJnZXROYW1lKVxuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KClcblxuICAgIGZvciAobGV0IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aDsgZmllbGRJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tmaWVsZEluZGV4XVxuICAgICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihmaWVsZD8ubG9jYXRpb24sIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGRLZXlzID0gZmllbGQgJiYgdHlwZW9mIGZpZWxkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZmllbGQpXG4gICAgICAgID8gT2JqZWN0LmtleXMoZmllbGQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgICAgaWYgKCFmaWVsZCB8fCBmaWVsZC5raW5kICE9IFwiUHJpdmF0ZUZpZWxkXCIgfHwgZmllbGRLZXlzICE9IFwiaWQsa2luZCxsb2NhdGlvbixuYW1lLHR5cGVcIiB8fFxuICAgICAgICBmaWVsZC5pZCAhPSBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6JHtmaWVsZEluZGV4fWApIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBwcml2YXRlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBjb25zdCBleGFjdEZpZWxkTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihmaWVsZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwicHJpdmF0ZSBmaWVsZCBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuXG4gICAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIGZpZWxkLm5hbWUsIFwicHJpdmF0ZSBmaWVsZFwiLCBleGFjdEZpZWxkTG9jYXRpb24pXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKSA6IGZpZWxkLm5hbWVcblxuICAgICAgaWYgKGZpZWxkTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgdGFyZ2V0IHByaXZhdGUgZmllbGQgJyR7ZmllbGQubmFtZX0nYCwgZXhhY3RGaWVsZExvY2F0aW9uKVxuICAgICAgZmllbGROYW1lcy5hZGQobm9ybWFsaXplZClcbiAgICB9XG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvclxuICAgIGNvbnN0IGNvbnN0cnVjdG9yTG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oY29uc3RydWN0b3I/LmxvY2F0aW9uLCBsb2NhdGlvbilcbiAgICBjb25zdCBjb25zdHJ1Y3RvcktleXMgPSBjb25zdHJ1Y3RvciAmJiB0eXBlb2YgY29uc3RydWN0b3IgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjb25zdHJ1Y3RvcilcbiAgICAgID8gT2JqZWN0LmtleXMoY29uc3RydWN0b3IpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghY29uc3RydWN0b3IgfHwgY29uc3RydWN0b3Iua2luZCAhPSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiB8fFxuICAgICAgIVtcImJvZHksaWQsa2luZCxsb2NhdGlvbixwYXJhbWV0ZXJzXCIsIFwiYm9keSxlZmZlY3RzLGZhaWx1cmVJZHMsaWQsa2luZCxsb2NhdGlvbixwYXJhbWV0ZXJzXCJdLmluY2x1ZGVzKGNvbnN0cnVjdG9yS2V5cykgfHxcbiAgICAgIGNvbnN0cnVjdG9yLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTpjb25zdHJ1Y3RvcmAgfHwgIWlzRGVuc2VBcnJheShjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvblwiLCBjb25zdHJ1Y3RvckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleGFjdENvbnN0cnVjdG9yTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihjb25zdHJ1Y3Rvci5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiY29uc3RydWN0b3IgZGVjbGFyYXRpb24gbG9jYXRpb25cIiwgZGVjbGFyYXRpb25Mb2NhdGlvbilcblxuICAgIHZhbGlkYXRlUmVmZXJlbmNlQ2xhc3NQYXJhbWV0ZXJzKGNvbnN0cnVjdG9yLnBhcmFtZXRlcnMsIFwiY29uc3RydWN0b3JcIiwgbGFuZ3VhZ2UsIGV4YWN0Q29uc3RydWN0b3JMb2NhdGlvbilcbiAgICBjb25zdCBtZXRob2ROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgbWV0aG9kSW5kZXggPSAwOyBtZXRob2RJbmRleCA8IGRlY2xhcmF0aW9uLm1ldGhvZHMubGVuZ3RoOyBtZXRob2RJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbi5tZXRob2RzW21ldGhvZEluZGV4XVxuICAgICAgY29uc3QgbWV0aG9kTG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24obWV0aG9kPy5sb2NhdGlvbiwgbG9jYXRpb24pXG4gICAgICBjb25zdCBtZXRob2RLZXlzID0gbWV0aG9kICYmIHR5cGVvZiBtZXRob2QgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShtZXRob2QpXG4gICAgICAgID8gT2JqZWN0LmtleXMobWV0aG9kKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICAgIGlmICghbWV0aG9kIHx8IG1ldGhvZC5raW5kICE9IFwiTWV0aG9kRGVjbGFyYXRpb25cIiB8fFxuICAgICAgICAhW1wiYm9keSxpZCxraW5kLGxvY2F0aW9uLG5hbWUscGFyYW1ldGVycyxyZXR1cm5UeXBlXCIsXG4gICAgICAgICAgXCJib2R5LGVmZmVjdHMsZmFpbHVyZUlkcyxpZCxraW5kLGxvY2F0aW9uLG5hbWUscGFyYW1ldGVycyxyZXR1cm5UeXBlXCJdLmluY2x1ZGVzKG1ldGhvZEtleXMpIHx8XG4gICAgICAgIG1ldGhvZC5pZCAhPSBgJHtkZWNsYXJhdGlvbi5pZH06bWV0aG9kOiR7bWV0aG9kSW5kZXh9YCB8fCAhaXNEZW5zZUFycmF5KG1ldGhvZC5wYXJhbWV0ZXJzKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1ldGhvZCBkZWNsYXJhdGlvblwiLCBtZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4YWN0TWV0aG9kTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihtZXRob2QubG9jYXRpb24sIGxhbmd1YWdlLCBcIm1ldGhvZCBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgICAgY29uc3QgbGlmZWN5Y2xlTmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBcIl9fY29uc3RydWN0XCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiaW5pdGlhbGl6ZVwiIDpcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcImNvbnN0cnVjdG9yXCIgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKG1ldGhvZC5uYW1lID09IGxpZmVjeWNsZU5hbWUpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVzZXJ2ZWQgcmVmZXJlbmNlIGxpZmVjeWNsZSBtZXRob2QgJyR7bWV0aG9kLm5hbWV9J2AsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBjb25zdCByZXNlcnZlZEhvb2sgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gL15fXy91LnRlc3QobWV0aG9kLm5hbWUpIDpcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBydWJ5UmVmZXJlbmNlTWV0aG9kSG9va3MuaGFzKG1ldGhvZC5uYW1lKSB8fFxuICAgICAgICAgIHR5cGVvZiBtZXRob2QubmFtZSA9PSBcInN0cmluZ1wiICYmIG1ldGhvZC5uYW1lLmVuZHNXaXRoKFwiPVwiKSA6XG4gICAgICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBqYXZhUmVmZXJlbmNlTWV0aG9kSG9va3MuaGFzKG1ldGhvZC5uYW1lKSA6XG4gICAgICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IGphdmFzY3JpcHRSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIDogZmFsc2VcblxuICAgICAgaWYgKHJlc2VydmVkSG9vaykgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVzZXJ2ZWQgcmVmZXJlbmNlIG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInJ1YnlcIikge1xuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZC5uYW1lICE9IFwic3RyaW5nXCIgfHwgIS9eW0EtWmEtel9dW0EtWmEtejAtOV9dKlshPz1dPyQvdS50ZXN0KG1ldGhvZC5uYW1lKSkge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1ldGhvZCBpZGVudGlmaWVyICcke1N0cmluZyhtZXRob2QubmFtZSl9J2AsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIG1ldGhvZC5uYW1lLCBcIm1ldGhvZFwiLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBtZXRob2QubmFtZS50b0xvd2VyQ2FzZSgpIDogbWV0aG9kLm5hbWVcblxuICAgICAgaWYgKG1ldGhvZE5hbWVzLmhhcyhub3JtYWxpemVkKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZHVwbGljYXRlIHRhcmdldCBtZXRob2QgJyR7bWV0aG9kLm5hbWV9J2AsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgdGFyZ2V0IGNsYXNzIG1lbWJlciBjb2xsaXNpb24gJyR7bWV0aG9kLm5hbWV9J2AsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBtZXRob2ROYW1lcy5hZGQobm9ybWFsaXplZClcbiAgICAgIHZhbGlkYXRlUmVmZXJlbmNlQ2xhc3NQYXJhbWV0ZXJzKG1ldGhvZC5wYXJhbWV0ZXJzLCBcIm1ldGhvZFwiLCBsYW5ndWFnZSwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIHJlZmVyZW5jZSBjYWxsYWJsZSdzIGV4YWN0IHBhcmFtZXRlciBzaGFwZSBhbmQgdGFyZ2V0IG5hbWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXX0gcGFyYW1ldGVycyAtIENhbmRpZGF0ZSBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtcImNvbnN0cnVjdG9yXCIgfCBcIm1ldGhvZFwifSBvd25lciAtIENhbGxhYmxlIGtpbmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gRmFsbGJhY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMocGFyYW1ldGVycywgb3duZXIsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uKSB7XG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihwYXJhbWV0ZXI/LmxvY2F0aW9uLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGtleXMgPSBwYXJhbWV0ZXIgJiYgdHlwZW9mIHBhcmFtZXRlciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHBhcmFtZXRlcilcbiAgICAgID8gT2JqZWN0LmtleXMocGFyYW1ldGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIXBhcmFtZXRlciB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlBhcmFtZXRlclwiIHx8IGtleXMgIT0gXCJraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtaXNzaW5nIG9yIGludmFsaWQgJHtvd25lcn0gcGFyYW1ldGVyYCwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4YWN0TG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihwYXJhbWV0ZXIubG9jYXRpb24sIGxhbmd1YWdlLCBgJHtvd25lcn0gcGFyYW1ldGVyIGxvY2F0aW9uYCwgb3duZXJMb2NhdGlvbilcblxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBleGFjdExvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBkZWNsYXJhdGlvbidzIHRhcmdldC12aXNpYmxlIHR5cGUtcGFyYW1ldGVyIG5hbWVzIGFuZCBpZGVudGl0aWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gT3duZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhkZWNsYXJhdGlvbiwgbGFuZ3VhZ2UpIHtcbiAgaWYgKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpIHJldHVyblxuICBpZiAoIWlzRGVuc2VBcnJheShkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycykpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uc1wiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoKVxuICAvKipcbiAgICogTm9ybWFsaXplcyBhIHR5cGUvdmFsdWUgc3BlbGxpbmcgZm9yIHRhcmdldCBjb2xsaXNpb24gY2hlY2tzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENhbmRpZGF0ZSB0YXJnZXQgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IGNvbXBhcmlzb24ga2V5LlxuICAgKi9cbiAgY29uc3QgdGFyZ2V0S2V5ID0gKG5hbWUpID0+IGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lXG4gIGNvbnN0IHZhbHVlTmFtZXMgPSBuZXcgU2V0KFtcbiAgICBkZWNsYXJhdGlvbi5uYW1lLFxuICAgIC4uLihkZWNsYXJhdGlvbi5raW5kID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiID8gZGVjbGFyYXRpb24ucGFyYW1ldGVycyA6IGRlY2xhcmF0aW9uLmZpZWxkcykubWFwKCh7bmFtZX0pID0+IG5hbWUpXG4gIF0ubWFwKHRhcmdldEtleSkpXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzW2luZGV4XVxuICAgIGNvbnN0IGtleXMgPSBwYXJhbWV0ZXIgJiYgdHlwZW9mIHBhcmFtZXRlciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHBhcmFtZXRlcilcbiAgICAgID8gT2JqZWN0LmtleXMocGFyYW1ldGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIXBhcmFtZXRlciB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlR5cGVQYXJhbWV0ZXJcIiB8fCBrZXlzICE9IFwiaWQsa2luZCxsb2NhdGlvbixuYW1lXCIgfHxcbiAgICAgIHBhcmFtZXRlci5pZCAhPSBgJHtkZWNsYXJhdGlvbi5pZH06dHlwZToke2luZGV4fWApIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25cIiwgcGFyYW1ldGVyPy5sb2NhdGlvbiA/PyBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocGFyYW1ldGVyLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJ0eXBlIHBhcmFtZXRlciBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCBwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLmxvY2F0aW9uKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0YXJnZXRLZXkocGFyYW1ldGVyLm5hbWUpXG5cbiAgICBpZiAobmFtZXMuaGFzKG5vcm1hbGl6ZWQpIHx8IHZhbHVlTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgdHlwZSBwYXJhbWV0ZXIgY29sbGlzaW9uICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgfVxuICAgIG5hbWVzLmFkZChub3JtYWxpemVkKVxuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0cyBUYXNrIDAxMiBJUiBiZWZvcmUgYSBub24tY29ob3J0IGJhY2tlbmQgcmVhY2hlcyBvbGRlciBmZWF0dXJlIGNoZWNrcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBnZW5lcmljIGRlY2xhcmF0aW9ucyBhcmUgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlSGFzVHlwZVBhcmFtZXRlcnMobW9kdWxlKSB7XG4gIHJldHVybiBbLi4ubW9kdWxlLnJlY29yZHMgPz8gW10sIC4uLm1vZHVsZS5mdW5jdGlvbnNdLnNvbWUoKGRlY2xhcmF0aW9uKSA9PlxuICAgIEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24/LnR5cGVQYXJhbWV0ZXJzKSAmJiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMDggc3RhdGVtZW50cyBiZWZvcmUgYSBub24tY29ob3J0IGJhY2tlbmQgcmVhY2hlcyBjb2xsZWN0aW9uLXR5cGUgY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RJdGVyYXRpb25TdGF0ZW1lbnRzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIilcbiAgICAgIDogdW5kZWZpbmVkLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja0l0ZXJhdGlvbihtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIFRhc2sgMDMyIElSIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCBhbGxvY2F0ZXMgb3V0cHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RDb25kaXRpb25Db250cm9sbGVkTG9vcHMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIilcbiAgICAgIDogdW5kZWZpbmVkLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UpXG59XG5cbi8qKlxuICogRmluZHMgYSBjb25kaXRpb24tY29udHJvbGxlZCBsb29wIHdpdGhvdXQgZGVzY2VuZGluZyB0aHJvdWdoIG1hbGZvcm1lZCBvciBjeWNsaWMgY29udGFpbmVycy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBWaXNpdGVkIGNvbnRhaW5lcnMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKGJsb2NrLCBsYW5ndWFnZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpXG5cbiAgICBpZiAoa2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAzMiBjb25kaXRpb24tY29udHJvbGxlZCBsb29wXCIsIGxvY2F0aW9uKVxuICAgIGlmIChraW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjb25zZXF1ZW50XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiV2hpbGVTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoU3RyaW5nKGtpbmQpKSkge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiY2F0Y2hCb2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyBhIFRhc2sgMDA4IG5vZGUgd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBjb250YWluZXJzLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIFZpc2l0ZWQgY29udGFpbmVycy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja0l0ZXJhdGlvbihibG9jaywgbGFuZ3VhZ2UsIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCBzZWVuLmhhcyhibG9jaykpIHJldHVyblxuICBzZWVuLmFkZChibG9jaylcbiAgY29uc3Qgc3RhdGVtZW50cyA9IFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIilcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50cykpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIilcbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIiksIFJlZmxlY3QuZ2V0KGJsb2NrLCBcImxvY2F0aW9uXCIpKVxuXG4gICAgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiQnJlYWtTdGF0ZW1lbnRcIiwgXCJDb250aW51ZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA4IG9yZGVyZWQgbGlzdCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChraW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImFsdGVybmF0ZVwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgfSBlbHNlIGlmIChraW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrSXRlcmF0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrSXRlcmF0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjYXRjaEJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMDcgb3B0aW9uYWwgdHlwZXMgYmVmb3JlIGEgbm9uLWNvaG9ydCBlbWl0dGVyIGFsbG9jYXRlcyBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdE9wdGlvbmFsVHlwZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IHR5cGVvZiBkZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pKSBjb250aW51ZVxuICAgIGNvbnN0IGxvY2F0aW9uID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwibG9jYXRpb25cIikgPz8gbW9kdWxlLmxvY2F0aW9uXG5cbiAgICBpZiAoY29udGFpbnNPcHRpb25hbFR5cGUoUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicmV0dXJuVHlwZVwiKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCByZXR1cm4gdHlwZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgQXJyYXkuaXNBcnJheShSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJwYXJhbWV0ZXJzXCIpKSA/IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInBhcmFtZXRlcnNcIikgOiBbXSkge1xuICAgICAgaWYgKGNvbnRhaW5zT3B0aW9uYWxUeXBlKHBhcmFtZXRlcj8udHlwZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIHBhcmFtZXRlciB0eXBlXCIsIHBhcmFtZXRlci5sb2NhdGlvbiA/PyBsb2NhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIiksIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIG9wdGlvbmFsIGxvY2FsIHR5cGVzIHJlY3Vyc2l2ZWx5IGluIG9uZSBjYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhibG9jaywgbGFuZ3VhZ2UpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCAhQXJyYXkuaXNBcnJheShSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIikpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBjb250YWluc09wdGlvbmFsVHlwZShzdGF0ZW1lbnQudHlwZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCBsb2NhbCB0eXBlXCIsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5jb25zZXF1ZW50LCBsYW5ndWFnZSlcbiAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmFsdGVybmF0ZSwgbGFuZ3VhZ2UpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgaWYgKGNvbnRhaW5zT3B0aW9uYWxUeXBlKHN0YXRlbWVudC52YWx1ZUJpbmRpbmc/LnR5cGUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCBpdGVyYXRpb24gYmluZGluZyB0eXBlXCIsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24gPz8gc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuY2F0Y2hCb2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGJvdW5kZWQgcmVjdXJzaXZlIHNlbWFudGljIHR5cGUgZm9yIGFuIG9wdGlvbmFsIG5vZGUuXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGUgLSBDYW5kaWRhdGUgdHlwZS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBhbiBvcHRpb25hbCB0eXBlIG9jY3Vycy5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNPcHRpb25hbFR5cGUodHlwZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHR5cGUpIHx8IHNlZW4uaGFzKHR5cGUpKSByZXR1cm4gZmFsc2VcbiAgc2Vlbi5hZGQodHlwZSlcbiAgY29uc3Qga2luZCA9IFJlZmxlY3QuZ2V0KHR5cGUsIFwia2luZFwiKVxuXG4gIGlmIChraW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHJldHVybiB0cnVlXG4gIGlmIChraW5kID09IFwiTGlzdFR5cGVcIikgcmV0dXJuIGNvbnRhaW5zT3B0aW9uYWxUeXBlKFJlZmxlY3QuZ2V0KHR5cGUsIFwiZWxlbWVudFR5cGVcIiksIHNlZW4pXG4gIGlmIChraW5kID09IFwiTWFwVHlwZVwiIHx8IGtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSByZXR1cm4gY29udGFpbnNPcHRpb25hbFR5cGUoUmVmbGVjdC5nZXQodHlwZSwgXCJrZXlUeXBlXCIpLCBzZWVuKSB8fFxuICAgIGNvbnRhaW5zT3B0aW9uYWxUeXBlKFJlZmxlY3QuZ2V0KHR5cGUsIFwidmFsdWVUeXBlXCIpLCBzZWVuKVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMDYgdHlwZXMgYmVmb3JlIGEgcmVnaXN0ZXJlZCBub24tY29ob3J0IGVtaXR0ZXIgY2FuIGFsbG9jYXRlIGFuIGFydGlmYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdENvbGxlY3Rpb25UeXBlcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbG9jYXRpb24gPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJsb2NhdGlvblwiKSA/PyBtb2R1bGUubG9jYXRpb25cbiAgICBjb25zdCByZXR1cm5UeXBlID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicmV0dXJuVHlwZVwiKVxuXG4gICAgaWYgKGlzQ29sbGVjdGlvblR5cGUocmV0dXJuVHlwZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbiByZXR1cm4gdHlwZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInBhcmFtZXRlcnNcIilcblxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIEFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgPyBwYXJhbWV0ZXJzIDogW10pIHtcbiAgICAgIGlmIChpc0NvbGxlY3Rpb25UeXBlKHBhcmFtZXRlcj8udHlwZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbiBwYXJhbWV0ZXIgdHlwZVwiLCBwYXJhbWV0ZXIubG9jYXRpb24gPz8gbG9jYXRpb24pXG4gICAgfVxuICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIiksIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgY29sbGVjdGlvbiBsb2NhbCB0eXBlcyByZWN1cnNpdmVseSBpbiBvbmUgYmxvY2suXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIHNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKGJsb2NrLCBsYW5ndWFnZSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8ICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIikpKSByZXR1cm5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKSkge1xuICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIGlzQ29sbGVjdGlvblR5cGUoc3RhdGVtZW50LnR5cGUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb24gbG9jYWwgdHlwZVwiLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5jb25zZXF1ZW50LCBsYW5ndWFnZSlcbiAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBsYW5ndWFnZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZShzdGF0ZW1lbnQudmFsdWVCaW5kaW5nPy50eXBlKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb24gaXRlcmF0aW9uIGJpbmRpbmcgdHlwZVwiLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uID8/IHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuY2F0Y2hCb2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgYSBwb3NzaWJsZSByZWN1cnNpdmUgY29sbGVjdGlvbiB0eXBlIHdpdGhvdXQgdHJhdmVyc2luZyBtYWxmb3JtZWQgY2hpbGRyZW4uXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGUgLSBDYW5kaWRhdGUgdHlwZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBvdXRlciB0eXBlIGlzIGEgY29sbGVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gaXNDb2xsZWN0aW9uVHlwZSh0eXBlKSB7XG4gIHJldHVybiBCb29sZWFuKHR5cGUgJiYgdHlwZW9mIHR5cGUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKSAmJlxuICAgIChbXCJMaXN0VHlwZVwiLCBcIk1hcFR5cGVcIiwgXCJPcmRlcmVkTWFwVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQodHlwZSwgXCJraW5kXCIpKSkpKVxufVxuXG4vKipcbiAqIFJlamVjdHMgc2VtYW50aWMgbmFtZXMgdGhhdCB3b3VsZCBjYXB0dXJlIHN5bnRheCBvd25lZCBieSBvbmUgYmFja2VuZCBlbWl0dGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIHZhbGlkYXRlUmVjb3JkQ29uc3RydWN0b3JOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBjb25zdCBuZWVkc05hdGl2ZU1hcCA9IFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSAmJlxuICAgIChtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJNYXBMaXRlcmFsXCIpIHx8IG1vZHVsZUNvbnRhaW5zRXhwcmVzc2lvbktpbmQobW9kdWxlLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpKVxuICBjb25zdCBuZWVkc1BocENvdW50ID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJiBtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIilcbiAgY29uc3QgamF2YXNjcmlwdE93bmVkTmFtZXMgPSBuZXcgU2V0KFtcImNvbnNvbGVcIiwgLi4uKG5lZWRzTmF0aXZlTWFwID8gW1wiTWFwXCJdIDogW10pXSlcbiAgY29uc3Qgb3duZWRFbnRyeU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJmbXRcIiwgXCJpbnQ2NFwiLCBcImJvb2xcIiwgXCJzdHJpbmdcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImNzaGFycFwiID8gbmV3IFNldChbXCJTeXN0ZW1cIl0pIDogbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBuZXcgU2V0KFtcImFyZ3NcIiwgXCJTeXN0ZW1cIl0pIDpcbiAgICBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBqYXZhc2NyaXB0T3duZWROYW1lcyA6IG5ldyBTZXQoKVxuICBjb25zdCBvd25lZFByaW50UmVjZWl2ZXJOYW1lcyA9IGxhbmd1YWdlID09IFwiZ29cIiA/IG5ldyBTZXQoW1wiZm10XCIsIFwiaW50NjRcIiwgXCJib29sXCIsIFwic3RyaW5nXCIsIFwidHJ1ZVwiLCBcImZhbHNlXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wiU3lzdGVtXCJdKSA6XG4gICAgW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpID8gamF2YXNjcmlwdE93bmVkTmFtZXMgOiBuZXcgU2V0KClcbiAgY29uc3Qgb3duZWRDYWxsYWJsZU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJtYWluXCIsIFwiaW5pdFwiLCBcImZtdFwiLCBcImludDY0XCIsIFwiYm9vbFwiLCBcInN0cmluZ1wiLCBcInRydWVcIiwgXCJmYWxzZVwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwiY3NoYXJwXCIgPyBuZXcgU2V0KFtcbiAgICBcIkVxdWFsc1wiLCBcIkZpbmFsaXplXCIsIFwiR2V0SGFzaENvZGVcIiwgXCJHZXRUeXBlXCIsIFwiTWFpblwiLCBcIk1lbWJlcndpc2VDbG9uZVwiLCBcIlByb2dyYW1cIiwgXCJSZWZlcmVuY2VFcXVhbHNcIiwgXCJTeXN0ZW1cIiwgXCJUb1N0cmluZ1wiXG4gIF0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wibWFpblwiXSkgOlxuICAgIFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSA/IGphdmFzY3JpcHRPd25lZE5hbWVzIDpcbiAgICBuZWVkc1BocENvdW50ID8gbmV3IFNldChbXCJjb3VudFwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJwdXRzXCIsIFwic2VuZFwiLCBcInB1YmxpY19zZW5kXCIsIFwiX19zZW5kX19cIl0pIDogbmV3IFNldCgpXG4gIC8qKlxuICAgKiBQcm90ZWN0cyBwcmludC9mYWN0b3J5IHNwZWxsaW5ncyBpbnNpZGUgb25lIGNhbGxhYmxlIHNjb3BlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gQ2FsbGFibGUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYm9keSAtIENhbGxhYmxlIGJvZHkuXG4gICAqIEBwYXJhbSB7XCJmdW5jdGlvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJtZXRob2RcIn0gb3duZXIgLSBEaWFnbm9zdGljIG93bmVyLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVDYWxsYWJsZUJpbmRpbmdzID0gKHBhcmFtZXRlcnMsIGJvZHksIG93bmVyKSA9PiB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuICAgICAgaWYgKG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHBhcmFtZXRlci5sb2NhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhib2R5KSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10pIHtcbiAgICAgICAgICBpZiAob3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke2JpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBiaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIgJiYgb3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKHN0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gY2F0Y2ggYmluZGluZyAnJHtzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgICBzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFsbFN0YXRlbWVudHMobW9kdWxlLmVudHJ5UG9pbnQuYm9keSkpIHtcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgb3duZWRFbnRyeU5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGxvY2FsICcke3N0YXRlbWVudC5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiICYmIG93bmVkRW50cnlOYW1lcy5oYXMoc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgaXRlcmF0aW9uIGJpbmRpbmcgJyR7c3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsXG4gICAgICAgIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10pIHtcbiAgICAgICAgaWYgKG93bmVkRW50cnlOYW1lcy5oYXMoYmluZGluZy5uYW1lKSkge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGl0ZXJhdGlvbiBiaW5kaW5nICcke2JpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBiaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiICYmIG93bmVkRW50cnlOYW1lcy5oYXMoc3RhdGVtZW50LmNhdGNoQmluZGluZy5uYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgY2F0Y2ggYmluZGluZyAnJHtzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgc3RhdGVtZW50LmNhdGNoQmluZGluZy5sb2NhdGlvbilcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAob3duZWRDYWxsYWJsZU5hbWVzLmhhcyh0YXJnZXROYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbikpXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZW1pdHRlZEphdmFGdW5jdGlvblNpZ25hdHVyZShkZWNsYXJhdGlvbilcblxuICAgICAgaWYgKHNpZ25hdHVyZSAmJiBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzLmhhcyhzaWduYXR1cmUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBgZnVuY3Rpb24gJyR7c2lnbmF0dXJlfScgY29uZmxpY3RzIHdpdGggYW4gaW5oZXJpdGVkIGphdmEubGFuZy5PYmplY3QgaW5zdGFuY2UgbWV0aG9kYCxcbiAgICAgICAgICBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbilcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MoZGVjbGFyYXRpb24ucGFyYW1ldGVycywgZGVjbGFyYXRpb24uYm9keSwgXCJmdW5jdGlvblwiKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MoZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycywgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgXCJjb25zdHJ1Y3RvclwiKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHZhbGlkYXRlQ2FsbGFibGVCaW5kaW5ncyhtZXRob2QucGFyYW1ldGVycywgbWV0aG9kLmJvZHksIFwibWV0aG9kXCIpXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB2YWxpZGF0ZUphdmFVdGlsRmFjdG9yeU5hbWVzKG1vZHVsZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIEphdmFTY3JpcHQtZmFtaWx5IGxleGljYWwgYmluZGluZ3MgdGhhdCBjYW4gY2FwdHVyZSBlbWl0dGVkIGJhcmUgcmVjb3JkIGNvbnN0cnVjdG9yIG5hbWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkLXNoYXBlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlY29yZENvbnN0cnVjdG9yTmFtZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIgJiYgbGFuZ3VhZ2UgIT0gXCJ0eXBlc2NyaXB0XCIpIHJldHVyblxuICBjb25zdCByZWNvcmROYW1lcyA9IG5ldyBTZXQoW1xuICAgIC4uLihtb2R1bGUucmVjb3JkcyA/PyBbXSkubWFwKChyZWNvcmQpID0+IHJlY29yZC5uYW1lKSxcbiAgICAuLi4obW9kdWxlLmNsYXNzZXMgPz8gW10pLm1hcCgoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLm5hbWUpLFxuICAgIC4uLihtb2R1bGUuZXJyb3JzID8/IFtdKS5tYXAoKGVycm9yKSA9PiBlcnJvci5uYW1lKVxuICBdKVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZGVjbGFyYXRpb25zIG5lc3RlZCBiZW5lYXRoIG9uZSBvd25pbmcgYmxvY2suXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gQmxvY2sgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtcImVudHJ5XCIgfCBcImZ1bmN0aW9uXCIgfCBcImNvbnN0cnVjdG9yXCIgfCBcIm1ldGhvZFwifSBvd25lciAtIE93bmluZyBzY29wZSBraW5kLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQmxvY2tOYW1lcyA9IChibG9jaywgb3duZXIpID0+IHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbGxTdGF0ZW1lbnRzKGJsb2NrKSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIHJlY29yZE5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLCBiaW5kaW5nTmFtZUxvY2F0aW9uKHN0YXRlbWVudCkpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgJiYgcmVjb3JkTmFtZXMuaGFzKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLFxuICAgICAgICAgIGJpbmRpbmdOYW1lTG9jYXRpb24oc3RhdGVtZW50LnZhbHVlQmluZGluZylcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBbc3RhdGVtZW50LmtleUJpbmRpbmcsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmddKSB7XG4gICAgICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhiaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtiaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKGJpbmRpbmcpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIgJiYgcmVjb3JkTmFtZXMuaGFzKHN0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGAke293bmVyfSBjYXRjaCBiaW5kaW5nICcke3N0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIG5vbWluYWwgY29uc3RydWN0b3JgLFxuICAgICAgICAgIGJpbmRpbmdOYW1lTG9jYXRpb24oc3RhdGVtZW50LmNhdGNoQmluZGluZylcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2tOYW1lcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBcImVudHJ5XCIpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAgIGlmIChyZWNvcmROYW1lcy5oYXMocGFyYW1ldGVyLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGZ1bmN0aW9uIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nIGNhcHR1cmVzIHJlY29yZCBjb25zdHJ1Y3RvcmAsIGJpbmRpbmdOYW1lTG9jYXRpb24ocGFyYW1ldGVyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdGVCbG9ja05hbWVzKGRlY2xhcmF0aW9uLmJvZHksIFwiZnVuY3Rpb25cIilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5jbGFzc2VzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycykge1xuICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgY29uc3RydWN0b3IgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgbm9taW5hbCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgXCJjb25zdHJ1Y3RvclwiKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIG1ldGhvZC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmIChyZWNvcmROYW1lcy5oYXMocGFyYW1ldGVyLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWV0aG9kIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nIGNhcHR1cmVzIG5vbWluYWwgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMobWV0aG9kLmJvZHksIFwibWV0aG9kXCIpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVqZWN0cyBsZXhpY2FsIGJpbmRpbmdzIHRoYXQgd291bGQgY2FwdHVyZSBKYXZhJ3MgcGFja2FnZSBxdWFsaWZpZXIgaW4gZW1pdHRlZCBjb2xsZWN0aW9uIGZhY3Rvcmllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVKYXZhVXRpbEZhY3RvcnlOYW1lcyhtb2R1bGUpIHtcbiAgLyoqXG4gICAqIFdhbGtzIG9uZSBsZXhpY2FsIGJsb2NrIHdoaWxlIHJldGFpbmluZyBvbmx5IGEgY3VycmVudGx5IHZpc2libGUgY2FwdHVyZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBCbG9jayB0byBpbnNwZWN0IGluIHNlbWFudGljIG9yZGVyLlxuICAgKiBAcGFyYW0ge3tkZXRhaWw6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSB8IHVuZGVmaW5lZH0gaW5oZXJpdGVkIC0gVmlzaWJsZSBjYXB0dXJlLlxuICAgKiBAcGFyYW0ge1wiZW50cnlcIiB8IFwiZnVuY3Rpb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwibWV0aG9kXCJ9IG93bmVyIC0gT3duaW5nIHNjb3BlIGtpbmQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVCbG9ja05hbWVzID0gKGJsb2NrLCBpbmhlcml0ZWQsIG93bmVyKSA9PiB7XG4gICAgbGV0IGNhcHR1cmUgPSBpbmhlcml0ZWRcblxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGJsb2NrLnN0YXRlbWVudHMpIHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBzdGF0ZW1lbnQubmFtZSA9PSBcImphdmFcIikge1xuICAgICAgICBjYXB0dXJlID0ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGxvY2FsICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBzdGF0ZW1lbnQubG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQubGlzdCA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQubWFwIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIgOlxuICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5lcnJvci5tZXNzYWdlIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmIChjYXB0dXJlICYmIGV4cHJlc3Npb24gJiYgKGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJMaXN0TGl0ZXJhbFwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiTWFwTGl0ZXJhbFwiKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3JkZXJlZE1hcExpdGVyYWxcIikgfHxcbiAgICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLCBcIk9wdGlvbmFsTm9uZVwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3B0aW9uYWxTb21lXCIpKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJqYXZhXCIsIGNhcHR1cmUuZGV0YWlsLCBjYXB0dXJlLmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGNhcHR1cmUsIG93bmVyKVxuICAgICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGNhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBjYXB0dXJlLCBvd25lcilcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgICAgICBjb25zdCBsb29wQ2FwdHVyZSA9IHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSA9PSBcImphdmFcIiA/IHtcbiAgICAgICAgICBkZXRhaWw6IGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICBsb2NhdGlvbjogc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvblxuICAgICAgICB9IDogY2FwdHVyZVxuXG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuYm9keSwgbG9vcENhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkQmluZGluZyA9IFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10uZmluZCgoe25hbWV9KSA9PiBuYW1lID09IFwiamF2YVwiKVxuICAgICAgICBjb25zdCBsb29wQ2FwdHVyZSA9IGNhcHR1cmVkQmluZGluZyA/IHtcbiAgICAgICAgICBkZXRhaWw6IGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICBsb2NhdGlvbjogY2FwdHVyZWRCaW5kaW5nLmxvY2F0aW9uXG4gICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBsb29wQ2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGNhcHR1cmUsIG93bmVyKVxuICAgICAgICBjb25zdCBjYXRjaENhcHR1cmUgPSBzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWUgPT0gXCJqYXZhXCIgPyB7XG4gICAgICAgICAgZGV0YWlsOiBgJHtvd25lcn0gY2F0Y2ggYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICBsb2NhdGlvbjogc3RhdGVtZW50LmNhdGNoQmluZGluZy5sb2NhdGlvblxuICAgICAgICB9IDogY2FwdHVyZVxuXG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuY2F0Y2hCb2R5LCBjYXRjaENhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2tOYW1lcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCB1bmRlZmluZWQsIFwiZW50cnlcIilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gZGVjbGFyYXRpb24ucGFyYW1ldGVycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgY29uc3QgY2FwdHVyZSA9IHBhcmFtZXRlciA/IHtcbiAgICAgIGRldGFpbDogXCJmdW5jdGlvbiBwYXJhbWV0ZXIgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheFwiLFxuICAgICAgbG9jYXRpb246IHBhcmFtZXRlci5sb2NhdGlvblxuICAgIH0gOiB1bmRlZmluZWRcblxuICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhkZWNsYXJhdGlvbi5ib2R5LCBjYXB0dXJlLCBcImZ1bmN0aW9uXCIpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuY2xhc3NlcyA/PyBbXSkge1xuICAgIGNvbnN0IGNhbGxhYmxlcyA9IFtcbiAgICAgIHtib2R5OiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCBvd25lcjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiY29uc3RydWN0b3JcIiksIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnN9LFxuICAgICAgLi4uZGVjbGFyYXRpb24ubWV0aG9kcy5tYXAoKG1ldGhvZCkgPT4gKHtib2R5OiBtZXRob2QuYm9keSwgb3duZXI6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIm1ldGhvZFwiKSwgcGFyYW1ldGVyczogbWV0aG9kLnBhcmFtZXRlcnN9KSlcbiAgICBdXG5cbiAgICBmb3IgKGNvbnN0IGNhbGxhYmxlIG9mIGNhbGxhYmxlcykge1xuICAgICAgY29uc3QgcGFyYW1ldGVyID0gY2FsbGFibGUucGFyYW1ldGVycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgICBjb25zdCBjYXB0dXJlID0gcGFyYW1ldGVyID8ge1xuICAgICAgICBkZXRhaWw6IGAke2NhbGxhYmxlLm93bmVyfSBwYXJhbWV0ZXIgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheGAsXG4gICAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXIubG9jYXRpb25cbiAgICAgIH0gOiB1bmRlZmluZWRcblxuICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKGNhbGxhYmxlLmJvZHksIGNhcHR1cmUsIGNhbGxhYmxlLm93bmVyKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIG1vZHVsZSBjb250YWlucyBhbiBleHByZXNzaW9uIGtpbmQgdGhhdCByZXF1aXJlcyB0YXJnZXQgcnVudGltZSBzY2FmZm9sZGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZC1zaGFwZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb25bXCJraW5kXCJdfSBraW5kIC0gU291Z2h0IGV4cHJlc3Npb24ga2luZC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBraW5kIG9jY3Vycy5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlQ29udGFpbnNFeHByZXNzaW9uS2luZChtb2R1bGUsIGtpbmQpIHtcbiAgY29uc3QgY2xhc3NCbG9ja3MgPSAobW9kdWxlLmNsYXNzZXMgPz8gW10pLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBbXG4gICAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgLi4uZGVjbGFyYXRpb24ubWV0aG9kcy5tYXAoKG1ldGhvZCkgPT4gbWV0aG9kLmJvZHkpXG4gIF0pXG5cbiAgcmV0dXJuIFttb2R1bGUuZW50cnlQb2ludC5ib2R5LCAuLi5tb2R1bGUuZnVuY3Rpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLmJvZHkpLCAuLi5jbGFzc0Jsb2Nrc10uc29tZSgoYmxvY2spID0+XG4gICAgYWxsU3RhdGVtZW50cyhibG9jaykuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5saXN0IDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5tYXAgOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGV4cHJlc3Npb24gPyBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIGtpbmQpIDogZmFsc2VcbiAgICB9KSlcbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBvbmUgdmFsaWRhdGVkIGV4cHJlc3Npb24gdHJlZSBmb3IgYSBzZW1hbnRpYyBraW5kLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gRXhwcmVzc2lvbiByb290LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uW1wia2luZFwiXX0ga2luZCAtIFNvdWdodCBraW5kLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtpbmQgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIGtpbmQpIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBraW5kKSByZXR1cm4gdHJ1ZVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ub3BlcmFuZCwga2luZClcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ubGVmdCwga2luZCkgfHwgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLnJpZ2h0LCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29uZGl0aW9uLCBraW5kKSB8fFxuICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmNvbnNlcXVlbnQsIGtpbmQpIHx8XG4gICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uYWx0ZXJuYXRlLCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoYXJndW1lbnQsIGtpbmQpKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmVjZWl2ZXIsIGtpbmQpIHx8XG4gICAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChhcmd1bWVudCwga2luZCkpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGFyZ3VtZW50LCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmVjZWl2ZXIsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHJldHVybiBleHByZXNzaW9uLmVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoZWxlbWVudCwga2luZCkpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLmVudHJpZXMuc29tZSgoZW50cnkpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoZW50cnkua2V5LCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGVudHJ5LnZhbHVlLCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uaW5kZXgsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29sbGVjdGlvbiwga2luZCkgfHwgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmtleSwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29sbGVjdGlvbiwga2luZClcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLnZhbHVlLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFVud3JhcFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5vcGVyYW5kLCBraW5kKVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHBhcnNlci1iYWNrZWQgZnVuY3Rpb24tbmFtZSBsb2NhdGlvbiB3aGVuIG9uZSBzdXJ2aXZlZCBzZW1hbnRpYyBhZGFwdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFNlbWFudGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBFeGFjdCBuYW1lIG9yIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbikge1xuICByZXR1cm4gZGVjbGFyYXRpb24uc291cmNlUHJvdmVuYW5jZT8ucmFuZ2VzLm5hbWUgPz8gZGVjbGFyYXRpb24ubG9jYXRpb25cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcGFyc2VyLWJhY2tlZCBiaW5kaW5nLW5hbWUgbG9jYXRpb24gd2hlbiBvbmUgc3Vydml2ZWQgc2VtYW50aWMgYWRhcHRhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlZhbHVlQmluZGluZyB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoQmluZGluZ30gYmluZGluZyAtIFNlbWFudGljIGJpbmRpbmcuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IG5hbWUgb3IgYmluZGluZyBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmluZGluZ05hbWVMb2NhdGlvbihiaW5kaW5nKSB7XG4gIHJldHVybiBiaW5kaW5nLnNvdXJjZVByb3ZlbmFuY2U/LnJhbmdlcy5uYW1lID8/IGJpbmRpbmcubG9jYXRpb25cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIEphdmEgbWV0aG9kIHNpZ25hdHVyZSB1c2VkIGZvciBpbmhlcml0ZWQtaW5zdGFuY2UgY29sbGlzaW9uIGNoZWNrcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBDYW5kaWRhdGUgSmF2YSB0YXJnZXQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBFbWl0dGVkIG5hbWUgYW5kIHBhcmFtZXRlciB0eXBlcyB3aGVuIGFsbCB0eXBlcyBhcmUgc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBlbWl0dGVkSmF2YUZ1bmN0aW9uU2lnbmF0dXJlKGRlY2xhcmF0aW9uKSB7XG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gW11cblxuICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgdHlwZSA9IHBhcmFtZXRlci50eXBlXG5cbiAgICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHR5cGUpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgZW1pdHRlZCA9IHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIgPyBcImphdmEudXRpbC5MaXN0XCIgOiB0eXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgPyBcImphdmEudXRpbC5NYXBcIiA6XG4gICAgICB0eXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiID8gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgOlxuICAgICAgdHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiID8gZW1pdFNjYWxhclR5cGUoXCJqYXZhXCIsIHR5cGUpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIWVtaXR0ZWQpIHJldHVybiB1bmRlZmluZWRcbiAgICBwYXJhbWV0ZXJUeXBlcy5wdXNoKGVtaXR0ZWQpXG4gIH1cblxuICByZXR1cm4gYCR7ZGVjbGFyYXRpb24ubmFtZX0oJHtwYXJhbWV0ZXJUeXBlcy5qb2luKFwiLFwiKX0pYFxufVxuXG4vKipcbiAqIFJldHVybnMgZXZlcnkgc3RhdGVtZW50IG5lc3RlZCBiZW5lYXRoIGEgYmxvY2sgaW4gc2VtYW50aWMgb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudFtdfSBTdGF0ZW1lbnRzIGluY2x1ZGluZyBuZXN0ZWQgYnJhbmNoZXMuXG4gKi9cbmZ1bmN0aW9uIGFsbFN0YXRlbWVudHMoYmxvY2spIHtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMuZmxhdE1hcCgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmNvbnNlcXVlbnQpLCAuLi4oc3RhdGVtZW50LmFsdGVybmF0ZSA/IGFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmFsdGVybmF0ZSkgOiBbXSldXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmJvZHkpXVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYm9keSldXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBbc3RhdGVtZW50LCAuLi5hbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5ib2R5KSwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuY2F0Y2hCb2R5KV1cblxuICAgIHJldHVybiBbc3RhdGVtZW50XVxuICB9KVxufVxuXG4vKipcbiAqIEluZGV4ZXMgZXhhY3QgbG9vcCBpZGVudGl0aWVzIGJlZm9yZSByZWN1cnNpdmUgdGFyZ2V0IHZhbGlkYXRpb24gc28gY3Jvc3MtZnVuY3Rpb24gdGFyZ2V0cyBmYWlsIGRldGVybWluaXN0aWNhbGx5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBvYmplY3Q+fSBMb29wIG93bmVyIGJ5IG1vZHVsZS1sb2NhbCBpZGVudGl0eS5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdExvb3BPd25lcnMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBjb25zdCBvd25lcnMgPSBuZXcgTWFwKClcbiAgY29uc3QgY2xhc3NPd25lcnMgPSAobW9kdWxlLmNsYXNzZXMgPz8gW10pLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBbZGVjbGFyYXRpb24uY29uc3RydWN0b3IsIC4uLmRlY2xhcmF0aW9uLm1ldGhvZHNdKVxuXG4gIGZvciAoY29uc3Qgb3duZXIgb2YgWy4uLmNsYXNzT3duZXJzLCAuLi5tb2R1bGUuZnVuY3Rpb25zLCBtb2R1bGUuZW50cnlQb2ludF0pIHtcbiAgICBpZiAob3duZXIgJiYgdHlwZW9mIG93bmVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob3duZXIpKSB2aXNpdChSZWZsZWN0LmdldChvd25lciwgXCJib2R5XCIpLCBvd25lcilcbiAgfVxuXG4gIHJldHVybiBvd25lcnNcblxuICAvKipcbiAgICogVmlzaXRzIGxvb3AgY29udGFpbmVycyB3aGlsZSBib3VuZGluZyBtYWxmb3JtZWQgY3ljbGVzLlxuICAgKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3duZXIgLSBFbmNsb3NpbmcgZnVuY3Rpb24gb3IgZW50cnkgcG9pbnQuXG4gICAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVdIC0gQmxvY2tzIG9uIHRoZSBhY3RpdmUgcmVjdXJzaXZlIHBhdGguXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQoYmxvY2ssIG93bmVyLCBhY3RpdmUgPSBuZXcgU2V0KCkpIHtcbiAgICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IGFjdGl2ZS5oYXMoYmxvY2spKSByZXR1cm5cbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXRlbWVudHMpKSByZXR1cm5cbiAgICBjb25zdCBwYXRoID0gbmV3IFNldChhY3RpdmUpXG5cbiAgICBwYXRoLmFkZChibG9jaylcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgICAgY29uc3Qga2luZCA9IFN0cmluZyhSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKSlcblxuICAgICAgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiV2hpbGVTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgY29uc3QgaWQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiaWRcIilcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImxvY2F0aW9uXCIpLCBSZWZsZWN0LmdldChibG9jaywgXCJsb2NhdGlvblwiKSlcblxuICAgICAgICBpZiAodHlwZW9mIGlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChpZCkpIGNvbnRpbnVlXG4gICAgICAgIGlmIChvd25lcnMuaGFzKGlkKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgICAgIG93bmVycy5zZXQoaWQsIG93bmVyKVxuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYm9keVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjb25zZXF1ZW50XCIpLCBvd25lciwgcGF0aClcbiAgICAgICAgdmlzaXQoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImFsdGVybmF0ZVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYm9keVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjYXRjaEJvZHlcIiksIG93bmVyLCBwYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgY29tcGxldGUgc2VtYW50aWMgYmxvY2sgYmVmb3JlIGVtaXNzaW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3thY3RpdmU6IChpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50KVtdLCBvd25lcjogb2JqZWN0LCBvd25lcnM6IE1hcDxzdHJpbmcsIG9iamVjdD59fSBsb29wQ29udGV4dCAtIEFjdGl2ZSBsb29wcyBhbmQgdGhlaXIgbGV4aWNhbCBvd25lci5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVQYXRoXSAtIEJsb2NrcyBvbiB0aGUgYWN0aXZlIHJlY3Vyc2l2ZSBwYXRoLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gW2V4dGVybmFsRGVjbGFyYXRpb25JZHNdIC0gUmVzb2x2ZWQgZGVjbGFyYXRpb25zIHdob3NlIHNvdXJjZSBzcGVsbGluZyBpcyB0YXJnZXQtaW5kZXBlbmRlbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCbG9jayhibG9jaywgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoID0gbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBibG9ja1wiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKGJsb2NrKVxuICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihjYW5kaWRhdGUubG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG5cbiAgaWYgKGFjdGl2ZVBhdGguaGFzKGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjeWNsaWMgYmxvY2tcIiwgbG9jYXRpb24pXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIkJsb2NrXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGJsb2NrICR7U3RyaW5nKFJlZmxlY3QuZ2V0KGJsb2NrLCBcImtpbmRcIikpfWAsIGxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnN0YXRlbWVudHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGJsb2NrIHN0YXRlbWVudHNcIiwgbG9jYXRpb24pXG4gIGNvbnN0IGJsb2NrUGF0aCA9IG5ldyBTZXQoYWN0aXZlUGF0aClcblxuICBibG9ja1BhdGguYWRkKGNhbmRpZGF0ZSlcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgY2FuZGlkYXRlLnN0YXRlbWVudHMpIHtcbiAgICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbG9vcENvbnRleHQsIGJsb2NrUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgc3VwcG9ydGVkIHN0YXRlbWVudCByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gc3RhdGVtZW50IC0gQ2FuZGlkYXRlIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgYm9keSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7e2FjdGl2ZTogKGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnQpW10sIG93bmVyOiBvYmplY3QsIG93bmVyczogTWFwPHN0cmluZywgb2JqZWN0Pn19IGxvb3BDb250ZXh0IC0gQWN0aXZlIGxvb3BzIGFuZCB0aGVpciBsZXhpY2FsIG93bmVyLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZVBhdGhdIC0gQWN0aXZlIGJsb2NrIGNvbnRhaW5lcnMuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbZXh0ZXJuYWxEZWNsYXJhdGlvbklkc10gLSBSZXNvbHZlZCBkZWNsYXJhdGlvbnMgd2hvc2Ugc291cmNlIHNwZWxsaW5nIGlzIHRhcmdldC1pbmRlcGVuZGVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCA9IG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhdGVtZW50XCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIilcbiAgY29uc3Qgb3duTG9jYXRpb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIilcbiAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24ob3duTG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG5cbiAgaWYgKHR5cGVvZiBraW5kICE9IFwic3RyaW5nXCIpIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHN0YXRlbWVudFwiLCBsb2NhdGlvbilcbiAgaWYgKGtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbn0gKi8gKHN0YXRlbWVudClcblxuICAgIGlmICh0eXBlb2YgZGVjbGFyYXRpb24ubXV0YWJsZSAhPSBcImJvb2xlYW5cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvY2FsIGRlY2xhcmF0aW9uIHdpdGggaW52YWxpZCBtdXRhYmlsaXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBcImxvY2FsXCIsIGxvY2F0aW9uKVxuICAgIGlmIChkZWNsYXJhdGlvbi50eXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiAmJiBkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ua2luZCAhPSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJvcmRlcmVkLW1hcCBsb2NhbCByZXF1aXJlcyBhIGRpcmVjdCBsaXRlcmFsIGluaXRpYWxpemVyXCIsXG4gICAgICAgIGRpYWdub3N0aWNMb2NhdGlvbihkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ubG9jYXRpb24sIGxvY2F0aW9uKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIiAmJiBkZWNsYXJhdGlvbi5tdXRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGxvY2FsIG11c3QgYmUgaW1tdXRhYmxlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyxcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiICYmIGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkFzc2lnbm1lbnRTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG5cbiAgICB2YWxpZGF0ZUFzc2lnbm1lbnRUYXJnZXQoYXNzaWdubWVudC50YXJnZXQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoYXNzaWdubWVudCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZXhwcmVzc2lvbixmaWVsZCxraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgdHlwZW9mIGFzc2lnbm1lbnQuZmllbGQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgYXNzaWdubWVudC5yZWNlaXZlcj8ua2luZCAhPSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByaXZhdGUgZmllbGQgcmVjZWl2ZXIgb3IgcHJpdmF0ZSBmaWVsZCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGFzc2lnbm1lbnQucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZXhwcmVzc2lvblwiKVxuXG4gICAgaWYgKGV4cHJlc3Npb24gIT09IHVuZGVmaW5lZCkgdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgbG9vcENvbnRleHQuYWN0aXZlLnNvbWUoKHtraW5kfSkgPT4ga2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBraW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcInJldHVybiBmcm9tIGFuIGl0ZXJhdGlvbiBib2R5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDUgdm9pZCBjYWxsIGV4cHJlc3Npb24gc3RhdGVtZW50XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleHByZXNzaW9uID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIilcblxuICAgIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAhW1wiQ2FsbEV4cHJlc3Npb25cIiwgXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiLCBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCJdLmluY2x1ZGVzKFN0cmluZyhSZWZsZWN0LmdldChleHByZXNzaW9uLCBcImtpbmRcIikpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImV4cHJlc3Npb24gc3RhdGVtZW50IG90aGVyIHRoYW4gYSBkaXJlY3Qgb3IgcmVjZWl2ZXIgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIiksIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBicmFuY2ggPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklmU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGJyYW5jaC5jb25kaXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUJsb2NrKGJyYW5jaC5jb25zZXF1ZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGlmIChPYmplY3QuaGFzT3duKGJyYW5jaCwgXCJhbHRlcm5hdGVcIikpIHtcbiAgICAgIHZhbGlkYXRlQmxvY2soYnJhbmNoLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJCcmVha1N0YXRlbWVudFwiIHx8IGtpbmQgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDA4TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwOCBvcmRlcmVkIGxpc3QgaXRlcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgYCR7a2luZH0gbG9jYXRpb25gLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKC8qKiBAdHlwZSB7b2JqZWN0fSAqLyAoc3RhdGVtZW50KSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwia2luZCxsb2NhdGlvbix0YXJnZXRMb29wSWRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkICR7a2luZH1gLCBsb2NhdGlvbilcbiAgICBjb25zdCB0YXJnZXRMb29wSWQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwidGFyZ2V0TG9vcElkXCIpXG4gICAgY29uc3QgbmVhcmVzdCA9IGxvb3BDb250ZXh0LmFjdGl2ZS5hdCgtMSlcblxuICAgIGlmICghbmVhcmVzdCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtraW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIn0gb3V0c2lkZSBhIGxvb3BgLCBsb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIHRhcmdldExvb3BJZCAhPSBcInN0cmluZ1wiIHx8ICFsb29wQ29udGV4dC5vd25lcnMuaGFzKHRhcmdldExvb3BJZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJpbnZhbGlkIGxvb3AgY29udHJvbCB0YXJnZXQgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChsb29wQ29udGV4dC5vd25lcnMuZ2V0KHRhcmdldExvb3BJZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibG9vcCBjb250cm9sIHRhcmdldCBjcm9zc2VzIGEgZnVuY3Rpb24gYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICh0YXJnZXRMb29wSWQgIT0gbmVhcmVzdC5pZCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvb3AgY29udHJvbCBtdXN0IHRhcmdldCB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbG9vcFwiLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMzJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMyIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3BcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIldoaWxlU3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgbG9vcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMobG9vcCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYm9keSxjb25kaXRpb24saWQsa2luZCxsb2NhdGlvblwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFdoaWxlU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIGxvb3AuaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGxvb3AuaWQpIHx8IGxvb3BDb250ZXh0Lm93bmVycy5nZXQobG9vcC5pZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbG9vcC5jb25kaXRpb24gfHwgdHlwZW9mIGxvb3AuY29uZGl0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmNvbmRpdGlvbikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmNvbmRpdGlvbiwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLmNvbmRpdGlvbiwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3AgYm9keVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AuYm9keSwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBib2R5IGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUJsb2NrKGxvb3AuYm9keSwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFsuLi5sb29wQ29udGV4dC5hY3RpdmUsIGxvb3BdLCBvd25lcjogbG9vcENvbnRleHQub3duZXIsIG93bmVyczogbG9vcENvbnRleHQub3duZXJzfSwgYWN0aXZlUGF0aCxcbiAgICAgIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMDhMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA4IG9yZGVyZWQgbGlzdCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIkZvckVhY2hTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksaWQsa2luZCxsaXN0LGxvY2F0aW9uLHZhbHVlQmluZGluZ1wiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIEZvckVhY2hTdGF0ZW1lbnRcIiwgbG9vcExvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgbG9vcC5pZCAhPSBcInN0cmluZ1wiIHx8ICEvXmxvb3A6WzAtOV0rJC91LnRlc3QobG9vcC5pZCkgfHwgbG9vcENvbnRleHQub3duZXJzLmdldChsb29wLmlkKSAhPT0gbG9vcENvbnRleHQub3duZXIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBsb29wIGlkZW50aXR5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmxpc3QgfHwgdHlwZW9mIGxvb3AubGlzdCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5saXN0KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gY29sbGVjdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AubGlzdCwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiaXRlcmF0aW9uIGNvbGxlY3Rpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLmxpc3QsIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgaWYgKCFsb29wLnZhbHVlQmluZGluZyB8fCB0eXBlb2YgbG9vcC52YWx1ZUJpbmRpbmcgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AudmFsdWVCaW5kaW5nKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gYmluZGluZ1wiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGJpbmRpbmcgPSBsb29wLnZhbHVlQmluZGluZ1xuICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGJpbmRpbmcsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIml0ZXJhdGlvbiBiaW5kaW5nIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoYmluZGluZy5raW5kICE9IFwiVmFsdWVCaW5kaW5nXCIgfHwgYmluZGluZ0ZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24sbXV0YWJsZSxuYW1lLHR5cGVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibXV0YWJsZSBpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgYmluZGluZy5uYW1lLCBcIml0ZXJhdGlvbiBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGl0ZXJhdGlvbiBib2R5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5ib2R5LCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJpdGVyYXRpb24gYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDE0TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxNCBvcmRlcmVkLW1hcCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksaWQsa2V5QmluZGluZyxraW5kLGxvY2F0aW9uLG1hcCx2YWx1ZUJpbmRpbmdcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBGb3JFYWNoTWFwU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsb29wLmlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChsb29wLmlkKSB8fCBsb29wQ29udGV4dC5vd25lcnMuZ2V0KGxvb3AuaWQpICE9PSBsb29wQ29udGV4dC5vd25lcikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWxvb3AubWFwIHx8IHR5cGVvZiBsb29wLm1hcCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5tYXApKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG9yZGVyZWQtbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5tYXAsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24obG9vcC5tYXAsIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBbcm9sZSwgYmluZGluZ10gb2YgW1tcImtleVwiLCBsb29wLmtleUJpbmRpbmddLCBbXCJ2YWx1ZVwiLCBsb29wLnZhbHVlQmluZGluZ11dKSB7XG4gICAgICBpZiAoIWJpbmRpbmcgfHwgdHlwZW9mIGJpbmRpbmcgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJpbmRpbmcpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGxvb3BMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGJpbmRpbmcubG9jYXRpb24sIGxhbmd1YWdlLCBgbWFwIGl0ZXJhdGlvbiAke3JvbGV9IGJpbmRpbmcgbG9jYXRpb25gLCBsb29wTG9jYXRpb24pXG4gICAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICAgIGlmIChiaW5kaW5nLmtpbmQgIT0gXCJWYWx1ZUJpbmRpbmdcIiB8fCBiaW5kaW5nRmllbGRzICE9IFwia2luZCxsb2NhdGlvbixtdXRhYmxlLG5hbWUsdHlwZVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGJpbmRpbmdMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiTWFwIGl0ZXJhdGlvbiBiaW5kaW5ncyBtdXN0IGJlIGltbXV0YWJsZVwiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBiaW5kaW5nLm5hbWUsIGBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmJvZHkgfHwgdHlwZW9mIGxvb3AuYm9keSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5ib2R5KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtYXAgaXRlcmF0aW9uIGJvZHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmJvZHksIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIm1hcCBpdGVyYXRpb24gYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKC8qKiBAdHlwZSB7b2JqZWN0fSAqLyAoc3RhdGVtZW50KSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmFpc2VkID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImVycm9yXCIpXG4gICAgY29uc3QgcmFpc2VMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJSYWlzZVN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGNvbnN0cnVjdGlvbkZpZWxkcyA9IHJhaXNlZCAmJiB0eXBlb2YgcmFpc2VkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmFpc2VkKVxuICAgICAgPyBPYmplY3Qua2V5cyhyYWlzZWQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmIChmaWVsZHMgIT0gXCJlcnJvcixraW5kLGxvY2F0aW9uXCIgfHwgIXJhaXNlZCB8fCB0eXBlb2YgcmFpc2VkICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyYWlzZWQpIHx8XG4gICAgICByYWlzZWQua2luZCAhPSBcIkVycm9yQ29uc3RydWN0aW9uXCIgfHwgY29uc3RydWN0aW9uRmllbGRzICE9IFwiZXJyb3Isa2luZCxsb2NhdGlvbixtZXNzYWdlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgUmFpc2VTdGF0ZW1lbnRcIiwgcmFpc2VMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocmFpc2VkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJlcnJvciBjb25zdHJ1Y3Rpb24gbG9jYXRpb25cIiwgcmFpc2VMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKHJhaXNlZC5lcnJvciwgbGFuZ3VhZ2UsIHJhaXNlZC5sb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24ocmFpc2VkLm1lc3NhZ2UsIGxhbmd1YWdlLCByYWlzZWQubG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcbiAgICBjb25zdCB0cnlMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJUcnlTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhoYW5kbGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJib2R5LGNhdGNoQmluZGluZyxjYXRjaEJvZHksY2F0Y2hUeXBlLGtpbmQsbG9jYXRpb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBUcnlTdGF0ZW1lbnRcIiwgdHJ5TG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXJyb3JUeXBlU2hhcGUoaGFuZGxlci5jYXRjaFR5cGUsIGxhbmd1YWdlLCB0cnlMb2NhdGlvbilcbiAgICBjb25zdCBiaW5kaW5nID0gaGFuZGxlci5jYXRjaEJpbmRpbmdcbiAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gYmluZGluZyAmJiB0eXBlb2YgYmluZGluZyA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGJpbmRpbmcpXG4gICAgICA/IE9iamVjdC5rZXlzKGJpbmRpbmcpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcbiAgICBjb25zdCBiaW5kaW5nTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihiaW5kaW5nPy5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiY2F0Y2ggYmluZGluZyBsb2NhdGlvblwiLCB0cnlMb2NhdGlvbilcblxuICAgIGlmICghYmluZGluZyB8fCBiaW5kaW5nLmtpbmQgIT0gXCJDYXRjaEJpbmRpbmdcIiB8fCBiaW5kaW5nRmllbGRzICE9IFwia2luZCxsb2NhdGlvbixtdXRhYmxlLG5hbWUsdHlwZVwiIHx8IGJpbmRpbmcubXV0YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgY2F0Y2ggYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGJpbmRpbmcubmFtZSwgXCJjYXRjaCBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKGJpbmRpbmcudHlwZSwgbGFuZ3VhZ2UsIGJpbmRpbmdMb2NhdGlvbilcbiAgICBpZiAoYmluZGluZy50eXBlLmRlY2xhcmF0aW9uSWQgIT0gaGFuZGxlci5jYXRjaFR5cGUuZGVjbGFyYXRpb25JZCkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNhdGNoIGJpbmRpbmcgdHlwZSBtaXNtYXRjaFwiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlQmxvY2soaGFuZGxlci5ib2R5LCBsYW5ndWFnZSwgdHJ5TG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlQmxvY2soaGFuZGxlci5jYXRjaEJvZHksIGxhbmd1YWdlLCB0cnlMb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cblxuICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBzdGF0ZW1lbnQgJHtraW5kfWAsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgY2xvc2VkIHBhcnNlci1uZXV0cmFsIGVycm9yIHR5cGUgc2hhcGUuXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGUgLSBDYW5kaWRhdGUgZXJyb3IgdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBOZWFyZXN0IG93bmluZyBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gdHlwZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSAqLyBvd25lckxvY2F0aW9uKSB7XG4gIGNvbnN0IGZpZWxkcyA9IHR5cGUgJiYgdHlwZW9mIHR5cGUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKVxuICAgID8gT2JqZWN0LmtleXModHlwZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuICBjb25zdCBjYW5kaWRhdGUgPSB0eXBlICYmIHR5cGVvZiB0eXBlID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodHlwZSlcbiAgICA/IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh0eXBlKSA6IHt9XG5cbiAgaWYgKGNhbmRpZGF0ZS5raW5kICE9IFwiRXJyb3JUeXBlXCIgfHwgZmllbGRzICE9IFwiZGVjbGFyYXRpb25JZCxraW5kXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5kZWNsYXJhdGlvbklkICE9IFwic3RyaW5nXCIgfHxcbiAgICAhL14oPzooPzpbYS16XVthLXowLTkuXy1dKiMpP2Vycm9yOlswLTldK3woPzptb2R1bGU6WzAtOV0rXFwvKT9jYXBhYmlsaXR5OlswLTldK1xcL2ZhaWx1cmU6WzAtOV0rKSQvdVxuICAgICAgLnRlc3QoY2FuZGlkYXRlLmRlY2xhcmF0aW9uSWQpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBlcnJvciB0eXBlXCIsIG93bmVyTG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29tcGxldGUgc2VtYW50aWMgbG9jYXRpb24gc3VpdGFibGUgZm9yIGRpYWdub3N0aWMgY29uc3RydWN0aW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBQcmVmZXJyZWQgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IGZhbGxiYWNrIC0gTmVhcmVzdCBlbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFNhZmUgZGlhZ25vc3RpYyBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZGlhZ25vc3RpY0xvY2F0aW9uKGNhbmRpZGF0ZSwgZmFsbGJhY2spIHtcbiAgaWYgKGlzU2VtYW50aWNMb2NhdGlvbihjYW5kaWRhdGUpKSByZXR1cm4gY2FuZGlkYXRlXG4gIGlmIChpc1NlbWFudGljTG9jYXRpb24oZmFsbGJhY2spKSByZXR1cm4gZmFsbGJhY2tcblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmVxdWlyZXMgb25lIGNvbXBsZXRlIHBhcnNlci1uZXV0cmFsIGxvY2F0aW9uIGJlZm9yZSBhbnkgYmFja2VuZCBvciBkaWFnbm9zdGljIGNvbnN1bWVzIGl0LlxuICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBSZXF1aXJlZCBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIExvY2F0aW9uIG93bmVyIGZvciBhIGRldGVybWluaXN0aWMgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZmFsbGJhY2sgLSBOZWFyZXN0IGVuY2xvc2luZyBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gVmFsaWRhdGVkIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihjYW5kaWRhdGUsIGxhbmd1YWdlLCBzdWJqZWN0LCBmYWxsYmFjaykge1xuICBpZiAoIWlzU2VtYW50aWNMb2NhdGlvbihjYW5kaWRhdGUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtaXNzaW5nIG9yIGludmFsaWQgJHtzdWJqZWN0fWAsIGRpYWdub3N0aWNMb2NhdGlvbihmYWxsYmFjaywgdW5kZWZpbmVkKSlcblxuICByZXR1cm4gY2FuZGlkYXRlXG59XG5cbi8qKlxuICogQ2hlY2tzIGEgY29tcGxldGUgb3JkZXJlZCBVVEYtMTYgc291cmNlIHJhbmdlLlxuICogQHBhcmFtIHt1bmtub3dufSBsb2NhdGlvbiAtIENhbmRpZGF0ZSBzb3VyY2UgcmFuZ2UuXG4gKiBAcmV0dXJucyB7bG9jYXRpb24gaXMgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFdoZXRoZXIgdGhlIHJhbmdlIGlzIHNhZmUgdG8gY29uc3VtZS5cbiAqL1xuZnVuY3Rpb24gaXNTZW1hbnRpY0xvY2F0aW9uKGxvY2F0aW9uKSB7XG4gIGlmICghbG9jYXRpb24gfHwgdHlwZW9mIGxvY2F0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb2NhdGlvbikpIHJldHVybiBmYWxzZVxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge3tmaWxlbmFtZT86IHVua25vd24sIHN0YXJ0PzogdW5rbm93biwgZW5kPzogdW5rbm93bn19ICovIChsb2NhdGlvbilcblxuICBpZiAodHlwZW9mIGNhbmRpZGF0ZS5maWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZS5maWxlbmFtZS5sZW5ndGggPT0gMCB8fFxuICAgICFpc1NlbWFudGljUG9pbnQoY2FuZGlkYXRlLnN0YXJ0KSB8fCAhaXNTZW1hbnRpY1BvaW50KGNhbmRpZGF0ZS5lbmQpKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gY2FuZGlkYXRlLmVuZC5vZmZzZXQgPj0gY2FuZGlkYXRlLnN0YXJ0Lm9mZnNldCAmJiBjYW5kaWRhdGUuZW5kLmxpbmUgPj0gY2FuZGlkYXRlLnN0YXJ0LmxpbmUgJiZcbiAgICAoY2FuZGlkYXRlLmVuZC5saW5lICE9IGNhbmRpZGF0ZS5zdGFydC5saW5lIHx8IGNhbmRpZGF0ZS5lbmQuY29sdW1uID49IGNhbmRpZGF0ZS5zdGFydC5jb2x1bW4pXG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBjb21wbGV0ZSBvbmUtYmFzZWQgVVRGLTE2IHNvdXJjZSBwb2ludC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcG9pbnQgLSBDYW5kaWRhdGUgc291cmNlIHBvaW50LlxuICogQHJldHVybnMge3BvaW50IGlzIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50fSBXaGV0aGVyIGFsbCBjb29yZGluYXRlcyBhcmUgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGlzU2VtYW50aWNQb2ludChwb2ludCkge1xuICBpZiAoIXBvaW50IHx8IHR5cGVvZiBwb2ludCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocG9pbnQpKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHt7b2Zmc2V0PzogdW5rbm93biwgbGluZT86IHVua25vd24sIGNvbHVtbj86IHVua25vd259fSAqLyAocG9pbnQpXG5cbiAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS5vZmZzZXQpICYmIE51bWJlcihjYW5kaWRhdGUub2Zmc2V0KSA+PSAwICYmXG4gICAgTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLmxpbmUpICYmIE51bWJlcihjYW5kaWRhdGUubGluZSkgPj0gMSAmJlxuICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS5jb2x1bW4pICYmIE51bWJlcihjYW5kaWRhdGUuY29sdW1uKSA+PSAxXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzaW1wbGUgaWRlbnRpZmllciB0YXJnZXQgaW50cm9kdWNlZCBieSB0YXNrIDAwMi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0IC0gQ2FuZGlkYXRlIGFzc2lnbm1lbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gb3duZXJMb2NhdGlvbiAtIEFzc2lnbm1lbnQgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBc3NpZ25tZW50VGFyZ2V0KHRhcmdldCwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24pIHtcbiAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGFzc2lnbm1lbnQgdGFyZ2V0XCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklkZW50aWZpZXJFeHByZXNzaW9ufSAqLyAodGFyZ2V0KVxuICBjb25zdCBsb2NhdGlvbiA9IGNhbmRpZGF0ZS5sb2NhdGlvbiA/PyBvd25lckxvY2F0aW9uXG5cbiAgaWYgKGNhbmRpZGF0ZS5raW5kICE9IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBhc3NpZ25tZW50IHRhcmdldCAke1N0cmluZyhSZWZsZWN0LmdldCh0YXJnZXQsIFwia2luZFwiKSl9YCwgbG9jYXRpb24pXG4gIH1cblxuICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBjYW5kaWRhdGUubmFtZSwgXCJhc3NpZ25tZW50IHRhcmdldFwiLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBDaGVja3MgZXhwcmVzc2lvbiBiYWNrZW5kIGNhcGFiaWxpdGllcyByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXhwcmVzc2lvbiAtIENhbmRpZGF0ZSBzZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gb3duZXJMb2NhdGlvbiAtIE5lYXJlc3Qgb3duaW5nIG5vZGUgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmRdIC0gV2hldGhlciBKYXZhIG1heSB1c2UgMjE0NzQ4MzY0OCBvbmx5IGJlbmVhdGggaW50ZWdlciBuZWdhdGlvbi5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVQYXRoXSAtIEFuY2VzdG9ycyBvbiB0aGUgY3VycmVudCByZWN1cnNpdmUgdmFsaWRhdGlvbiBwYXRoLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gW2V4dGVybmFsRGVjbGFyYXRpb25JZHNdIC0gUmVzb2x2ZWQgZGVjbGFyYXRpb25zIHdob3NlIHNvdXJjZSBzcGVsbGluZyBpcyB0YXJnZXQtaW5kZXBlbmRlbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0phdmFPcmRlcmVkTWFwUm9vdF0gLSBXaGV0aGVyIHRoaXMgcm9vdCBpcyBhIEphdmEgbG9jYWwgaW5pdGlhbGl6ZXIgZWxpZ2libGUgZm9yIHN0YXRlbWVudCBsb3dlcmluZy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24sIGFsbG93SmF2YU5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCA9IGZhbHNlLCBhY3RpdmVQYXRoID0gbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpLCBhbGxvd0phdmFPcmRlcmVkTWFwUm9vdCA9IGZhbHNlKSB7XG4gIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBleHByZXNzaW9uXCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovIChleHByZXNzaW9uKVxuICBjb25zdCBsb2NhdGlvbiA9IGNhbmRpZGF0ZS5sb2NhdGlvbiA/PyBvd25lckxvY2F0aW9uXG5cbiAgaWYgKGFjdGl2ZVBhdGguaGFzKGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjeWNsaWMgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgY29uc3QgZXhwcmVzc2lvblBhdGggPSBuZXcgU2V0KGFjdGl2ZVBhdGgpXG5cbiAgZXhwcmVzc2lvblBhdGguYWRkKGNhbmRpZGF0ZSlcblxuICBpZiAodHlwZW9mIGNhbmRpZGF0ZS5raW5kICE9IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIGNhbmRpZGF0ZS5uYW1lLCBcInJlZmVyZW5jZVwiLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiY2xhc3NJZCxraW5kLGxvY2F0aW9uXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5jbGFzc0lkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgICEvXig/OlthLXpdW2EtejAtOS5fLV0qIyk/Y2xhc3M6WzAtOV0rJC91LnRlc3QoY2FuZGlkYXRlLmNsYXNzSWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByaXZhdGUgZmllbGQgcmVjZWl2ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkVycm9yTWVzc2FnZVJlYWRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwia2luZCxsb2NhdGlvbixyZWNlaXZlclwiIHx8IGNhbmRpZGF0ZS5yZWNlaXZlcj8ua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgRXJyb3JNZXNzYWdlUmVhZFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3duZWRNb3ZlRXhwcmVzc2lvblwiIHx8IGNhbmRpZGF0ZS5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IGV4cGVjdGVkID0gY2FuZGlkYXRlLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgPyBcImV4cHJlc3Npb24sa2luZCxsb2NhdGlvbix0eXBlXCIgOiBcImV4cHJlc3Npb24sa2luZCxsb2NhdGlvbixtb2RlLHR5cGVcIlxuXG4gICAgaWYgKGZpZWxkcyAhPSBleHBlY3RlZCB8fCBjYW5kaWRhdGUuZXhwcmVzc2lvbi5raW5kICE9IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiAmJiBjYW5kaWRhdGUuZXhwcmVzc2lvbi5raW5kICE9IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIgJiZcbiAgICAgIGNhbmRpZGF0ZS5leHByZXNzaW9uLmtpbmQgIT0gXCJQcml2YXRlRmllbGRSZWFkXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCAke2NhbmRpZGF0ZS5raW5kfWAsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikge1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLnZhbHVlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgdmFsaWROZWdhdGVkTWluaW11bU9wZXJhbmQgPSBhbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmQgJiYgY2FuZGlkYXRlLnZhbHVlID09IDIxNDc0ODM2NDhcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiAhdmFsaWROZWdhdGVkTWluaW11bU9wZXJhbmQgJiYgKGNhbmRpZGF0ZS52YWx1ZSA8IC0yMTQ3NDgzNjQ4IHx8IGNhbmRpZGF0ZS52YWx1ZSA+IDIxNDc0ODM2NDcpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiaW50ZWdlciBsaXRlcmFsIG91dHNpZGUgc2lnbmVkIDMyLWJpdCBpbnQgcmFuZ2VcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICgobGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImdvXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjcHBcIiB8fCBsYW5ndWFnZSA9PSBcImRhcnRcIiB8fCBsYW5ndWFnZSA9PSBcImtvdGxpblwiIHx8IGxhbmd1YWdlID09IFwicnVzdFwiIHx8IGxhbmd1YWdlID09IFwic3dpZnRcIikgJiYgY2FuZGlkYXRlLnZhbHVlIDwgMCB8fFxuICAgICAgKGxhbmd1YWdlID09IFwiY1wiIHx8IGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiB8fCBsYW5ndWFnZSA9PSBcInJ1c3RcIiB8fCBsYW5ndWFnZSA9PSBcInN3aWZ0XCIpICYmIE9iamVjdC5pcyhjYW5kaWRhdGUudmFsdWUsIC0wKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm5lZ2F0aXZlIGludGVnZXIgbGl0ZXJhbCB3aXRob3V0IHNlbWFudGljIG5lZ2F0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiIHx8IGNhbmRpZGF0ZS5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm5cbiAgaWYgKFtcIk9wdGlvbmFsTm9uZVwiLCBcIk9wdGlvbmFsU29tZVwiLCBcIk9wdGlvbmFsSXNQcmVzZW50XCIsIFwiT3B0aW9uYWxVbndyYXBcIl0uaW5jbHVkZXMoY2FuZGlkYXRlLmtpbmQpKSB7XG4gICAgaWYgKCF0YXNrMDA3TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCB2YWx1ZXNcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCBleHBlY3RlZEZpZWxkcyA9IGNhbmRpZGF0ZS5raW5kID09IFwiT3B0aW9uYWxOb25lXCIgPyBcImtpbmQsbG9jYXRpb25cIiA6XG4gICAgICBjYW5kaWRhdGUua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiID8gXCJraW5kLGxvY2F0aW9uLHZhbHVlXCIgOiBcImtpbmQsbG9jYXRpb24sb3BlcmFuZFwiXG5cbiAgICBpZiAoZmllbGRzICE9IGV4cGVjdGVkRmllbGRzKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtYWxmb3JtZWQgJHtjYW5kaWRhdGUua2luZH1gLCBsb2NhdGlvbilcbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPcHRpb25hbE5vbmVcIikgcmV0dXJuXG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUudmFsdWUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuT3B0aW9uYWxJc1ByZXNlbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5PcHRpb25hbFVud3JhcH0gKi8gKGNhbmRpZGF0ZSlcblxuICAgIGlmICghb3BlcmF0aW9uLm9wZXJhbmQgfHwgb3BlcmF0aW9uLm9wZXJhbmQua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7Y2FuZGlkYXRlLmtpbmR9IHdpdGhvdXQgYSBzaW1wbGUgaWRlbnRpZmllciBvcGVyYW5kYCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihvcGVyYXRpb24ub3BlcmFuZCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKFtcIkxpc3RMaXRlcmFsXCIsIFwiTWFwTGl0ZXJhbFwiLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIsIFwiTGlzdEluZGV4RXhwcmVzc2lvblwiLCBcIk1hcExvb2t1cEV4cHJlc3Npb25cIiwgXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIl0uaW5jbHVkZXMoY2FuZGlkYXRlLmtpbmQpKSB7XG4gICAgaWYgKCF0YXNrMDA2TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbnNcIiwgbG9jYXRpb24pXG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIiAmJiAhdGFzazAxNExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMTQgb3JkZXJlZC1tYXAgaXRlcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiICYmIGxhbmd1YWdlID09IFwiamF2YVwiICYmICFhbGxvd0phdmFPcmRlcmVkTWFwUm9vdCkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcInVuc2FmZSBKYXZhIG9yZGVyZWQtbWFwIGV4cHJlc3Npb24gbG93ZXJpbmdcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHtcbiAgICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5lbGVtZW50cykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIHNwYXJzZSBsaXN0IGVsZW1lbnRzXCIsIGxvY2F0aW9uKVxuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGNhbmRpZGF0ZS5lbGVtZW50cykge1xuICAgICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZWxlbWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGNhbmRpZGF0ZS5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgICAgaWYgKCFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmVudHJpZXMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBzcGFyc2UgbWFwIGVudHJpZXNcIiwgbG9jYXRpb24pXG4gICAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgJiYgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgY2FuZGlkYXRlLmVudHJpZXMubGVuZ3RoID4gMTApIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImphdmEudXRpbC5NYXAub2Ygc3VwcG9ydHMgYXQgbW9zdCB0ZW4gZW50cmllc1wiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgY2FuZGlkYXRlLmVudHJpZXMpIHtcbiAgICAgICAgaWYgKCFlbnRyeSB8fCBlbnRyeS5raW5kICE9IFwiTWFwRW50cnlcIiB8fCAhZW50cnkua2V5IHx8IGVudHJ5LmtleS5raW5kICE9IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtYXAgZW50cnlcIiwgZW50cnk/LmxvY2F0aW9uID8/IGxvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihlbnRyeS5rZXksIGxhbmd1YWdlLCBlbnRyeS5sb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZW50cnkudmFsdWUsIGxhbmd1YWdlLCBlbnRyeS5sb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkxpc3RJbmRleEV4cHJlc3Npb25cIikge1xuICAgICAgaWYgKGNhbmRpZGF0ZS50b3RhbGl0eSA9PSBcImZhaWwtb24tYWJzZW5jZVwiICYmIGxhbmd1YWdlICE9IFwiamF2YVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJsaXN0IGFjY2VzcyBkZXBlbmRzIG9uIEphdmEtc3BlY2lmaWMgYm91bmRzIGZhaWx1cmVcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbGxlY3Rpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5pbmRleCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgICBpZiAoY2FuZGlkYXRlLnRvdGFsaXR5ID09IFwiZmFpbC1vbi1hYnNlbmNlXCIgJiYgbGFuZ3VhZ2UgIT0gXCJydWJ5XCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hcCBsb29rdXAgZGVwZW5kcyBvbiBSdWJ5IGZldGNoIGFic2VuY2UgZmFpbHVyZVwiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29sbGVjdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmtleSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHtcbiAgICAgIGlmIChjYW5kaWRhdGUuY29sbGVjdGlvbktpbmQgIT0gXCJsaXN0XCIgJiYgY2FuZGlkYXRlLmNvbGxlY3Rpb25LaW5kICE9IFwibWFwXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNvbGxlY3Rpb24gc2l6ZSB3aXRob3V0IGEgdmFsaWRhdGVkIHJlY2VpdmVyIGtpbmRcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbGxlY3Rpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbklkID0gY2FuZGlkYXRlLnJlc29sdXRpb24gJiYgdHlwZW9mIGNhbmRpZGF0ZS5yZXNvbHV0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnJlc29sdXRpb24pXG4gICAgICA/IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZS5yZXNvbHV0aW9uLCBcImRlY2xhcmF0aW9uSWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBpZiAodHlwZW9mIGRlY2xhcmF0aW9uSWQgIT0gXCJzdHJpbmdcIiB8fCAhZXh0ZXJuYWxEZWNsYXJhdGlvbklkcy5oYXMoZGVjbGFyYXRpb25JZCkpIHtcbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLmNhbGxlZSwgXCJjYWxsZWVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghY2FuZGlkYXRlLnJlc29sdXRpb24gfHwgdHlwZW9mIGNhbmRpZGF0ZS5yZXNvbHV0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShjYW5kaWRhdGUucmVzb2x1dGlvbikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVzb2x2ZWQgY2FsbCBzaWduYXR1cmVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBjYWxsIGFyZ3VtZW50c1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCF0YXNrMDA1TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkgJiYgY2FuZGlkYXRlLmFyZ3VtZW50cy5sZW5ndGggIT0gMikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNhbGwgYXJndW1lbnQgY291bnQgb3RoZXIgdGhhbiB0d29cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IGNhbmRpZGF0ZS5yZXNvbHV0aW9uXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYXJndW1lbnRzLGVmZmVjdFNpdGVJZCxraW5kLGxvY2F0aW9uLG9wZXJhdGlvbixyZXNvbHV0aW9uXCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSB8fFxuICAgICAgdHlwZW9mIGNhbmRpZGF0ZS5lZmZlY3RTaXRlSWQgIT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLm9wZXJhdGlvbiAhPSBcInN0cmluZ1wiIHx8ICFyZXNvbHV0aW9uIHx8XG4gICAgICByZXNvbHV0aW9uLmtpbmQgIT0gXCJSZXNvbHZlZEVmZmVjdE9wZXJhdGlvblNpZ25hdHVyZVwiIHx8IHJlc29sdXRpb24ub3BlcmF0aW9uSWQgIT0gY2FuZGlkYXRlLm9wZXJhdGlvbiB8fFxuICAgICAgIWlzRGVuc2VBcnJheShyZXNvbHV0aW9uLnBhcmFtZXRlclR5cGVzKSB8fCAhaXNEZW5zZUFycmF5KHJlc29sdXRpb24uZmFpbHVyZUlkcykgfHwgcmVzb2x1dGlvbi5lZmZlY3RzPy5qb2luKFwiLFwiKSAhPSBcImhvc3RcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBhdXRob3JpemVkIGVmZmVjdCBjYWxsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IHJlc29sdXRpb24gPSBjYW5kaWRhdGUucmVzb2x1dGlvblxuICAgIGNvbnN0IGVmZmVjdGZ1bEZpZWxkcyA9IFwiYXJndW1lbnRzLGVmZmVjdFNpdGVJZCxlZmZlY3RzLGZhaWx1cmVJZHMsa2luZCxsb2NhdGlvbixyZWZlcmVuY2UscmVzb2x1dGlvblwiXG4gICAgY29uc3QgcHVyZUZpZWxkcyA9IFwiYXJndW1lbnRzLGtpbmQsbG9jYXRpb24scmVmZXJlbmNlLHJlc29sdXRpb25cIlxuXG4gICAgaWYgKCFbcHVyZUZpZWxkcywgZWZmZWN0ZnVsRmllbGRzXS5pbmNsdWRlcyhmaWVsZHMpIHx8XG4gICAgICBjYW5kaWRhdGUucmVmZXJlbmNlPy5raW5kICE9IFwiUmVmZXJlbmNlVHlwZVwiICYmIGNhbmRpZGF0ZS5yZWZlcmVuY2U/LmtpbmQgIT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIiB8fFxuICAgICAgdHlwZW9mIGNhbmRpZGF0ZS5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZCAhPSBcInN0cmluZ1wiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykgfHxcbiAgICAgICFyZXNvbHV0aW9uIHx8IHJlc29sdXRpb24ua2luZCAhPSBcIlJlc29sdmVkQ29uc3RydWN0b3JTaWduYXR1cmVcIiB8fFxuICAgICAgcmVzb2x1dGlvbi5kZWNsYXJhdGlvbklkICE9IGAke2NhbmRpZGF0ZS5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZH06Y29uc3RydWN0b3JgIHx8ICFpc0RlbnNlQXJyYXkocmVzb2x1dGlvbi5wYXJhbWV0ZXJUeXBlcykgfHxcbiAgICAgIGZpZWxkcyA9PSBlZmZlY3RmdWxGaWVsZHMgJiZcbiAgICAgICh0eXBlb2YgY2FuZGlkYXRlLmVmZmVjdFNpdGVJZCAhPSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZS5lZmZlY3RzPy5qb2luKFwiLFwiKSAhPSBcImhvc3RcIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5mYWlsdXJlSWRzKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcmVmZXJlbmNlIGNvbnN0cnVjdGlvbiBvciByZXNvbHZlZCBjb25zdHJ1Y3RvciBzaWduYXR1cmVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IGNhbmRpZGF0ZS5yZXNvbHV0aW9uXG5cbiAgICBjb25zdCBlZmZlY3RmdWxGaWVsZHMgPSBcImFyZ3VtZW50cyxlZmZlY3RTaXRlSWQsZWZmZWN0cyxmYWlsdXJlSWRzLGtpbmQsbG9jYXRpb24sbWV0aG9kLHJlY2VpdmVyLHJlc29sdXRpb25cIlxuICAgIGNvbnN0IHB1cmVGaWVsZHMgPSBcImFyZ3VtZW50cyxraW5kLGxvY2F0aW9uLG1ldGhvZCxyZWNlaXZlcixyZXNvbHV0aW9uXCJcblxuICAgIGlmICghW3B1cmVGaWVsZHMsIGVmZmVjdGZ1bEZpZWxkc10uaW5jbHVkZXMoZmllbGRzKSB8fCB0eXBlb2YgY2FuZGlkYXRlLm1ldGhvZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpIHx8ICFyZXNvbHV0aW9uIHx8IHJlc29sdXRpb24ua2luZCAhPSBcIlJlc29sdmVkTWV0aG9kU2lnbmF0dXJlXCIgfHxcbiAgICAgIHJlc29sdXRpb24uZGVjbGFyYXRpb25JZCAhPSBjYW5kaWRhdGUubWV0aG9kIHx8ICFpc0RlbnNlQXJyYXkocmVzb2x1dGlvbi5wYXJhbWV0ZXJUeXBlcykgfHxcbiAgICAgICFPYmplY3QuaGFzT3duKHJlc29sdXRpb24sIFwicmV0dXJuVHlwZVwiKSB8fCBPYmplY3QuaGFzT3duKHJlc29sdXRpb24sIFwicmVzb3VyY2VGbG93XCIpICYmXG4gICAgICAoIXJlc29sdXRpb24ucmVzb3VyY2VGbG93IHx8ICFbXCJwcmVzZXJ2ZVwiLCBcInRlcm1pbmFsXCJdLmluY2x1ZGVzKFN0cmluZyhyZXNvbHV0aW9uLnJlc291cmNlRmxvdy5raW5kKSkgfHxcbiAgICAgICAgT2JqZWN0Lmhhc093bihyZXNvbHV0aW9uLnJlc291cmNlRmxvdywgXCJ0ZXJtaW5hbEZhaWx1cmVJZFwiKSAmJiB0eXBlb2YgcmVzb2x1dGlvbi5yZXNvdXJjZUZsb3cudGVybWluYWxGYWlsdXJlSWQgIT0gXCJzdHJpbmdcIikgfHxcbiAgICAgIGZpZWxkcyA9PSBlZmZlY3RmdWxGaWVsZHMgJiZcbiAgICAgICh0eXBlb2YgY2FuZGlkYXRlLmVmZmVjdFNpdGVJZCAhPSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZS5lZmZlY3RzPy5qb2luKFwiLFwiKSAhPSBcImhvc3RcIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5mYWlsdXJlSWRzKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcmVjZWl2ZXIgY2FsbCBvciByZXNvbHZlZCBtZXRob2Qgc2lnbmF0dXJlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJhcmd1bWVudHMsa2luZCxsb2NhdGlvbixyZWNvcmRcIiB8fCAhY2FuZGlkYXRlLnJlY29yZCB8fCBjYW5kaWRhdGUucmVjb3JkLmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIgfHxcbiAgICAgIHR5cGVvZiBjYW5kaWRhdGUucmVjb3JkLmRlY2xhcmF0aW9uSWQgIT0gXCJzdHJpbmdcIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFJlY29yZENvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImZpZWxkLGtpbmQsbG9jYXRpb24scmVjZWl2ZXJcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmZpZWxkICE9IFwic3RyaW5nXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgTWVtYmVyUmVhZFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJmaWVsZCxraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5maWVsZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICBjYW5kaWRhdGUucmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcml2YXRlIGZpZWxkIHJlY2VpdmVyIG9yIHByaXZhdGUgZmllbGQgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKHVuYXJ5T3BlcmF0aW9uU3ludGF4LCBTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbikpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB1bmFyeSBvcGVyYXRpb24gJHtTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbil9YCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUub3BlcmFuZCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBjYW5kaWRhdGUub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiLCBleHByZXNzaW9uUGF0aCxcbiAgICAgIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVLbm93blRhcmdldEludGVnZXIoY2FuZGlkYXRlLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKGJpbmFyeU9wZXJhdGlvblN5bnRheCwgU3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgYmluYXJ5IG9wZXJhdGlvbiAke1N0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKX1gLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5sZWZ0LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJpZ2h0LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUtub3duVGFyZ2V0SW50ZWdlcihjYW5kaWRhdGUsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJhbHRlcm5hdGUsY29uZGl0aW9uLGNvbnNlcXVlbnQsa2luZCxsb2NhdGlvbix0eXBlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIXRhc2swNDhDb25kaXRpb25hbExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwNDggY29uZGl0aW9uYWwgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbmRpdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb25zZXF1ZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cblxuICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFN0cmluZyhSZWZsZWN0LmdldChleHByZXNzaW9uLCBcImtpbmRcIikpLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZWplY3RzIGNvbXBpbGUtdGltZS1rbm93biBKYXZhIGludGVnZXIgb3BlcmF0aW9uIHJlc3VsdHMgb3V0c2lkZSBwcmltaXRpdmUgaW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5VbmFyeUV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CaW5hcnlFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gVmFsaWRhdGVkIG9wZXJhdGlvbiBzaGFwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gT3BlcmF0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlS25vd25UYXJnZXRJbnRlZ2VyKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbikge1xuICBjb25zdCB2YWx1ZSA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24pXG5cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgKHZhbHVlIDwgLTIxNDc0ODM2NDhuIHx8IHZhbHVlID4gMjE0NzQ4MzY0N24pKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNvbXBpbGUtdGltZS1rbm93biBpbnRlZ2VyIG9wZXJhdGlvbiBvdXRzaWRlIHNpZ25lZCAzMi1iaXQgaW50IHJhbmdlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGlmICgobGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImdvXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjcHBcIiB8fCBsYW5ndWFnZSA9PSBcInJ1c3RcIiB8fCBsYW5ndWFnZSA9PSBcInN3aWZ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ3YXNtXCIgfHwgbGFuZ3VhZ2UgPT0gXCJ6aWdcIikgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICh2YWx1ZSA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4biB8fCB2YWx1ZSA+IDkyMjMzNzIwMzY4NTQ3NzU4MDduKSkge1xuICAgIGNvbnN0IHNjYWxhciA9IGxhbmd1YWdlID09IFwid2FzbVwiIHx8IGxhbmd1YWdlID09IFwiemlnXCIgPyBcImk2NFwiIDogbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiID8gXCJJbnQ2NFwiIDogXCJsb25nXCJcblxuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGNvbXBpbGUtdGltZS1rbm93biBpbnRlZ2VyIG9wZXJhdGlvbiBvdXRzaWRlIHNpZ25lZCA2NC1iaXQgJHtzY2FsYXJ9IHJhbmdlYCwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKChsYW5ndWFnZSA9PSBcImRhcnRcIiB8fCBsYW5ndWFnZSA9PSBcImtvdGxpblwiKSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgKHZhbHVlIDwgLUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgfHwgdmFsdWUgPiBCaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSB0aGUgU2VtYW50aWZvbGQgc2FmZS1pbnRlZ2VyIHJhbmdlXCIsIGxvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIG9ubHkgbGl0ZXJhbCBpbnRlZ2VyLW9wZXJhdGlvbiB0cmVlcyBmb3IgYm91bmRzIHZhbGlkYXRpb24sIG5ldmVyIElSIGZvbGRpbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge2JpZ2ludCB8IHVuZGVmaW5lZH0gS25vd24gbWF0aGVtYXRpY2FsIGludGVnZXIuXG4gKi9cbmZ1bmN0aW9uIGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIoZXhwcmVzc2lvbi52YWx1ZSkpIHJldHVybiBCaWdJbnQoZXhwcmVzc2lvbi52YWx1ZSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24ub3BlcmFuZClcblxuICAgIHJldHVybiBvcGVyYW5kID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAtb3BlcmFuZFxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgIT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBsZWZ0ID0ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbi5sZWZ0KVxuICBjb25zdCByaWdodCA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24ucmlnaHQpXG5cbiAgaWYgKGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJBZGRcIikgcmV0dXJuIGxlZnQgKyByaWdodFxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyU3VidHJhY3RcIikgcmV0dXJuIGxlZnQgLSByaWdodFxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTXVsdGlwbHlcIikgcmV0dXJuIGxlZnQgKiByaWdodFxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgcmVjdXJzaXZlIHNlbWFudGljIHR5cGUgd2hpbGUgbWFwcGluZyBldmVyeSBjb25zdGl0dWVudCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gdHlwZSAtIFNlbWFudGljIHR5cGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHR5cGUgb2NjdXJyZW5jZSBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UZXh0QmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2phdmFCb3hlZF0gLSBXaGV0aGVyIGEgSmF2YSBzY2FsYXIgaXMgYSBnZW5lcmljIGFyZ3VtZW50LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0VHlwZSh3cml0ZXIsIHR5cGUsIHBhdGgsIGxhbmd1YWdlLCBqYXZhQm94ZWQgPSBmYWxzZSkge1xuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSB3cml0ZXIudHlwZVBhcmFtZXRlckZvcklkKHR5cGUucGFyYW1ldGVySWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHBhcmFtZXRlci5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogcGFyYW1ldGVyLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgY29uc3QgcmVjb3JkID0gd3JpdGVyLnJlY29yZEZvcklkKHR5cGUuZGVjbGFyYXRpb25JZClcblxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLnJlY29yZE5hbWVGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiByZWNvcmQubmFtZSwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJcbiAgICB9KVxuICAgIGlmICh0eXBlLmFyZ3VtZW50cykge1xuICAgICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiW1wiIDogXCI8XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogdHlwZSwgcGF0aH0pXG4gICAgICB0eXBlLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhsYW5ndWFnZSA9PSBcInBocFwiIHx8IGxhbmd1YWdlID09IFwicnVieVwiIHx8IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIsXCIgOiBcIiwgXCIsXG4gICAgICAgICAgXCJnZW5lcmljIHR5cGUgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFt0eXBlXSwgW3BhdGhdKVxuICAgICAgICBlbWl0VHlwZSh3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gICAgICB9KVxuICAgICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiXVwiIDogXCI+XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogdHlwZSwgcGF0aH0pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHdyaXRlci5jbGFzc0ZvcklkKHR5cGUuZGVjbGFyYXRpb25JZClcblxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLmNsYXNzTmFtZUZvcklkKHR5cGUuZGVjbGFyYXRpb25JZCksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGRlY2xhcmF0aW9uLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiT3duZWRSZXNvdXJjZVR5cGVcIikge1xuICAgIGNvbnN0IHJlc291cmNlID0gd3JpdGVyLnJlc291cmNlRm9ySWQodHlwZS5yZXNvdXJjZUlkKVxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLmNhcGFiaWxpdHlOb21pbmFsTmFtZShyZXNvdXJjZS5uYW1lKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHJlc291cmNlLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHdyaXRlci5jbGFzc0ZvcklkKHR5cGUuZGVjbGFyYXRpb25JZClcbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jbGFzc05hbWVGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZGVjbGFyYXRpb24ubmFtZSwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwiamF2YVwiICYmIGphdmFCb3hlZFxuICAgICAgPyB0eXBlLm5hbWUgPT0gXCJpbnRlZ2VyXCIgPyBcIkludGVnZXJcIiA6IHR5cGUubmFtZSA9PSBcImJvb2xlYW5cIiA/IFwiQm9vbGVhblwiIDogdHlwZS5uYW1lID09IFwic3RyaW5nXCIgPyBcIlN0cmluZ1wiIDogXCJ2b2lkXCJcbiAgICAgIDogZW1pdFNjYWxhclR5cGUobGFuZ3VhZ2UsIHR5cGUpXG5cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIGNvbnN0IHByZWZpeCA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuT3B0aW9uYWw8XCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCI/XCIgOiBcIlwiXG5cbiAgICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiPlwiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIj9cIiA6IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8gXCJ8bnVsbFwiIDpcbiAgICAgIGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gXCIgfCBudWxsXCIgOiBcIlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IHByZWZpeCA9IHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCJcbiAgICA/IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJBcnJheVtcIiA6IGxhbmd1YWdlID09IFwicGhwXCIgPyBcImxpc3Q8XCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcImphdmEudXRpbC5MaXN0PFwiIDogXCJSZWFkb25seUFycmF5PFwiXG4gICAgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiSGFzaFtcIiA6IGxhbmd1YWdlID09IFwicGhwXCIgPyBcImFycmF5PFwiIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gdHlwZS5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiA/IFwiamF2YS51dGlsLlNlcXVlbmNlZE1hcDxcIiA6IFwiamF2YS51dGlsLk1hcDxcIiA6IFwiUmVhZG9ubHlNYXA8XCJcblxuICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgaWYgKHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIpIHtcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUuZWxlbWVudFR5cGUsIGAke3BhdGh9L2VsZW1lbnRUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICB9IGVsc2Uge1xuICAgIGVtaXRUeXBlKHdyaXRlciwgdHlwZS5rZXlUeXBlLCBgJHtwYXRofS9rZXlUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgIHdyaXRlci5zeW50aGV0aWMobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIiwgXCIgOiBcIixcIiwgXCJtYXAgdHlwZSBzZXBhcmF0b3JcIiwgW3R5cGVdLCBbcGF0aF0pXG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICB9XG4gIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIl1cIiA6IFwiPlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxufVxuXG4vKipcbiAqIEVtaXRzIGEgc3VwcG9ydGVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IEpTT04gUG9pbnRlciBmb3IgdGhpcyBleHByZXNzaW9uIG9jY3VycmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRleHRCYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHsobmFtZTogc3RyaW5nKSA9PiBzdHJpbmd9IGVtaXRJZGVudGlmaWVyIC0gSWRlbnRpZmllciBmb3JtYXR0ZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKSB7XG4gIGNvbnN0IGVmZmVjdFRlbXBvcmFyeSA9IHdyaXRlci5lZmZlY3RSZXBsYWNlbWVudE5hbWUoZXhwcmVzc2lvbilcblxuICBpZiAoZWZmZWN0VGVtcG9yYXJ5KSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhlbWl0SWRlbnRpZmllcihlZmZlY3RUZW1wb3JhcnkpLCBcImV4YWN0bHktb25jZSBlZmZlY3QgdGVtcG9yYXJ5IHJlYWRcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRJZGVudGlmaWVyKGV4cHJlc3Npb24ubmFtZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCIkdGhpc1wiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcInNlbGZcIiA6IFwidGhpc1wiLFxuICAgICAge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwicmVjZWl2ZXJcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikge1xuICAgIGlmIChleHByZXNzaW9uLmV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoZW1pdElkZW50aWZpZXIoZXhwcmVzc2lvbi5leHByZXNzaW9uLm5hbWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZXhwcmVzc2lvbi5leHByZXNzaW9uLm5hbWUsXG4gICAgICAgIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uZXhwcmVzc2lvbi5raW5kID09IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiJHRoaXNcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJzZWxmXCIgOiBcInRoaXNcIixcbiAgICAgICAge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwicmVjZWl2ZXJcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gd3JpdGVyLnByaXZhdGVGaWVsZEZvcklkKGV4cHJlc3Npb24uZXhwcmVzc2lvbi5maWVsZClcblxuICAgICAgaWYgKGxhbmd1YWdlICE9IFwicnVieVwiKSB7XG4gICAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5leHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9leHByZXNzaW9uL3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgfVxuICAgICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gYC0+JHtmaWVsZC5uYW1lfWAgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IGAuIyR7ZmllbGQubmFtZX1gIDpcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBgQCR7ZmllbGQubmFtZX1gIDogYC4ke2ZpZWxkLm5hbWV9YCxcbiAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBmaWVsZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHtcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwiY3NoYXJwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiA/IGAke2V4cHJlc3Npb24udmFsdWV9TGAgOiBTdHJpbmcoZXhwcmVzc2lvbi52YWx1ZSlcblxuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwicHl0aG9uXCIgPyBleHByZXNzaW9uLnZhbHVlID8gXCJUcnVlXCIgOiBcIkZhbHNlXCIgOiBleHByZXNzaW9uLnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIikge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIl9zZW1hbnRpZm9sZEJvb2xlYW4oXCIsIFwiRGFydCBhbmFseXplZCBCb29sZWFuIGxpdGVyYWxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgaWYgKGxhbmd1YWdlID09IFwiZGFydFwiKSB3cml0ZXIuc3ludGhldGljKFwiKVwiLCBcIkRhcnQgYW5hbHl6ZWQgQm9vbGVhbiBsaXRlcmFsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTdHJpbmdMaXRlcmFsKGxhbmd1YWdlLCBleHByZXNzaW9uLnZhbHVlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxOb25lXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuT3B0aW9uYWwuZW1wdHkoKVwiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIm5pbFwiIDogXCJudWxsXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiYWJzZW5jZVwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJqYXZhLnV0aWwuT3B0aW9uYWwub2YoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInNvbWVcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInNvbWVcIn0pXG4gICAgfVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi52YWx1ZSwgYCR7cGF0aH0vdmFsdWVgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIikge1xuICAgIGlmIChsYW5ndWFnZSA9PSBcInJ1YnlcIikgd3JpdGVyLm1hcHBlZChcIiFcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZWxzZSBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhXCIpIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLmlzUHJlc2VudCgpXCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiLm5pbD9cIiA6IFwiICE9PSBudWxsXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgaWYgKGxhbmd1YWdlICE9IFwicnVieVwiICYmIGxhbmd1YWdlICE9IFwiamF2YVwiKSB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFVud3JhcFwiKSB7XG4gICAgaWYgKGxhbmd1YWdlICE9IFwiamF2YVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJ1bndyYXBcIn0pXG4gICAgfVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIi5nZXQoKVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJ1bndyYXBcIn0pXG4gICAgfSBlbHNlIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuTGlzdC5vZihcIiA6IFwiW1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwibGlzdCBlbGVtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZWxlbWVudCwgYCR7cGF0aH0vZWxlbWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIpXCIgOiBcIl1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICBjb25zdCBvcGVuID0gbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcImphdmEudXRpbC5NYXAub2YoXCIgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwibmV3IE1hcChbXCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiW1wiIDogXCJ7XCJcbiAgICBjb25zdCBjbG9zZSA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIpXCIgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiXSlcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJdXCIgOiBcIn1cIlxuXG4gICAgd3JpdGVyLm1hcHBlZChvcGVuLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uZW50cmllcy5mb3JFYWNoKChlbnRyeSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5UGF0aCA9IGAke3BhdGh9L2VudHJpZXMvJHtpbmRleH1gXG5cbiAgICAgIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwibWFwIGVudHJ5IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikgd3JpdGVyLm1hcHBlZChcIltcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBlbnRyeSwgcGF0aDogZW50cnlQYXRofSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZW50cnkua2V5LCBgJHtlbnRyeVBhdGh9L2tleWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIiA9PiBcIiA6IGxhbmd1YWdlID09IFwicGhwXCIgPyBcIiA9PiBcIiA6IFwiLCBcIiwge1xuICAgICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBlbnRyeSwgcGF0aDogZW50cnlQYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICAgIH0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGVudHJ5LnZhbHVlLCBgJHtlbnRyeVBhdGh9L3ZhbHVlYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSB3cml0ZXIubWFwcGVkKFwiXVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGVudHJ5LCBwYXRoOiBlbnRyeVBhdGh9KVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChjbG9zZSwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLmdldChcIiA6IFwiW1wiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uaW5kZXgsIGAke3BhdGh9L2luZGV4YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIilcIiA6IFwiXVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpIHtcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBvcGVyYXRvciA9IGxhbmd1YWdlID09IFwicnVieVwiID8gXCIuZmV0Y2goXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJbXCIgOiBcIi5nZXQoXCJcblxuICAgIHdyaXRlci5tYXBwZWQob3BlcmF0b3IsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5rZXksIGAke3BhdGh9L2tleWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBcIl1cIiA6IFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiFcIiwgXCJzdGF0aWNhbGx5IHByb3ZlbiBtYXAgbG9va3VwXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJwaHBcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcImNvdW50KFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBvcGVyYXRvciA9IGxhbmd1YWdlID09IFwicnVieVwiIHx8IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIuc2l6ZVwiIDpcbiAgICAgIGV4cHJlc3Npb24uY29sbGVjdGlvbktpbmQgPT0gXCJsaXN0XCIgPyBcIi5sZW5ndGhcIiA6IFwiLnNpemVcIlxuXG4gICAgd3JpdGVyLm1hcHBlZChgJHtvcGVyYXRvcn0ke2xhbmd1YWdlID09IFwiamF2YVwiID8gXCIoKVwiIDogXCJcIn1gLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2FsbEFyZ3VtZW50U3VmZml4ID0gd3JpdGVyLmNhbGxBcmd1bWVudFN1ZmZpeEZvcihleHByZXNzaW9uKVxuICAgIGNvbnN0IGRhcnRNdWx0aWxpbmUgPSBsYW5ndWFnZSA9PSBcImRhcnRcIiAmJiAoZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoID4gMCB8fCBCb29sZWFuKGNhbGxBcmd1bWVudFN1ZmZpeCkpICYmXG4gICAgICBkYXJ0RXhwcmVzc2lvbkV4Y2VlZHNQYWdlV2lkdGgod3JpdGVyLCBleHByZXNzaW9uKVxuICAgIGNvbnN0IGRhcnRJbmRlbnQgPSBkYXJ0TXVsdGlsaW5lID8gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSA6IFwiXCJcblxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLmNhbGxOYW1lRm9yKGV4cHJlc3Npb24pLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBleHByZXNzaW9uLmNhbGxlZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjYWxsZWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChkYXJ0TXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKGAke2luZGV4ID8gXCJcIiA6IFwiXFxuXCJ9JHtkYXJ0SW5kZW50fSAgYCwgXCJEYXJ0IGFyZ3VtZW50IGluZGVudGF0aW9uXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZWxzZSBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICBpZiAoZGFydE11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhcIixcXG5cIiwgXCJEYXJ0IGZvcm1hdHRlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgfSlcbiAgICBpZiAoY2FsbEFyZ3VtZW50U3VmZml4KSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKGRhcnRNdWx0aWxpbmUgPyBgJHtleHByZXNzaW9uLmFyZ3VtZW50cy5sZW5ndGggPyBcIlwiIDogXCJcXG5cIn0ke2RhcnRJbmRlbnR9ICAke2NhbGxBcmd1bWVudFN1ZmZpeH0sXFxuYCA6XG4gICAgICAgIGAke2V4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCA/IFwiLCBcIiA6IFwiXCJ9JHtjYWxsQXJndW1lbnRTdWZmaXh9YCxcbiAgICAgIFwidGFyZ2V0LWNvbnRhaW5lciBzZW1hbnRpYyBjYWxsIGFyZ3VtZW50XCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICBpZiAoZGFydE11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhkYXJ0SW5kZW50LCBcIkRhcnQgY2FsbCBjbG9zaW5nIGluZGVudGF0aW9uXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSB3cml0ZXIuZWZmZWN0T3BlcmF0aW9uRm9ySWQoZXhwcmVzc2lvbi5vcGVyYXRpb24pXG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiICYmIHdyaXRlci5yZWZlcmVuY2VDbGFzc0VtaXNzaW9uRGVwdGggPiAwKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiTWFpbi5cIiwgXCJwcm90ZWN0ZWQgVGFzayAwMzQgaG9zdCBzdXBwb3J0IG93bmVyXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5zdGRsaWJQcm92aWRlckVudHJ5Rm9yKG9wZXJhdGlvbikgPz8gb3BlcmF0aW9uLm5hbWUsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IG9wZXJhdGlvbi5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImNhbGxlZVwiXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiZWZmZWN0IGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB3cml0ZXIuY2xhc3NGb3JJZChleHByZXNzaW9uLnJlZmVyZW5jZS5kZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IG5hbWUgPSB3cml0ZXIuY2xhc3NOYW1lRm9ySWQoZXhwcmVzc2lvbi5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBwcmVmaXggPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGAke25hbWV9Lm5ld2AgOiBgbmV3ICR7bmFtZX1gXG5cbiAgICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGRlY2xhcmF0aW9uLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiY2xhc3NcIn0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImNvbnN0cnVjdG9yIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIGNvbnN0IG1ldGhvZCA9IHdyaXRlci5tZXRob2RGb3JJZChleHByZXNzaW9uLm1ldGhvZClcblxuICAgIHdyaXRlci5tYXBwZWQoYCR7bGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiLT5cIiA6IFwiLlwifSR7bWV0aG9kLm5hbWV9YCwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogbWV0aG9kLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJtZXRob2QgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICBjb25zdCByZWNvcmQgPSB3cml0ZXIucmVjb3JkRm9ySWQoZXhwcmVzc2lvbi5yZWNvcmQuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCB0YXJnZXROYW1lID0gd3JpdGVyLnJlY29yZE5hbWVGb3JJZChleHByZXNzaW9uLnJlY29yZC5kZWNsYXJhdGlvbklkLCB0cnVlKVxuICAgIGNvbnN0IHByZWZpeCA9IGxhbmd1YWdlID09IFwicnVieVwiID8gYCR7dGFyZ2V0TmFtZX0ubmV3YCA6IGBuZXcgJHt0YXJnZXROYW1lfWBcblxuICAgIHdyaXRlci5tYXBwZWQocHJlZml4LCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogcmVjb3JkLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwicmVjb3JkXCJ9KVxuICAgIGlmICgobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpICYmIGV4cHJlc3Npb24ucmVjb3JkLmFyZ3VtZW50cykge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIjxcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLnJlY29yZCwgcGF0aDogYCR7cGF0aH0vcmVjb3JkYH0pXG4gICAgICBleHByZXNzaW9uLnJlY29yZC5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIixcIiA6IFwiLCBcIiwgXCJnZW5lcmljIGNvbnN0cnVjdGlvbiBhcmd1bWVudCBzZXBhcmF0b3JcIixcbiAgICAgICAgICBbZXhwcmVzc2lvbi5yZWNvcmRdLCBbYCR7cGF0aH0vcmVjb3JkYF0pXG4gICAgICAgIGVtaXRUeXBlKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L3JlY29yZC9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gICAgICB9KVxuICAgICAgd3JpdGVyLm1hcHBlZChcIj5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLnJlY29yZCwgcGF0aDogYCR7cGF0aH0vcmVjb3JkYH0pXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJyZWNvcmQgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5maWVsZEZvcklkKGV4cHJlc3Npb24uZmllbGQpXG4gICAgY29uc3QgcGhwR2VuZXJpY1JlY29yZCA9IGxhbmd1YWdlID09IFwicGhwXCIgJiZcbiAgICAgICh3cml0ZXIucmVjb3JkRm9yRmllbGRJZChleHByZXNzaW9uLmZpZWxkKS50eXBlUGFyYW1ldGVycz8ubGVuZ3RoID8/IDApID4gMFxuICAgIGNvbnN0IHNwZWxsaW5nID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGAtPiR7ZmllbGQubmFtZX0ke3BocEdlbmVyaWNSZWNvcmQgPyBcIigpXCIgOiBcIlwifWAgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBgLiR7ZmllbGQubmFtZX0oKWAgOiBgLiR7ZmllbGQubmFtZX1gXG5cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgIGNvbnN0IGZpZWxkID0gd3JpdGVyLnByaXZhdGVGaWVsZEZvcklkKGV4cHJlc3Npb24uZmllbGQpXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoYEAke2ZpZWxkLm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGZpZWxkLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJ9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gYC0+JHtmaWVsZC5uYW1lfWAgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IGAuIyR7ZmllbGQubmFtZX1gIDogYC4ke2ZpZWxkLm5hbWV9YCxcbiAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBmaWVsZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiRXJyb3JNZXNzYWdlUmVhZFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBcIi0+Z2V0TWVzc2FnZSgpXCIgOiBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLmdldE1lc3NhZ2UoKVwiIDogXCIubWVzc2FnZVwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIgPyBcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbnNlcXVlbnQsIGAke3BhdGh9L2NvbnNlcXVlbnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIiA6IFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjb2xvblwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uYWx0ZXJuYXRlLCBgJHtwYXRofS9hbHRlcm5hdGVgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgICAgZW1pdERhcnRJbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgXCJfc2VtYW50aWZvbGRJbnRlZ2VyTmVnYXRlXCIsIFtcbiAgICAgICAgW2V4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGBdXG4gICAgICBdKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImtvdGxpblwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiKSB7XG4gICAgICBlbWl0S290bGluSW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIFwic2VtYW50aWZvbGRfaW50ZWdlcl9uZWdhdGVcIiwgW1xuICAgICAgICBbZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYF1cbiAgICAgIF0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGxhbmd1YWdlID09IFwiY3NoYXJwXCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJjaGVja2VkKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgICAgd3JpdGVyLm1hcHBlZChcIi1cIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJCb29sZWFuTm90XCIgPyBcIm5vdCBcIiA6IHVuYXJ5T3BlcmF0aW9uU3ludGF4W2V4cHJlc3Npb24ub3BlcmF0aW9uXSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwiZGFydFwiICYmIFtcIkludGVnZXJBZGRcIiwgXCJJbnRlZ2VyU3VidHJhY3RcIiwgXCJJbnRlZ2VyTXVsdGlwbHlcIl0uaW5jbHVkZXMoZXhwcmVzc2lvbi5vcGVyYXRpb24pKSB7XG4gICAgY29uc3QgaGVscGVyID0gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJBZGRcIiA6XG4gICAgICBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJTdWJ0cmFjdFwiID8gXCJfc2VtYW50aWZvbGRJbnRlZ2VyU3VidHJhY3RcIiA6IFwiX3NlbWFudGlmb2xkSW50ZWdlck11bHRpcGx5XCJcblxuICAgIGVtaXREYXJ0SW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGhlbHBlciwgW1xuICAgICAgW2V4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGBdLCBbZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgXVxuICAgIF0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgIGNvbnN0IGhlbHBlciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlckFkZFwiID8gXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX2FkZFwiIDpcbiAgICAgIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIgPyBcInNlbWFudGlmb2xkX2ludGVnZXJfc3VidHJhY3RcIiA6IFwic2VtYW50aWZvbGRfaW50ZWdlcl9tdWx0aXBseVwiXG5cbiAgICBlbWl0S290bGluSW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGhlbHBlciwgW1xuICAgICAgW2V4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGBdLCBbZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgXVxuICAgIF0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiAmJiB3cml0ZXIudXNlc01ldGhvZFN0cmluZ0VxdWFsaXR5KCkgJiZcbiAgICAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdFcXVhbFwiIHx8IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIhXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiLmVxdWFscyhcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKSlcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImNzaGFycFwiICYmIFtcIkludGVnZXJBZGRcIiwgXCJJbnRlZ2VyU3VidHJhY3RcIiwgXCJJbnRlZ2VyTXVsdGlwbHlcIl0uaW5jbHVkZXMoZXhwcmVzc2lvbi5vcGVyYXRpb24pKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcImNoZWNrZWQoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYmluYXJ5T3BlcmF0aW9uU3BlbGxpbmcoZXhwcmVzc2lvbi5vcGVyYXRpb24sIGxhbmd1YWdlKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIm9wZXJhdG9yIHNwYWNpbmdcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiICYmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgfHwgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSkge1xuICAgIGNvbnN0IGNvbXBvc2l0ZU9wZXJhdG9yID0gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiICYmIHdyaXRlci5oYXNSYW5nZShleHByZXNzaW9uLCBwYXRoLCBcImVxdWFsaXR5T3BlcmF0b3JcIilcblxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIiFcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICB3cml0ZXIubWFwcGVkKFwiLmVxdWFsc1wiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBjb21wb3NpdGVPcGVyYXRvciA/IFwiZXF1YWxpdHlPcGVyYXRvclwiIDogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwic3dpZnRcIiAmJiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdFcXVhbFwiIHx8IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiA/IFwic2VtYW50aWZvbGRfc3RyaW5nX2VxdWFsXCIgOiBcInNlbWFudGlmb2xkX3N0cmluZ19ub3RfZXF1YWxcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcIlN3aWZ0IHNjYWxhci1lcXVhbGl0eSBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkYXJ0TXVsdGlsaW5lID0gbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgZGFydEV4cHJlc3Npb25FeGNlZWRzUGFnZVdpZHRoKHdyaXRlciwgZXhwcmVzc2lvbilcbiAgY29uc3QgZGFydEluZGVudCA9IGRhcnRNdWx0aWxpbmUgPyBjdXJyZW50TGluZUluZGVudCh3cml0ZXIpIDogXCJcIlxuXG4gIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIm9wZXJhdG9yIHNwYWNpbmdcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIGNvbnN0IHNwZWxsaW5nID0gYmluYXJ5T3BlcmF0aW9uU3BlbGxpbmcoZXhwcmVzc2lvbi5vcGVyYXRpb24sIGxhbmd1YWdlKVxuXG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIgJiYgd3JpdGVyLmhhc1JhbmdlKGV4cHJlc3Npb24sIHBhdGgsIFwiZXF1YWxpdHlPcGVyYXRvclwiKSkge1xuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcuc2xpY2UoMCwgMSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcuc2xpY2UoMSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImVxdWFsaXR5T3BlcmF0b3JcIn0pXG4gIH0gZWxzZSB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhkYXJ0TXVsdGlsaW5lID8gYFxcbiR7ZGFydEluZGVudH0gICAgYCA6IFwiIFwiLCBcIm9wZXJhdG9yIHNwYWNpbmdcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBLb3RsaW4gY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBvcGVyYXRvciByYW5nZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5VbmFyeUV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CaW5hcnlFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gT3BlcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBPcGVyYXRpb24gcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwZXIgLSBFeGFjdCB0YXJnZXQgaGVscGVyLlxuICogQHBhcmFtIHtbaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgc3RyaW5nXVtdfSBvcGVyYW5kcyAtIE9yZGVyZWQgb3BlcmFuZHMgYW5kIHBhdGhzLlxuICovXG5mdW5jdGlvbiBlbWl0S290bGluSW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGhlbHBlciwgb3BlcmFuZHMpIHtcbiAgd3JpdGVyLm1hcHBlZChoZWxwZXIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcIktvdGxpbiBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIG9wZXJhbmRzLmZvckVhY2goKFtvcGVyYW5kLCBvcGVyYW5kUGF0aF0sIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJLb3RsaW4gY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIG9wZXJhbmQsIG9wZXJhbmRQYXRoLCBcImtvdGxpblwiLCBpZGVudGl0eUlkZW50aWZpZXIpXG4gIH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiS290bGluIGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIGNvbXBpbGVyLW93bmVkIERhcnQgY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5VbmFyeUV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CaW5hcnlFeHByZXNzaW9ufSBleHByZXNzaW9uIE9wZXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIE9wZXJhdGlvbiBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBlciBFeGFjdCB0YXJnZXQgaGVscGVyLlxuICogQHBhcmFtIHtbaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgc3RyaW5nXVtdfSBvcGVyYW5kcyBPcmRlcmVkIG9wZXJhbmRzIGFuZCBwYXRocy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0RGFydEludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIG9wZXJhbmRzKSB7XG4gIGNvbnN0IGZsYXRMZW5ndGggPSBoZWxwZXIubGVuZ3RoICsgMiArIG9wZXJhbmRzLnJlZHVjZSgodG90YWwsIFtvcGVyYW5kXSwgaW5kZXgpID0+XG4gICAgdG90YWwgKyBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBvcGVyYW5kKS5sZW5ndGggKyAoaW5kZXggPyAyIDogMCksIDApXG4gIGNvbnN0IG11bHRpbGluZSA9IHdyaXRlci5jb2x1bW4gLSAxICsgZmxhdExlbmd0aCA+IDgwXG4gIGNvbnN0IGluZGVudCA9IG11bHRpbGluZSA/IGN1cnJlbnRMaW5lSW5kZW50KHdyaXRlcikgOiBcIlwiXG5cbiAgd3JpdGVyLm1hcHBlZChoZWxwZXIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBvcGVyYW5kcy5mb3JFYWNoKChbb3BlcmFuZCwgb3BlcmFuZFBhdGhdLCBpbmRleCkgPT4ge1xuICAgIGlmIChtdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZXggPyBcIlwiIDogXCJcXG5cIn0ke2luZGVudH0gIGAsIFwiRGFydCBjaGVja2VkLWludGVnZXIgYXJndW1lbnQgaW5kZW50YXRpb25cIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZWxzZSBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIG9wZXJhbmQsIG9wZXJhbmRQYXRoLCBcImRhcnRcIiwgaWRlbnRpdHlJZGVudGlmaWVyKVxuICAgIGlmIChtdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoXCIsXFxuXCIsIFwiRGFydCBmb3JtYXR0ZXIgY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgfSlcbiAgaWYgKG11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiRGFydCBjaGVja2VkLWludGVnZXIgY2xvc2luZyBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgRGFydCdzIGRlZmF1bHQgODAtY29sdW1uIGZvcm1hdHRlciBtdXN0IHNwbGl0IGFuIGV4cHJlc3Npb24gYXQgdGhlIGN1cnJlbnQgc2l0ZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGZsYXQgZXhwcmVzc2lvbiBjcm9zc2VzIHRoZSBmb3JtYXR0ZXIgYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIGRhcnRFeHByZXNzaW9uRXhjZWVkc1BhZ2VXaWR0aCh3cml0ZXIsIGV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHdyaXRlci5jb2x1bW4gLSAxICsgZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbikubGVuZ3RoID4gODBcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGdlbmVyYXRlZCBsaW5lJ3Mgc3RydWN0dXJhbCBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IExlYWRpbmcgc3BhY2VzLlxuICovXG5mdW5jdGlvbiBjdXJyZW50TGluZUluZGVudCh3cml0ZXIpIHtcbiAgcmV0dXJuIC9eICovdS5leGVjKHdyaXRlci5jb2RlLnNsaWNlKHdyaXRlci5jb2RlLmxhc3RJbmRleE9mKFwiXFxuXCIpICsgMSkpPy5bMF0gPz8gXCJcIlxufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGJvdW5kZWQgVGFzay0wMDUgRGFydCBleHByZXNzaW9uIHByb2ZpbGUgd2l0aG91dCBtYXBwaW5ncyBmb3IgcGFnZS13aWR0aCBwbGFubmluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge3N0cmluZ30gRmxhdCBjYW5vbmljYWwgc3BlbGxpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSByZXR1cm4gZXhwcmVzc2lvbi5uYW1lXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSByZXR1cm4gU3RyaW5nKGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSByZXR1cm4gYF9zZW1hbnRpZm9sZEJvb2xlYW4oJHtleHByZXNzaW9uLnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9KWBcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikgcmV0dXJuIGVtaXRTdHJpbmdMaXRlcmFsKFwiZGFydFwiLCBleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBleHByZXNzaW9uLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCkpXG4gICAgY29uc3QgY2FsbEFyZ3VtZW50U3VmZml4ID0gd3JpdGVyLmNhbGxBcmd1bWVudFN1ZmZpeEZvcihleHByZXNzaW9uKVxuXG4gICAgaWYgKGNhbGxBcmd1bWVudFN1ZmZpeCkgYXJndW1lbnRzXy5wdXNoKGNhbGxBcmd1bWVudFN1ZmZpeClcblxuICAgIHJldHVybiBgJHt3cml0ZXIuY2FsbE5hbWVGb3IoZXhwcmVzc2lvbil9KCR7YXJndW1lbnRzXy5qb2luKFwiLCBcIil9KWBcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBvcGVyYW5kID0gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kKVxuXG4gICAgcmV0dXJuIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiID8gYF9zZW1hbnRpZm9sZEludGVnZXJOZWdhdGUoJHtvcGVyYW5kfSlgIDogYCghJHtvcGVyYW5kfSlgXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGxlZnQgPSBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQpXG4gICAgY29uc3QgcmlnaHQgPSBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0KVxuXG4gICAgaWYgKFtcIkludGVnZXJBZGRcIiwgXCJJbnRlZ2VyU3VidHJhY3RcIiwgXCJJbnRlZ2VyTXVsdGlwbHlcIl0uaW5jbHVkZXMoZXhwcmVzc2lvbi5vcGVyYXRpb24pKSB7XG4gICAgICBjb25zdCBoZWxwZXIgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJBZGRcIiA/IFwiX3NlbWFudGlmb2xkSW50ZWdlckFkZFwiIDpcbiAgICAgICAgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyU3VidHJhY3RcIiA/IFwiX3NlbWFudGlmb2xkSW50ZWdlclN1YnRyYWN0XCIgOiBcIl9zZW1hbnRpZm9sZEludGVnZXJNdWx0aXBseVwiXG5cbiAgICAgIHJldHVybiBgJHtoZWxwZXJ9KCR7bGVmdH0sICR7cmlnaHR9KWBcbiAgICB9XG4gICAgcmV0dXJuIGAoJHtsZWZ0fSAke2JpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBcImRhcnRcIil9ICR7cmlnaHR9KWBcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgRGFydCBleHByZXNzaW9uIHJlYWNoZWQgZm9ybWF0dGVyIHBsYW5uaW5nIGFmdGVyIHByZWZsaWdodC5cIilcbn1cblxuLyoqXG4gKiBQcmVzZXJ2ZXMgYSBLb3RsaW4gaWRlbnRpZmllciBzcGVsbGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gSWRlbnRpZmllciBzcGVsbGluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVuY2hhbmdlZCBzcGVsbGluZy5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHlJZGVudGlmaWVyKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgSmF2YVNjcmlwdC1mYW1pbHkgZXhlY3V0aW9uIGNhbiBjcmVhdGUgSUVFRS03NTQgc2lnbmVkIHplcm8uXG4gKiBTZW1hbnRpZm9sZCBpbnRlZ2VycyBoYXZlIG9uZSBtYXRoZW1hdGljYWwgemVybywgc28gdGhvc2UgdGFyZ2V0cyBjYW5vbmljYWxpemVcbiAqIHRoZWlyIG9ic2VydmFibGUgc2NhbGFyIG91dHB1dCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcGVyYXRpb24gdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBjYW5vbmljYWwgb3V0cHV0IHJlbmRlcmluZyBpcyByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVzQ2Fub25pY2FsWmVyb1JlbmRlcmluZyhtb2R1bGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5mdW5jdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGRlY2xhcmF0aW9uLmJvZHkpKSB8fFxuICAgIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKG1vZHVsZS5lbnRyeVBvaW50LmJvZHkpXG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBibG9jayBmb3Igc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGEgbmVzdGVkIGV4cHJlc3Npb24gY2FuIHByb2R1Y2Ugc2lnbmVkIHplcm8gaW4gSmF2YVNjcmlwdC5cbiAqL1xuZnVuY3Rpb24gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oYmxvY2spIHtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbmRpdGlvbikgfHxcbiAgICAgICAgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbnNlcXVlbnQpIHx8XG4gICAgICAgIEJvb2xlYW4oc3RhdGVtZW50LmFsdGVybmF0ZSAmJiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYWx0ZXJuYXRlKSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQubGlzdCkgfHwgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmJvZHkpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50Lm1hcCkgfHwgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmJvZHkpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5jb25kaXRpb24pIHx8IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KSB8fCBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuY2F0Y2hCb2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5pbml0aWFsaXplcilcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKHN0YXRlbWVudC5leHByZXNzaW9uICYmIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24pKVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgZXhwcmVzc2lvbiB0cmVlIGZvciBzaWduLXByb2R1Y2luZyBpbnRlZ2VyIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB0cmVlIGNvbnRhaW5zIGludGVnZXIgbmVnYXRpb24gb3IgbXVsdGlwbGljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIgfHwgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJNdWx0aXBseVwiIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5sZWZ0KSB8fFxuICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLnJpZ2h0KVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGFyZ3VtZW50KSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oYXJndW1lbnQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ucmVjZWl2ZXIpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSByZXR1cm4gZXhwcmVzc2lvbi5lbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVsZW1lbnQpKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5lbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVudHJ5LmtleSkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZW50cnkudmFsdWUpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLmNvbGxlY3Rpb24pIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5pbmRleClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKSB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ua2V5KVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBNYXBzIG9uZSBhbHJlYWR5IHZhbGlkYXRlZCBzZW1hbnRpYyBvcGVyYXRpb24gdG8gdGFyZ2V0IHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IG9wZXJhdG9yIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhvcGVyYXRpb24sIGxhbmd1YWdlKSB7XG4gIGNvbnN0IHN5bnRheCA9IGJpbmFyeU9wZXJhdGlvblN5bnRheFtvcGVyYXRpb25dXG5cbiAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIgJiYgc3ludGF4LnBocCkgcmV0dXJuIHN5bnRheC5waHBcbiAgaWYgKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgc3ludGF4LnB5dGhvbikgcmV0dXJuIHN5bnRheC5weXRob25cbiAgaWYgKChsYW5ndWFnZSA9PSBcInBocFwiIHx8IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSAmJiBzeW50YXguc3RyaWN0KSByZXR1cm4gc3ludGF4LnN0cmljdFxuXG4gIHJldHVybiBzeW50YXguZGVmYXVsdFxufVxuIl19
2672
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4SCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlELDhGQUE4RjtBQUM5RixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0FBQ2pGLG9LQUFvSztBQUNwSyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDakQseUJBQXlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUM5QyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3RELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQzlDLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzFELGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7Q0FDOUQsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ3pHLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMs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Q0FBQyxDQUFBO0lBRS9DLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRztRQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQTtJQUN0RCxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUE7SUFDL0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUE7SUFFdEgsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFBO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7aXNEZW5zZUFycmF5fSBmcm9tIFwiLi4vYXJyYXkuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUJhY2tlbmRUeXBlc30gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllciwgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyLCB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyfSBmcm9tIFwiLi9pZGVudGlmaWVycy5qc1wiXG5pbXBvcnQge2VtaXRTY2FsYXJUeXBlLCBlbWl0U3RyaW5nTGl0ZXJhbH0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVW5hcnlPcGVyYXRpb24sIHN0cmluZz4+fSAqL1xuY29uc3QgdW5hcnlPcGVyYXRpb25TeW50YXggPSBPYmplY3QuZnJlZXplKHtCb29sZWFuTm90OiBcIiFcIiwgSW50ZWdlck5lZ2F0ZTogXCItXCJ9KVxuLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5hcnlPcGVyYXRpb24sIFJlYWRvbmx5PHtkZWZhdWx0OiBzdHJpbmcsIHBocD86IHN0cmluZywgcHl0aG9uPzogc3RyaW5nLCBzdHJpY3Q/OiBzdHJpbmd9Pj4+fSAqL1xuY29uc3QgYmluYXJ5T3BlcmF0aW9uU3ludGF4ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEJvb2xlYW5BbmQ6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiJiZcIiwgcHl0aG9uOiBcImFuZFwifSksXG4gIEJvb2xlYW5FcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI9PVwiLCBzdHJpY3Q6IFwiPT09XCJ9KSxcbiAgQm9vbGVhbk5vdEVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiE9XCIsIHN0cmljdDogXCIhPT1cIn0pLFxuICBCb29sZWFuT3I6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwifHxcIiwgcHl0aG9uOiBcIm9yXCJ9KSxcbiAgSW50ZWdlckFkZDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIrXCJ9KSxcbiAgSW50ZWdlckVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBJbnRlZ2VyR3JlYXRlclRoYW46IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPlwifSksXG4gIEludGVnZXJHcmVhdGVyVGhhbk9yRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPj1cIn0pLFxuICBJbnRlZ2VyTGVzc1RoYW46IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPFwifSksXG4gIEludGVnZXJMZXNzVGhhbk9yRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPD1cIn0pLFxuICBJbnRlZ2VyTXVsdGlwbHk6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiKlwifSksXG4gIEludGVnZXJOb3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KSxcbiAgSW50ZWdlclN1YnRyYWN0OiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIi1cIn0pLFxuICBTdHJpbmdDb25jYXQ6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiK1wiLCBwaHA6IFwiLlwifSksXG4gIFN0cmluZ0VxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBTdHJpbmdOb3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KVxufSlcbmNvbnN0IHRhc2swMDVMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIiwgXCJjXCIsIFwiZGFydFwiLCBcInppZ1wiXSlcbmNvbnN0IHRhc2swMDZMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDA3TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAwOExhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMDlMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDExTGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAxMkxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMTRMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDMyTGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAzM0xhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swNDhDb25kaXRpb25hbExhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IGphdmFSZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1wiY2xvbmVcIiwgXCJlcXVhbHNcIiwgXCJmaW5hbGl6ZVwiLCBcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ0b1N0cmluZ1wiLCBcIndhaXRcIl0pXG5jb25zdCBqYXZhc2NyaXB0UmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcbiAgXCJfX2RlZmluZUdldHRlcl9fXCIsIFwiX19kZWZpbmVTZXR0ZXJfX1wiLCBcIl9fbG9va3VwR2V0dGVyX19cIiwgXCJfX2xvb2t1cFNldHRlcl9fXCIsIFwiX19wcm90b19fXCIsIFwiY29uc3RydWN0b3JcIixcbiAgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcInRvTG9jYWxlU3RyaW5nXCIsIFwidG9TdHJpbmdcIiwgXCJ2YWx1ZU9mXCJcbl0pXG5jb25zdCBydWJ5UmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcbiAgXCJfX3NlbmRfX1wiLCBcImV4dGVuZFwiLCBcImZldGNoXCIsIFwiaW5zdGFuY2VfZXZhbFwiLCBcImluc3RhbmNlX2V4ZWNcIiwgXCJtZXRob2RcIiwgXCJtZXRob2RfbWlzc2luZ1wiLCBcInB1YmxpY19zZW5kXCIsXG4gIFwicmVzcG9uZF90b19taXNzaW5nP1wiLCBcInNlbmRcIiwgXCJzaW5nbGV0b25fY2xhc3NcIiwgXCJzaXplXCJcbl0pXG5jb25zdCBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzID0gbmV3IFNldChbXG4gIFwiY2xvbmUoKVwiLCBcImVxdWFscyhPYmplY3QpXCIsIFwiZmluYWxpemUoKVwiLCBcImdldENsYXNzKClcIiwgXCJoYXNoQ29kZSgpXCIsIFwibm90aWZ5KClcIiwgXCJub3RpZnlBbGwoKVwiLCBcInRvU3RyaW5nKClcIixcbiAgXCJ3YWl0KClcIiwgXCJ3YWl0KGxvbmcpXCIsIFwid2FpdChsb25nLGludClcIlxuXSlcblxuLyoqXG4gKiBDaGVja3MgdGhlIGludGVudGlvbmFsbHkgbmFycm93IGJhY2tlbmQgY29udHJhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge3tleHRlcm5hbERlY2xhcmF0aW9uSWRzPzogU2V0PHN0cmluZz4sIHByb2dyYW0/OiBib29sZWFuLCB2aXNpYmxlRnVuY3Rpb25zPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHZpc2libGVSZWNvcmRzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCB2aXNpYmxlQ2xhc3Nlcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCB2aXNpYmxlRXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj4sIHZpc2libGVDYWxsRWZmZWN0cz86IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pn19IFtvcHRpb25zXSAtIFJlc29sdmVkIHByb2dyYW0gdmFsaWRhdGlvbiBjb250ZXh0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJhY2tlbmRNb2R1bGUobW9kdWxlLCBsYW5ndWFnZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICghbW9kdWxlIHx8IHR5cGVvZiBtb2R1bGUgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG1vZHVsZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtb2R1bGVcIiwgdW5kZWZpbmVkKVxuICB9XG4gIGlmIChtb2R1bGUua2luZCAhPSBcIk1vZHVsZVwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIG1vZHVsZS5raW5kLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShtb2R1bGUuZnVuY3Rpb25zKSB8fCAhbW9kdWxlLmVudHJ5UG9pbnQgfHwgdHlwZW9mIG1vZHVsZS5lbnRyeVBvaW50ICE9IFwib2JqZWN0XCIgfHxcbiAgICBtb2R1bGUuZW50cnlQb2ludC5raW5kICE9IFwiRW50cnlQb2ludFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1vZHVsZSBtZW1iZXJzXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgY29uc3QgZGVjbGFyZWRSZWNvcmRzID0gbW9kdWxlLnJlY29yZHNcbiAgY29uc3QgcmVjb3JkcyA9IGRlY2xhcmVkUmVjb3JkcyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZFJlY29yZHNcbiAgY29uc3QgZGVjbGFyZWRDbGFzc2VzID0gbW9kdWxlLmNsYXNzZXNcbiAgY29uc3QgY2xhc3NlcyA9IGRlY2xhcmVkQ2xhc3NlcyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZENsYXNzZXNcbiAgY29uc3QgZGVjbGFyZWRFcnJvcnMgPSBtb2R1bGUuZXJyb3JzXG4gIGNvbnN0IGVycm9ycyA9IGRlY2xhcmVkRXJyb3JzID09PSB1bmRlZmluZWQgPyBbXSA6IGRlY2xhcmVkRXJyb3JzXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlY29yZHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2xhc3NlcykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVmZXJlbmNlIGNsYXNzIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShlcnJvcnMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGVycm9yIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmIChtb2R1bGUuZnVuY3Rpb25zLmxlbmd0aCA9PSAwICYmICghb3B0aW9ucy5wcm9ncmFtIHx8XG4gICAgcmVjb3Jkcy5sZW5ndGggPT0gMCAmJiBjbGFzc2VzLmxlbmd0aCA9PSAwICYmIGVycm9ycy5sZW5ndGggPT0gMCAmJiBtb2R1bGUuZW50cnlQb2ludC5ib2R5Py5zdGF0ZW1lbnRzPy5sZW5ndGggPT0gMCkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibW9kdWxlIHdpdGhvdXQgZGVjbGFyYXRpb25zIG9yIGV4ZWN1dGFibGUgZW50cnlcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmICghdGFzazAxMkxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIG1vZHVsZUhhc1R5cGVQYXJhbWV0ZXJzKG1vZHVsZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMTIgdHlwZSBwYXJhbWV0ZXJzIGFuZCBnZW5lcmljIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKHJlY29yZHMubGVuZ3RoID4gMCAmJiAhdGFzazAwOUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA5IGNsb3NlZCByZWNvcmRzXCIsIHJlY29yZHNbMF0/LmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoY2xhc3Nlcy5sZW5ndGggPiAwICYmICF0YXNrMDMzTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMzMgcmVmZXJlbmNlIGNsYXNzZXMsIG1ldGhvZHMsIGFuZCBjb25zdHJ1Y3RvcnNcIiwgY2xhc3Nlc1swXT8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmICghdGFzazAxMUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSByZWplY3RUeXBlZEVycm9ycyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMzJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0Q29uZGl0aW9uQ29udHJvbGxlZExvb3BzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIGlmICghdGFzazAxNExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSByZWplY3RPcmRlcmVkTWFwQ2FwYWJpbGl0eShtb2R1bGUsIGxhbmd1YWdlKVxuICB2YWxpZGF0ZVJlY29yZFRhcmdldHMocmVjb3JkcywgbW9kdWxlLmZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1RhcmdldHMoY2xhc3NlcywgcmVjb3JkcywgZXJyb3JzLCBtb2R1bGUuZnVuY3Rpb25zLCBsYW5ndWFnZSwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIXRhc2swMDhMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0SXRlcmF0aW9uU3RhdGVtZW50cyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMDdMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0T3B0aW9uYWxUeXBlcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMDZMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0Q29sbGVjdGlvblR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIGNvbnN0IGxvb3BPd25lcnMgPSBjb2xsZWN0TG9vcE93bmVycyhtb2R1bGUsIGxhbmd1YWdlKVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3Nlcykge1xuICAgIHZhbGlkYXRlQmxvY2soZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgbGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmxvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvciwgb3duZXJzOiBsb29wT3duZXJzfSwgbmV3IFNldCgpLCBvcHRpb25zLmV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZGVjbGFyYXRpb24ubWV0aG9kcykge1xuICAgICAgdmFsaWRhdGVCbG9jayhtZXRob2QuYm9keSwgbGFuZ3VhZ2UsIG1ldGhvZC5sb2NhdGlvbixcbiAgICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBtZXRob2QsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2sobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UsIG1vZHVsZS5lbnRyeVBvaW50LmxvY2F0aW9uLFxuICAgIHthY3RpdmU6IFtdLCBvd25lcjogbW9kdWxlLmVudHJ5UG9pbnQsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICBjb25zdCBkZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKVxuICBjb25zdCBkZWNsYXJhdGlvbk5hbWVzID0gbmV3IFNldCgpXG4gIGNvbnN0IHRhcmdldERlY2xhcmF0aW9uTmFtZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IGZ1bmN0aW9uRGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGlmICghZnVuY3Rpb25EZWNsYXJhdGlvbiB8fCB0eXBlb2YgZnVuY3Rpb25EZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZnVuY3Rpb25EZWNsYXJhdGlvbikgfHxcbiAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb24ua2luZCAhPSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiB8fCAhQXJyYXkuaXNBcnJheShmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lLCBcImZ1bmN0aW9uXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgaWYgKGRlY2xhcmF0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSBmdW5jdGlvbiAnJHtmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWV9J2AsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGRlY2xhcmF0aW9uTmFtZXMuYWRkKGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSlcbiAgICBjb25zdCB0YXJnZXREZWNsYXJhdGlvbk5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiXG4gICAgICA/IGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZS5yZXBsYWNlKC9bQS1aXS9ndSwgKGNoYXJhY3RlcikgPT4gY2hhcmFjdGVyLnRvTG93ZXJDYXNlKCkpXG4gICAgICA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKHRhcmdldERlY2xhcmF0aW9uTmFtZXMuaGFzKHRhcmdldERlY2xhcmF0aW9uTmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHRhcmdldCBmdW5jdGlvbi1uYW1lIGNvbGxpc2lvbiAnJHtmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWV9J2AsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIHRhcmdldERlY2xhcmF0aW9uTmFtZXMuYWRkKHRhcmdldERlY2xhcmF0aW9uTmFtZSlcbiAgICBpZiAodHlwZW9mIGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQgIT0gXCJzdHJpbmdcIiB8fCAhL14oPzpbYS16XVthLXowLTkuXy1dKiMpP2Z1bmN0aW9uOlswLTldKyQvdS50ZXN0KGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpIHx8XG4gICAgICBkZWNsYXJhdGlvbklkcy5oYXMoZnVuY3Rpb25EZWNsYXJhdGlvbi5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNsYXJhdGlvbklkcy5hZGQoZnVuY3Rpb25EZWNsYXJhdGlvbi5pZClcbiAgICB2YWxpZGF0ZVR5cGVQYXJhbWV0ZXJUYXJnZXRzKGZ1bmN0aW9uRGVjbGFyYXRpb24sIGxhbmd1YWdlKVxuXG4gICAgaWYgKCF0YXNrMDA1TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkgJiYgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZnVuY3Rpb24gcGFyYW1ldGVyIGNvdW50IG90aGVyIHRoYW4gdHdvXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIGZ1bmN0aW9uRGVjbGFyYXRpb24ucmV0dXJuVHlwZT8ua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIiAmJlxuICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbi5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNSB2b2lkIGZ1bmN0aW9uIHJldHVyblwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrKGZ1bmN0aW9uRGVjbGFyYXRpb24uYm9keSwgbGFuZ3VhZ2UsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbXSwgb3duZXI6IGZ1bmN0aW9uRGVjbGFyYXRpb24sIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuXG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoIXBhcmFtZXRlciB8fCB0eXBlb2YgcGFyYW1ldGVyICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpIHx8IHBhcmFtZXRlci5raW5kICE9IFwiUGFyYW1ldGVyXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBwYXJhbWV0ZXJcIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgfVxuICB9XG4gIHZhbGlkYXRlRXJyb3JUYXJnZXRzKGVycm9ycywgcmVjb3JkcywgbW9kdWxlLmZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgdmFsaWRhdGVTY2FmZm9sZGluZ05hbWVzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIHZhbGlkYXRlQmFja2VuZFR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UsIHtcbiAgICBjYWxsRWZmZWN0czogb3B0aW9ucy52aXNpYmxlQ2FsbEVmZmVjdHMsXG4gICAgY2xhc3Nlczogb3B0aW9ucy52aXNpYmxlQ2xhc3NlcyxcbiAgICBlcnJvcnM6IG9wdGlvbnMudmlzaWJsZUVycm9ycyxcbiAgICBmdW5jdGlvbnM6IG9wdGlvbnMudmlzaWJsZUZ1bmN0aW9ucyxcbiAgICByZWNvcmRzOiBvcHRpb25zLnZpc2libGVSZWNvcmRzXG4gIH0pXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAxNCBJUiB0cmFuc2FjdGlvbmFsbHkgYmVmb3JlIGEgbm9uLWNvaG9ydCB0YXJnZXQgYWxsb2NhdGVzIG91dHB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0T3JkZXJlZE1hcENhcGFiaWxpdHkobW9kdWxlLCBsYW5ndWFnZSkge1xuICBjb25zdCBub2RlID0gZmluZE9yZGVyZWRNYXBOb2RlKG1vZHVsZSlcblxuICBpZiAobm9kZSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDE0IG9yZGVyZWQtbWFwIGl0ZXJhdGlvblwiLCBkaWFnbm9zdGljTG9jYXRpb24obm9kZS5sb2NhdGlvbiwgbW9kdWxlLmxvY2F0aW9uKSlcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgZGlzdGluY3Qgb3JkZXJlZC1tYXAgdHlwZSwgbGl0ZXJhbCwgb3IgbG9vcCBpbiBwYXJzZXItbmV1dHJhbCBJUi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgc3VidHJlZS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWR9IEZpcnN0IFRhc2sgMDE0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRPcmRlcmVkTWFwTm9kZSh2YWx1ZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBzZWVuLmFkZCh2YWx1ZSlcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcblxuICAgIGlmIChbXCJPcmRlcmVkTWFwVHlwZVwiLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIsIFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoY2FuZGlkYXRlLmtpbmQpKSkgcmV0dXJuIGNhbmRpZGF0ZVxuICB9XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kT3JkZXJlZE1hcE5vZGUoY2hpbGQsIHNlZW4pXG5cbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlamVjdHMgdHlwZWQgZXJyb3JzIGZvciBhIHRhcmdldCBvdXRzaWRlIHRoZSBUYXNrIDAxMSBjb2hvcnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdFR5cGVkRXJyb3JzKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9ICovIG1vZHVsZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlKSB7XG4gIGlmICgobW9kdWxlLmVycm9ycyA/PyBbXSkubGVuZ3RoID4gMCkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxMSB0eXBlZCBlcnJvcnMgYW5kIGhhbmRsaW5nXCIsIG1vZHVsZS5lcnJvcnM/LlswXT8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykgcmVqZWN0VHlwZWRFcnJvckJsb2NrKGRlY2xhcmF0aW9uPy5ib2R5LCBsYW5ndWFnZSlcbiAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIEZpbmRzIHR5cGVkLWVycm9yIHN0YXRlbWVudHMgd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBibG9ja3MuXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gVmlzaXRlZCBibG9ja3MuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0VHlwZWRFcnJvckJsb2NrKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gYmxvY2ssXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSxcbiAgLyoqIEB0eXBlIHtTZXQ8b2JqZWN0Pn0gKi8gc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGlmIChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKSA9PSBcIlJhaXNlU3RhdGVtZW50XCIgfHwgUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDExIHR5cGVkIGVycm9ycyBhbmQgaGFuZGxpbmdcIixcbiAgICAgICAgZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpKVxuICAgIH1cbiAgICBpZiAoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RUeXBlZEVycm9yQmxvY2soUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJhbHRlcm5hdGVcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikpKSkge1xuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGFyZ2V0LXZpc2libGUgbm9taW5hbCBlcnJvciBkZWNsYXJhdGlvbnMgYmVmb3JlIGVtaXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uW119IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRnVuY3Rpb24gZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbW9kdWxlTG9jYXRpb24gLSBNb2R1bGUgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFcnJvclRhcmdldHMoXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSAqLyBlcnJvcnMsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gKi8gcmVjb3JkcyxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119ICovIGZ1bmN0aW9ucyxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSAqLyBtb2R1bGVMb2NhdGlvblxuKSB7XG4gIGNvbnN0IGlkcyA9IG5ldyBTZXQoKVxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoWy4uLnJlY29yZHMsIC4uLmZ1bmN0aW9uc10ubWFwKCh7bmFtZX0pID0+IGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lKSlcbiAgY29uc3QgZm9yYmlkZGVuID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBuZXcgU2V0KFtcIkVycm9yXCIsIFwiQWdncmVnYXRlRXJyb3JcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcInBocFwiID8gbmV3IFNldChbXCJUaHJvd2FibGVcIiwgXCJFeGNlcHRpb25cIiwgXCJSdW50aW1lRXhjZXB0aW9uXCIsIFwiRXJyb3JcIl0pIDpcbiAgICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJFeGNlcHRpb25cIiwgXCJTdGFuZGFyZEVycm9yXCIsIFwiU2NyaXB0RXJyb3JcIiwgXCJTeXN0ZW1FeGl0XCJdKSA6XG4gICAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJUaHJvd2FibGVcIiwgXCJFeGNlcHRpb25cIiwgXCJSdW50aW1lRXhjZXB0aW9uXCIsIFwiRXJyb3JcIl0pIDogbmV3IFNldCgpXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVycm9ycy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGVycm9yc1tpbmRleF1cbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihkZWNsYXJhdGlvbj8ubG9jYXRpb24sIG1vZHVsZUxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IGRlY2xhcmF0aW9uICYmIHR5cGVvZiBkZWNsYXJhdGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKVxuICAgICAgPyBPYmplY3Qua2V5cyhkZWNsYXJhdGlvbikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSB8fFxuICAgICAgZGVjbGFyYXRpb24ua2luZCAhPSBcIkVycm9yRGVjbGFyYXRpb25cIiB8fCBmaWVsZHMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oZGVjbGFyYXRpb24ubG9jYXRpb24sIGxhbmd1YWdlLCBcImVycm9yIGRlY2xhcmF0aW9uIGxvY2F0aW9uXCIsIG1vZHVsZUxvY2F0aW9uKVxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIGlmICgoZGVjbGFyYXRpb24uaWQgIT0gYGVycm9yOiR7aW5kZXh9YCAmJlxuICAgICAgIW5ldyBSZWdFeHAoYF5bYS16XVthLXowLTkuXy1dKiNlcnJvcjoke2luZGV4fSRgLCBcInVcIikudGVzdChkZWNsYXJhdGlvbi5pZCA/PyBcIlwiKSkgfHwgaWRzLmhhcyhkZWNsYXJhdGlvbi5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAobmFtZXMuaGFzKG5vcm1hbGl6ZWQpIHx8IGZvcmJpZGRlbi5oYXMoZGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVycm9yIGRlY2xhcmF0aW9uIGNvbGxpc2lvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfSdgLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgaWRzLmFkZChkZWNsYXJhdGlvbi5pZClcbiAgICBuYW1lcy5hZGQobm9ybWFsaXplZClcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBldmVyeSBub21pbmFsIHJlY29yZCBpZGVudGlmaWVyLCBpZGVudGl0eSwgZmllbGQsIGFuZCB0YXJnZXQgY29sbGlzaW9uIGJlZm9yZSBvdXRwdXQgYWxsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIENhbmRpZGF0ZSByZWNvcmRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119IGZ1bmN0aW9ucyAtIENhbmRpZGF0ZSBmdW5jdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBtb2R1bGVMb2NhdGlvbiAtIE1vZHVsZSBmYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlY29yZFRhcmdldHMocmVjb3JkcywgZnVuY3Rpb25zLCBsYW5ndWFnZSwgbW9kdWxlTG9jYXRpb24pIHtcbiAgY29uc3QgZGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgdGFyZ2V0TmFtZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucykge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbmFtZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcIm5hbWVcIilcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiKSBjb250aW51ZVxuICAgIHRhcmdldE5hbWVzLmFkZChsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSlcbiAgfVxuXG4gIGZvciAobGV0IHJlY29yZEluZGV4ID0gMDsgcmVjb3JkSW5kZXggPCByZWNvcmRzLmxlbmd0aDsgcmVjb3JkSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbcmVjb3JkSW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24ocmVjb3JkPy5sb2NhdGlvbiwgbW9kdWxlTG9jYXRpb24pXG4gICAgY29uc3QgcmVjb3JkS2V5cyA9IHJlY29yZCAmJiB0eXBlb2YgcmVjb3JkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmVjb3JkKVxuICAgICAgPyBPYmplY3Qua2V5cyhyZWNvcmQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgICAgOiBcIlwiXG5cbiAgICBpZiAoIXJlY29yZCB8fCB0eXBlb2YgcmVjb3JkICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyZWNvcmQpIHx8IHJlY29yZC5raW5kICE9IFwiUmVjb3JkRGVjbGFyYXRpb25cIiB8fFxuICAgICAgIVtcImZpZWxkcyxpZCxraW5kLGxvY2F0aW9uLG5hbWVcIiwgXCJmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixuYW1lLHR5cGVQYXJhbWV0ZXJzXCJdLmluY2x1ZGVzKHJlY29yZEtleXMpIHx8ICFpc0RlbnNlQXJyYXkocmVjb3JkLmZpZWxkcykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVjb3JkIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihyZWNvcmQubG9jYXRpb24sIGxhbmd1YWdlLCBcInJlY29yZCBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCByZWNvcmQubmFtZSwgcmVjb3JkLmxvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgcmVjb3JkLmlkICE9IFwic3RyaW5nXCIgfHwgIW5ldyBSZWdFeHAoYF4oPzpbYS16XVthLXowLTkuXy1dKiMpP3JlY29yZDoke3JlY29yZEluZGV4fSRgLCBcInVcIikudGVzdChyZWNvcmQuaWQpIHx8XG4gICAgICBkZWNsYXJhdGlvbklkcy5oYXMocmVjb3JkLmlkKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCByZWNvcmQubG9jYXRpb24pXG4gICAgfVxuICAgIGRlY2xhcmF0aW9uSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhyZWNvcmQsIGxhbmd1YWdlKVxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gcmVjb3JkLm5hbWUudG9Mb3dlckNhc2UoKSA6IHJlY29yZC5uYW1lXG5cbiAgICBpZiAodGFyZ2V0TmFtZXMuaGFzKHRhcmdldE5hbWUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZWNvcmQgZGVjbGFyYXRpb24gY29sbGlzaW9uICcke3JlY29yZC5uYW1lfSdgLCByZWNvcmQubG9jYXRpb24pXG4gICAgdGFyZ2V0TmFtZXMuYWRkKHRhcmdldE5hbWUpXG4gICAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCByZWNvcmQuZmllbGRzLmxlbmd0aDsgZmllbGRJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHJlY29yZC5maWVsZHNbZmllbGRJbmRleF1cbiAgICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZmllbGQ/LmxvY2F0aW9uLCByZWNvcmQubG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZEtleXMgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmaWVsZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhmaWVsZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgICAgIDogXCJcIlxuXG4gICAgICBpZiAoIWZpZWxkIHx8IHR5cGVvZiBmaWVsZCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZmllbGQpIHx8IGZpZWxkLmtpbmQgIT0gXCJSZWNvcmRGaWVsZFwiIHx8XG4gICAgICAgIGZpZWxkS2V5cyAhPSBcImlkLGtpbmQsbG9jYXRpb24sbmFtZSx0eXBlXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWNvcmQgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGZpZWxkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJyZWNvcmQgZmllbGQgbG9jYXRpb25cIiwgcmVjb3JkLmxvY2F0aW9uKVxuICAgICAgaWYgKGZpZWxkLmlkICE9IGAke3JlY29yZC5pZH06ZmllbGQ6JHtmaWVsZEluZGV4fWApIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIHJlY29yZCBmaWVsZCBpZGVudGl0eVwiLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgZmllbGQubmFtZSwgXCJyZWNvcmQgZmllbGRcIiwgZmllbGQubG9jYXRpb24pXG4gICAgICBjb25zdCBjb2xsaXNpb24gPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiAmJiBbXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiLCBcIl9fcHJvdG9fX1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBbXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiLCBcIl9fcHJvdG9fX1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcInBocFwiICYmIGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiX19cIikgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgW1wiaW5pdGlhbGl6ZVwiLCBcImZyZWV6ZVwiLCBcInNlbmRcIiwgXCJwdWJsaWNfc2VuZFwiLCBcIm1ldGhvZFwiLCBcInNpbmdsZXRvbl9jbGFzc1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzLmhhcyhgJHtmaWVsZC5uYW1lfSgpYClcblxuICAgICAgaWYgKGNvbGxpc2lvbikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVjb3JkIGZpZWxkIGNvbGxpc2lvbiAnJHtmaWVsZC5uYW1lfSdgLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpIDogZmllbGQubmFtZVxuXG4gICAgICBpZiAoZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSB0YXJnZXQgcmVjb3JkIGZpZWxkICcke2ZpZWxkLm5hbWV9J2AsIGZpZWxkLmxvY2F0aW9uKVxuICAgICAgZmllbGROYW1lcy5hZGQobm9ybWFsaXplZClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGV4YWN0IHRhcmdldC12aXNpYmxlIHNoYXBlIG9mIGV2ZXJ5IHJlZmVyZW5jZSBjbGFzcyBiZWZvcmUgb3V0cHV0IGFsbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25bXX0gY2xhc3NlcyAtIENhbmRpZGF0ZSBjbGFzc2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbltdfSByZWNvcmRzIC0gRXhpc3RpbmcgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSBlcnJvcnMgLSBFeGlzdGluZyB0eXBlZCBlcnJvcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRXhpc3RpbmcgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbW9kdWxlTG9jYXRpb24gLSBGYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW5jZUNsYXNzVGFyZ2V0cyhjbGFzc2VzLCByZWNvcmRzLCBlcnJvcnMsIGZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZUxvY2F0aW9uKSB7XG4gIGNvbnN0IHRhcmdldE5hbWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBbLi4ucmVjb3JkcywgLi4uZXJyb3JzLCAuLi5mdW5jdGlvbnNdKSB7XG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSkgY29udGludWVcbiAgICBjb25zdCBuYW1lID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwibmFtZVwiKVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9IFwic3RyaW5nXCIpIGNvbnRpbnVlXG4gICAgdGFyZ2V0TmFtZXMuYWRkKGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lKVxuICB9XG5cbiAgZm9yIChsZXQgY2xhc3NJbmRleCA9IDA7IGNsYXNzSW5kZXggPCBjbGFzc2VzLmxlbmd0aDsgY2xhc3NJbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjbGFzc2VzW2NsYXNzSW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZGVjbGFyYXRpb24/LmxvY2F0aW9uLCBtb2R1bGVMb2NhdGlvbilcbiAgICBjb25zdCBrZXlzID0gZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IE9iamVjdC5rZXlzKGRlY2xhcmF0aW9uKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IGRlY2xhcmF0aW9uLmtpbmQgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgfHxcbiAgICAgICFbXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWVcIiwgXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWUsb3duZXJzaGlwXCJdLmluY2x1ZGVzKGtleXMpIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLmZpZWxkcykgfHwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aCA9PSAwIHx8ICFpc0RlbnNlQXJyYXkoZGVjbGFyYXRpb24ubWV0aG9kcykgfHxcbiAgICAgICFuZXcgUmVnRXhwKGBeKD86W2Etel1bYS16MC05Ll8tXSojKT9jbGFzczoke2NsYXNzSW5kZXh9JGAsIFwidVwiKS50ZXN0KFN0cmluZyhkZWNsYXJhdGlvbi5pZCkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLm93bmVyc2hpcCAhPT0gdW5kZWZpbmVkICYmIGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCAhPSBcIm9yZGluYXJ5XCIgJiZcbiAgICAgIChkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgIT0gXCJvd25lZFJlc291cmNlXCIgfHwgdHlwZW9mIGRlY2xhcmF0aW9uLm93bmVyc2hpcC5maWVsZElkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIHR5cGVvZiBkZWNsYXJhdGlvbi5vd25lcnNoaXAucmVzb3VyY2VJZCAhPSBcInN0cmluZ1wiKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCByZWZlcmVuY2UgY2xhc3MgcmVzb3VyY2Ugb3duZXJzaGlwXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbkxvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oZGVjbGFyYXRpb24ubG9jYXRpb24sIGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcblxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAodGFyZ2V0TmFtZXMuaGFzKHRhcmdldE5hbWUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZWZlcmVuY2UgY2xhc3MgY29sbGlzaW9uICcke2RlY2xhcmF0aW9uLm5hbWV9J2AsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgdGFyZ2V0TmFtZXMuYWRkKHRhcmdldE5hbWUpXG4gICAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoOyBmaWVsZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2ZpZWxkSW5kZXhdXG4gICAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGZpZWxkPy5sb2NhdGlvbiwgbG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZEtleXMgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmaWVsZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhmaWVsZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgICBpZiAoIWZpZWxkIHx8IGZpZWxkLmtpbmQgIT0gXCJQcml2YXRlRmllbGRcIiB8fCBmaWVsZEtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiIHx8XG4gICAgICAgIGZpZWxkLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTpmaWVsZDoke2ZpZWxkSW5kZXh9YCkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHByaXZhdGUgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4YWN0RmllbGRMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGZpZWxkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJwcml2YXRlIGZpZWxkIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG5cbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgZmllbGQubmFtZSwgXCJwcml2YXRlIGZpZWxkXCIsIGV4YWN0RmllbGRMb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpIDogZmllbGQubmFtZVxuXG4gICAgICBpZiAoZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSB0YXJnZXQgcHJpdmF0ZSBmaWVsZCAnJHtmaWVsZC5uYW1lfSdgLCBleGFjdEZpZWxkTG9jYXRpb24pXG4gICAgICBmaWVsZE5hbWVzLmFkZChub3JtYWxpemVkKVxuICAgIH1cbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgY29uc3RydWN0b3JMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihjb25zdHJ1Y3Rvcj8ubG9jYXRpb24sIGxvY2F0aW9uKVxuICAgIGNvbnN0IGNvbnN0cnVjdG9yS2V5cyA9IGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3RvciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yKVxuICAgICAgPyBPYmplY3Qua2V5cyhjb25zdHJ1Y3RvcikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFjb25zdHJ1Y3RvciB8fCBjb25zdHJ1Y3Rvci5raW5kICE9IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiIHx8XG4gICAgICAhW1wiYm9keSxpZCxraW5kLGxvY2F0aW9uLHBhcmFtZXRlcnNcIiwgXCJib2R5LGVmZmVjdHMsZmFpbHVyZUlkcyxpZCxraW5kLGxvY2F0aW9uLHBhcmFtZXRlcnNcIl0uaW5jbHVkZXMoY29uc3RydWN0b3JLZXlzKSB8fFxuICAgICAgY29uc3RydWN0b3IuaWQgIT0gYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCB8fCAhaXNEZW5zZUFycmF5KGNvbnN0cnVjdG9yLnBhcmFtZXRlcnMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uXCIsIGNvbnN0cnVjdG9yTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4YWN0Q29uc3RydWN0b3JMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGNvbnN0cnVjdG9yLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuXG4gICAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMoY29uc3RydWN0b3IucGFyYW1ldGVycywgXCJjb25zdHJ1Y3RvclwiLCBsYW5ndWFnZSwgZXhhY3RDb25zdHJ1Y3RvckxvY2F0aW9uKVxuICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGxldCBtZXRob2RJbmRleCA9IDA7IG1ldGhvZEluZGV4IDwgZGVjbGFyYXRpb24ubWV0aG9kcy5sZW5ndGg7IG1ldGhvZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbbWV0aG9kSW5kZXhdXG4gICAgICBjb25zdCBtZXRob2RMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihtZXRob2Q/LmxvY2F0aW9uLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IG1ldGhvZEtleXMgPSBtZXRob2QgJiYgdHlwZW9mIG1ldGhvZCA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG1ldGhvZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhtZXRob2QpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgICAgaWYgKCFtZXRob2QgfHwgbWV0aG9kLmtpbmQgIT0gXCJNZXRob2REZWNsYXJhdGlvblwiIHx8XG4gICAgICAgICFbXCJib2R5LGlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIixcbiAgICAgICAgICBcImJvZHksZWZmZWN0cyxmYWlsdXJlSWRzLGlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIl0uaW5jbHVkZXMobWV0aG9kS2V5cykgfHxcbiAgICAgICAgbWV0aG9kLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHttZXRob2RJbmRleH1gIHx8ICFpc0RlbnNlQXJyYXkobWV0aG9kLnBhcmFtZXRlcnMpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbWV0aG9kIGRlY2xhcmF0aW9uXCIsIG1ldGhvZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgY29uc3QgZXhhY3RNZXRob2RMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG1ldGhvZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwibWV0aG9kIGRlY2xhcmF0aW9uIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgICBjb25zdCBsaWZlY3ljbGVOYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiX19jb25zdHJ1Y3RcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJpbml0aWFsaXplXCIgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiY29uc3RydWN0b3JcIiA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAobWV0aG9kLm5hbWUgPT0gbGlmZWN5Y2xlTmFtZSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbGlmZWN5Y2xlIG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2VydmVkSG9vayA9IGxhbmd1YWdlID09IFwicGhwXCIgPyAvXl9fL3UudGVzdChtZXRob2QubmFtZSkgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IHJ1YnlSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIHx8XG4gICAgICAgICAgdHlwZW9mIG1ldGhvZC5uYW1lID09IFwic3RyaW5nXCIgJiYgbWV0aG9kLm5hbWUuZW5kc1dpdGgoXCI9XCIpIDpcbiAgICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IGphdmFSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIDpcbiAgICAgICAgICAgIGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gamF2YXNjcmlwdFJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhtZXRob2QubmFtZSkgOiBmYWxzZVxuXG4gICAgICBpZiAocmVzZXJ2ZWRIb29rKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbWV0aG9kICcke21ldGhvZC5uYW1lfSdgLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLm5hbWUgIT0gXCJzdHJpbmdcIiB8fCAhL15bQS1aYS16X11bQS1aYS16MC05X10qWyE/PV0/JC91LnRlc3QobWV0aG9kLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWV0aG9kIGlkZW50aWZpZXIgJyR7U3RyaW5nKG1ldGhvZC5uYW1lKX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgbWV0aG9kLm5hbWUsIFwibWV0aG9kXCIsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG1ldGhvZC5uYW1lLnRvTG93ZXJDYXNlKCkgOiBtZXRob2QubmFtZVxuXG4gICAgICBpZiAobWV0aG9kTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgdGFyZ2V0IG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBmaWVsZE5hbWVzLmhhcyhub3JtYWxpemVkKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgY2xhc3MgbWVtYmVyIGNvbGxpc2lvbiAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIG1ldGhvZE5hbWVzLmFkZChub3JtYWxpemVkKVxuICAgICAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMobWV0aG9kLnBhcmFtZXRlcnMsIFwibWV0aG9kXCIsIGxhbmd1YWdlLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgcmVmZXJlbmNlIGNhbGxhYmxlJ3MgZXhhY3QgcGFyYW1ldGVyIHNoYXBlIGFuZCB0YXJnZXQgbmFtZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gQ2FuZGlkYXRlIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1wiY29uc3RydWN0b3JcIiB8IFwibWV0aG9kXCJ9IG93bmVyIC0gQ2FsbGFibGUga2luZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBGYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW5jZUNsYXNzUGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBvd25lciwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24pIHtcbiAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKHBhcmFtZXRlcj8ubG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3Qga2V5cyA9IHBhcmFtZXRlciAmJiB0eXBlb2YgcGFyYW1ldGVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1ldGVyKVxuICAgICAgPyBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghcGFyYW1ldGVyIHx8IHBhcmFtZXRlci5raW5kICE9IFwiUGFyYW1ldGVyXCIgfHwga2V5cyAhPSBcImtpbmQsbG9jYXRpb24sbmFtZSx0eXBlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCAke293bmVyfSBwYXJhbWV0ZXJgLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZXhhY3RMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKHBhcmFtZXRlci5sb2NhdGlvbiwgbGFuZ3VhZ2UsIGAke293bmVyfSBwYXJhbWV0ZXIgbG9jYXRpb25gLCBvd25lckxvY2F0aW9uKVxuXG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgcGFyYW1ldGVyLm5hbWUsIFwicGFyYW1ldGVyXCIsIGV4YWN0TG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIGRlY2xhcmF0aW9uJ3MgdGFyZ2V0LXZpc2libGUgdHlwZS1wYXJhbWV0ZXIgbmFtZXMgYW5kIGlkZW50aXRpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBPd25lci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVR5cGVQYXJhbWV0ZXJUYXJnZXRzKGRlY2xhcmF0aW9uLCBsYW5ndWFnZSkge1xuICBpZiAoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuXG4gIGlmICghaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zXCIsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldCgpXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgdHlwZS92YWx1ZSBzcGVsbGluZyBmb3IgdGFyZ2V0IGNvbGxpc2lvbiBjaGVja3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ2FuZGlkYXRlIHRhcmdldCBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUYXJnZXQgY29tcGFyaXNvbiBrZXkuXG4gICAqL1xuICBjb25zdCB0YXJnZXRLZXkgPSAobmFtZSkgPT4gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWVcbiAgY29uc3QgdmFsdWVOYW1lcyA9IG5ldyBTZXQoW1xuICAgIGRlY2xhcmF0aW9uLm5hbWUsXG4gICAgLi4uKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzIDogZGVjbGFyYXRpb24uZmllbGRzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSlcbiAgXS5tYXAodGFyZ2V0S2V5KSlcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3Qga2V5cyA9IHBhcmFtZXRlciAmJiB0eXBlb2YgcGFyYW1ldGVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1ldGVyKVxuICAgICAgPyBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghcGFyYW1ldGVyIHx8IHBhcmFtZXRlci5raW5kICE9IFwiVHlwZVBhcmFtZXRlclwiIHx8IGtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWVcIiB8fFxuICAgICAgcGFyYW1ldGVyLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTp0eXBlOiR7aW5kZXh9YCkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvblwiLCBwYXJhbWV0ZXI/LmxvY2F0aW9uID8/IGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihwYXJhbWV0ZXIubG9jYXRpb24sIGxhbmd1YWdlLCBcInR5cGUgcGFyYW1ldGVyIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRhcmdldEtleShwYXJhbWV0ZXIubmFtZSlcblxuICAgIGlmIChuYW1lcy5oYXMobm9ybWFsaXplZCkgfHwgdmFsdWVOYW1lcy5oYXMobm9ybWFsaXplZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHRhcmdldCB0eXBlIHBhcmFtZXRlciBjb2xsaXNpb24gJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlci5sb2NhdGlvbilcbiAgICB9XG4gICAgbmFtZXMuYWRkKG5vcm1hbGl6ZWQpXG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlY3RzIFRhc2sgMDEyIElSIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCByZWFjaGVzIG9sZGVyIGZlYXR1cmUgY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGdlbmVyaWMgZGVjbGFyYXRpb25zIGFyZSBwcmVzZW50LlxuICovXG5mdW5jdGlvbiBtb2R1bGVIYXNUeXBlUGFyYW1ldGVycyhtb2R1bGUpIHtcbiAgcmV0dXJuIFsuLi5tb2R1bGUucmVjb3JkcyA/PyBbXSwgLi4ubW9kdWxlLmZ1bmN0aW9uc10uc29tZSgoZGVjbGFyYXRpb24pID0+XG4gICAgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbj8udHlwZVBhcmFtZXRlcnMpICYmIGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAwOCBzdGF0ZW1lbnRzIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCByZWFjaGVzIGNvbGxlY3Rpb24tdHlwZSBjaGVja3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEl0ZXJhdGlvblN0YXRlbWVudHMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihkZWNsYXJhdGlvbiAmJiB0eXBlb2YgZGVjbGFyYXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbilcbiAgICAgID8gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKVxuICAgICAgOiB1bmRlZmluZWQsIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrSXRlcmF0aW9uKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMzIgSVIgYmVmb3JlIGEgbm9uLWNvaG9ydCBiYWNrZW5kIGFsbG9jYXRlcyBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdENvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChkZWNsYXJhdGlvbiAmJiB0eXBlb2YgZGVjbGFyYXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbilcbiAgICAgID8gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKVxuICAgICAgOiB1bmRlZmluZWQsIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBGaW5kcyBhIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3Agd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBjb250YWluZXJzLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIFZpc2l0ZWQgY29udGFpbmVycy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoYmxvY2ssIGxhbmd1YWdlLCBzZWVuID0gbmV3IFNldCgpKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgc2Vlbi5oYXMoYmxvY2spKSByZXR1cm5cbiAgc2Vlbi5hZGQoYmxvY2spXG4gIGNvbnN0IHN0YXRlbWVudHMgPSBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXRlbWVudHMpKSByZXR1cm5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgY29uc3Qga2luZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImxvY2F0aW9uXCIpLCBSZWZsZWN0LmdldChibG9jaywgXCJsb2NhdGlvblwiKSlcblxuICAgIGlmIChraW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMyIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3BcIiwgbG9jYXRpb24pXG4gICAgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJhbHRlcm5hdGVcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoa2luZCkpKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJoYW5kbGVyc1wiKSA/PyBbXSkgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KGhhbmRsZXIsIFwiY2F0Y2hCb2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZmluYWxseUJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGEgVGFzayAwMDggbm9kZSB3aXRob3V0IGRlc2NlbmRpbmcgdGhyb3VnaCBtYWxmb3JtZWQgb3IgY3ljbGljIGNvbnRhaW5lcnMuXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gVmlzaXRlZCBjb250YWluZXJzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEJsb2NrSXRlcmF0aW9uKGJsb2NrLCBsYW5ndWFnZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpXG5cbiAgICBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJCcmVha1N0YXRlbWVudFwiLCBcIkNvbnRpbnVlU3RhdGVtZW50XCJdLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDggb3JkZXJlZCBsaXN0IGl0ZXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiY29uc2VxdWVudFwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJoYW5kbGVyc1wiKSA/PyBbXSkgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoaGFuZGxlciwgXCJjYXRjaEJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImZpbmFsbHlCb2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWplY3RzIFRhc2sgMDA3IG9wdGlvbmFsIHR5cGVzIGJlZm9yZSBhIG5vbi1jb2hvcnQgZW1pdHRlciBhbGxvY2F0ZXMgb3V0cHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RPcHRpb25hbFR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSkgY29udGludWVcbiAgICBjb25zdCBsb2NhdGlvbiA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImxvY2F0aW9uXCIpID8/IG1vZHVsZS5sb2NhdGlvblxuXG4gICAgaWYgKGNvbnRhaW5zT3B0aW9uYWxUeXBlKFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInJldHVyblR5cGVcIikpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgcmV0dXJuIHR5cGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIEFycmF5LmlzQXJyYXkoUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicGFyYW1ldGVyc1wiKSkgPyBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJwYXJhbWV0ZXJzXCIpIDogW10pIHtcbiAgICAgIGlmIChjb250YWluc09wdGlvbmFsVHlwZShwYXJhbWV0ZXI/LnR5cGUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCBwYXJhbWV0ZXIgdHlwZVwiLCBwYXJhbWV0ZXIubG9jYXRpb24gPz8gbG9jYXRpb24pXG4gICAgICB9XG4gICAgfVxuICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJib2R5XCIpLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UpXG59XG5cbi8qKlxuICogUmVqZWN0cyBvcHRpb25hbCBsb2NhbCB0eXBlcyByZWN1cnNpdmVseSBpbiBvbmUgY2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoYmxvY2ssIGxhbmd1YWdlKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgIUFycmF5LmlzQXJyYXkoUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKSkpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgY29udGFpbnNPcHRpb25hbFR5cGUoc3RhdGVtZW50LnR5cGUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgbG9jYWwgdHlwZVwiLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgbGFuZ3VhZ2UpXG4gICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGxhbmd1YWdlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIGlmIChjb250YWluc09wdGlvbmFsVHlwZShzdGF0ZW1lbnQudmFsdWVCaW5kaW5nPy50eXBlKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgaXRlcmF0aW9uIGJpbmRpbmcgdHlwZVwiLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uID8/IHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2Ygc3RhdGVtZW50LmhhbmRsZXJzID8/IFtdKSByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoaGFuZGxlci5jYXRjaEJvZHksIGxhbmd1YWdlKVxuICAgICAgaWYgKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5maW5hbGx5Qm9keSwgbGFuZ3VhZ2UpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBib3VuZGVkIHJlY3Vyc2l2ZSBzZW1hbnRpYyB0eXBlIGZvciBhbiBvcHRpb25hbCBub2RlLlxuICogQHBhcmFtIHt1bmtub3dufSB0eXBlIC0gQ2FuZGlkYXRlIHR5cGUuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYW4gb3B0aW9uYWwgdHlwZSBvY2N1cnMuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zT3B0aW9uYWxUeXBlKHR5cGUsIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh0eXBlKSB8fCBzZWVuLmhhcyh0eXBlKSkgcmV0dXJuIGZhbHNlXG4gIHNlZW4uYWRkKHR5cGUpXG4gIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldCh0eXBlLCBcImtpbmRcIilcblxuICBpZiAoa2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSByZXR1cm4gdHJ1ZVxuICBpZiAoa2luZCA9PSBcIkxpc3RUeXBlXCIpIHJldHVybiBjb250YWluc09wdGlvbmFsVHlwZShSZWZsZWN0LmdldCh0eXBlLCBcImVsZW1lbnRUeXBlXCIpLCBzZWVuKVxuICBpZiAoa2luZCA9PSBcIk1hcFR5cGVcIiB8fCBraW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikgcmV0dXJuIGNvbnRhaW5zT3B0aW9uYWxUeXBlKFJlZmxlY3QuZ2V0KHR5cGUsIFwia2V5VHlwZVwiKSwgc2VlbikgfHxcbiAgICBjb250YWluc09wdGlvbmFsVHlwZShSZWZsZWN0LmdldCh0eXBlLCBcInZhbHVlVHlwZVwiKSwgc2VlbilcblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBSZWplY3RzIFRhc2sgMDA2IHR5cGVzIGJlZm9yZSBhIHJlZ2lzdGVyZWQgbm9uLWNvaG9ydCBlbWl0dGVyIGNhbiBhbGxvY2F0ZSBhbiBhcnRpZmFjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RDb2xsZWN0aW9uVHlwZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IHR5cGVvZiBkZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pKSBjb250aW51ZVxuICAgIGNvbnN0IGxvY2F0aW9uID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwibG9jYXRpb25cIikgPz8gbW9kdWxlLmxvY2F0aW9uXG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInJldHVyblR5cGVcIilcblxuICAgIGlmIChpc0NvbGxlY3Rpb25UeXBlKHJldHVyblR5cGUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb24gcmV0dXJuIHR5cGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJwYXJhbWV0ZXJzXCIpXG5cbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpID8gcGFyYW1ldGVycyA6IFtdKSB7XG4gICAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZShwYXJhbWV0ZXI/LnR5cGUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb24gcGFyYW1ldGVyIHR5cGVcIiwgcGFyYW1ldGVyLmxvY2F0aW9uID8/IGxvY2F0aW9uKVxuICAgIH1cbiAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJib2R5XCIpLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIGNvbGxlY3Rpb24gbG9jYWwgdHlwZXMgcmVjdXJzaXZlbHkgaW4gb25lIGJsb2NrLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBzZW1hbnRpYyBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhibG9jaywgbGFuZ3VhZ2UpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCAhQXJyYXkuaXNBcnJheShSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIikpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBpc0NvbGxlY3Rpb25UeXBlKHN0YXRlbWVudC50eXBlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uIGxvY2FsIHR5cGVcIiwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgbGFuZ3VhZ2UpXG4gICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmFsdGVybmF0ZSwgbGFuZ3VhZ2UpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgaWYgKGlzQ29sbGVjdGlvblR5cGUoc3RhdGVtZW50LnZhbHVlQmluZGluZz8udHlwZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uIGl0ZXJhdGlvbiBiaW5kaW5nIHR5cGVcIiwgc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvbiA/PyBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgICB9XG4gICAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoaGFuZGxlci5jYXRjaEJvZHksIGxhbmd1YWdlKVxuICAgICAgaWYgKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmZpbmFsbHlCb2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgYSBwb3NzaWJsZSByZWN1cnNpdmUgY29sbGVjdGlvbiB0eXBlIHdpdGhvdXQgdHJhdmVyc2luZyBtYWxmb3JtZWQgY2hpbGRyZW4uXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGUgLSBDYW5kaWRhdGUgdHlwZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBvdXRlciB0eXBlIGlzIGEgY29sbGVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gaXNDb2xsZWN0aW9uVHlwZSh0eXBlKSB7XG4gIHJldHVybiBCb29sZWFuKHR5cGUgJiYgdHlwZW9mIHR5cGUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKSAmJlxuICAgIChbXCJMaXN0VHlwZVwiLCBcIk1hcFR5cGVcIiwgXCJPcmRlcmVkTWFwVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQodHlwZSwgXCJraW5kXCIpKSkpKVxufVxuXG4vKipcbiAqIFJlamVjdHMgc2VtYW50aWMgbmFtZXMgdGhhdCB3b3VsZCBjYXB0dXJlIHN5bnRheCBvd25lZCBieSBvbmUgYmFja2VuZCBlbWl0dGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIHZhbGlkYXRlUmVjb3JkQ29uc3RydWN0b3JOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBjb25zdCBuZWVkc05hdGl2ZU1hcCA9IFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSAmJlxuICAgIChtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJNYXBMaXRlcmFsXCIpIHx8IG1vZHVsZUNvbnRhaW5zRXhwcmVzc2lvbktpbmQobW9kdWxlLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpKVxuICBjb25zdCBuZWVkc1BocENvdW50ID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJiBtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIilcbiAgY29uc3QgamF2YXNjcmlwdE93bmVkTmFtZXMgPSBuZXcgU2V0KFtcImNvbnNvbGVcIiwgLi4uKG5lZWRzTmF0aXZlTWFwID8gW1wiTWFwXCJdIDogW10pXSlcbiAgY29uc3Qgb3duZWRFbnRyeU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJmbXRcIiwgXCJpbnQ2NFwiLCBcImJvb2xcIiwgXCJzdHJpbmdcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImNzaGFycFwiID8gbmV3IFNldChbXCJTeXN0ZW1cIl0pIDogbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBuZXcgU2V0KFtcImFyZ3NcIiwgXCJTeXN0ZW1cIl0pIDpcbiAgICBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBqYXZhc2NyaXB0T3duZWROYW1lcyA6IG5ldyBTZXQoKVxuICBjb25zdCBvd25lZFByaW50UmVjZWl2ZXJOYW1lcyA9IGxhbmd1YWdlID09IFwiZ29cIiA/IG5ldyBTZXQoW1wiZm10XCIsIFwiaW50NjRcIiwgXCJib29sXCIsIFwic3RyaW5nXCIsIFwidHJ1ZVwiLCBcImZhbHNlXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wiU3lzdGVtXCJdKSA6XG4gICAgW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpID8gamF2YXNjcmlwdE93bmVkTmFtZXMgOiBuZXcgU2V0KClcbiAgY29uc3Qgb3duZWRDYWxsYWJsZU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJtYWluXCIsIFwiaW5pdFwiLCBcImZtdFwiLCBcImludDY0XCIsIFwiYm9vbFwiLCBcInN0cmluZ1wiLCBcInRydWVcIiwgXCJmYWxzZVwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwiY3NoYXJwXCIgPyBuZXcgU2V0KFtcbiAgICBcIkVxdWFsc1wiLCBcIkZpbmFsaXplXCIsIFwiR2V0SGFzaENvZGVcIiwgXCJHZXRUeXBlXCIsIFwiTWFpblwiLCBcIk1lbWJlcndpc2VDbG9uZVwiLCBcIlByb2dyYW1cIiwgXCJSZWZlcmVuY2VFcXVhbHNcIiwgXCJTeXN0ZW1cIiwgXCJUb1N0cmluZ1wiXG4gIF0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wibWFpblwiXSkgOlxuICAgIFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSA/IGphdmFzY3JpcHRPd25lZE5hbWVzIDpcbiAgICBuZWVkc1BocENvdW50ID8gbmV3IFNldChbXCJjb3VudFwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJwdXRzXCIsIFwic2VuZFwiLCBcInB1YmxpY19zZW5kXCIsIFwiX19zZW5kX19cIl0pIDogbmV3IFNldCgpXG4gIC8qKlxuICAgKiBQcm90ZWN0cyBwcmludC9mYWN0b3J5IHNwZWxsaW5ncyBpbnNpZGUgb25lIGNhbGxhYmxlIHNjb3BlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gQ2FsbGFibGUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYm9keSAtIENhbGxhYmxlIGJvZHkuXG4gICAqIEBwYXJhbSB7XCJmdW5jdGlvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJtZXRob2RcIn0gb3duZXIgLSBEaWFnbm9zdGljIG93bmVyLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVDYWxsYWJsZUJpbmRpbmdzID0gKHBhcmFtZXRlcnMsIGJvZHksIG93bmVyKSA9PiB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuICAgICAgaWYgKG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHBhcmFtZXRlci5sb2NhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhib2R5KSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10pIHtcbiAgICAgICAgICBpZiAob3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke2JpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBiaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkge1xuICAgICAgICAgIGlmIChvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMoaGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGNhdGNoIGJpbmRpbmcgJyR7aGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgICAgICBoYW5kbGVyLmNhdGNoQmluZGluZy5sb2NhdGlvbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbGxTdGF0ZW1lbnRzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHkpKSB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIG93bmVkRW50cnlOYW1lcy5oYXMoc3RhdGVtZW50Lm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlbnRyeSBsb2NhbCAnJHtzdGF0ZW1lbnQubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiAmJiBvd25lZEVudHJ5TmFtZXMuaGFzKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGl0ZXJhdGlvbiBiaW5kaW5nICcke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBbc3RhdGVtZW50LmtleUJpbmRpbmcsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmddKSB7XG4gICAgICAgIGlmIChvd25lZEVudHJ5TmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlbnRyeSBpdGVyYXRpb24gYmluZGluZyAnJHtiaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgYmluZGluZy5sb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkge1xuICAgICAgICBpZiAob3duZWRFbnRyeU5hbWVzLmhhcyhoYW5kbGVyLmNhdGNoQmluZGluZy5uYW1lKSkge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGNhdGNoIGJpbmRpbmcgJyR7aGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgICAgaGFuZGxlci5jYXRjaEJpbmRpbmcubG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAob3duZWRDYWxsYWJsZU5hbWVzLmhhcyh0YXJnZXROYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbikpXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZW1pdHRlZEphdmFGdW5jdGlvblNpZ25hdHVyZShkZWNsYXJhdGlvbilcblxuICAgICAgaWYgKHNpZ25hdHVyZSAmJiBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzLmhhcyhzaWduYXR1cmUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBgZnVuY3Rpb24gJyR7c2lnbmF0dXJlfScgY29uZmxpY3RzIHdpdGggYW4gaW5oZXJpdGVkIGphdmEubGFuZy5PYmplY3QgaW5zdGFuY2UgbWV0aG9kYCxcbiAgICAgICAgICBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbilcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MoZGVjbGFyYXRpb24ucGFyYW1ldGVycywgZGVjbGFyYXRpb24uYm9keSwgXCJmdW5jdGlvblwiKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MoZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycywgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgXCJjb25zdHJ1Y3RvclwiKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHZhbGlkYXRlQ2FsbGFibGVCaW5kaW5ncyhtZXRob2QucGFyYW1ldGVycywgbWV0aG9kLmJvZHksIFwibWV0aG9kXCIpXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB2YWxpZGF0ZUphdmFVdGlsRmFjdG9yeU5hbWVzKG1vZHVsZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIEphdmFTY3JpcHQtZmFtaWx5IGxleGljYWwgYmluZGluZ3MgdGhhdCBjYW4gY2FwdHVyZSBlbWl0dGVkIGJhcmUgcmVjb3JkIGNvbnN0cnVjdG9yIG5hbWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkLXNoYXBlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlY29yZENvbnN0cnVjdG9yTmFtZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIgJiYgbGFuZ3VhZ2UgIT0gXCJ0eXBlc2NyaXB0XCIpIHJldHVyblxuICBjb25zdCByZWNvcmROYW1lcyA9IG5ldyBTZXQoW1xuICAgIC4uLihtb2R1bGUucmVjb3JkcyA/PyBbXSkubWFwKChyZWNvcmQpID0+IHJlY29yZC5uYW1lKSxcbiAgICAuLi4obW9kdWxlLmNsYXNzZXMgPz8gW10pLm1hcCgoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLm5hbWUpLFxuICAgIC4uLihtb2R1bGUuZXJyb3JzID8/IFtdKS5tYXAoKGVycm9yKSA9PiBlcnJvci5uYW1lKVxuICBdKVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZGVjbGFyYXRpb25zIG5lc3RlZCBiZW5lYXRoIG9uZSBvd25pbmcgYmxvY2suXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gQmxvY2sgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtcImVudHJ5XCIgfCBcImZ1bmN0aW9uXCIgfCBcImNvbnN0cnVjdG9yXCIgfCBcIm1ldGhvZFwifSBvd25lciAtIE93bmluZyBzY29wZSBraW5kLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQmxvY2tOYW1lcyA9IChibG9jaywgb3duZXIpID0+IHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbGxTdGF0ZW1lbnRzKGJsb2NrKSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIHJlY29yZE5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLCBiaW5kaW5nTmFtZUxvY2F0aW9uKHN0YXRlbWVudCkpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgJiYgcmVjb3JkTmFtZXMuaGFzKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLFxuICAgICAgICAgIGJpbmRpbmdOYW1lTG9jYXRpb24oc3RhdGVtZW50LnZhbHVlQmluZGluZylcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBbc3RhdGVtZW50LmtleUJpbmRpbmcsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmddKSB7XG4gICAgICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhiaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtiaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKGJpbmRpbmcpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgICAgY29uc3QgY2FwdHVyZWQgPSAoc3RhdGVtZW50LmhhbmRsZXJzID8/IFtdKS5maW5kKChoYW5kbGVyKSA9PiByZWNvcmROYW1lcy5oYXMoaGFuZGxlci5jYXRjaEJpbmRpbmcubmFtZSkpXG5cbiAgICAgICAgaWYgKGNhcHR1cmVkKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gY2F0Y2ggYmluZGluZyAnJHtjYXB0dXJlZC5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIG5vbWluYWwgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihjYXB0dXJlZC5jYXRjaEJpbmRpbmcpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCbG9ja05hbWVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiZW50cnlcIilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24ucGFyYW1ldGVycykge1xuICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgcmVjb3JkIGNvbnN0cnVjdG9yYCwgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoZGVjbGFyYXRpb24uYm9keSwgXCJmdW5jdGlvblwiKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAocmVjb3JkTmFtZXMuaGFzKHBhcmFtZXRlci5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JyBjYXB0dXJlcyBub21pbmFsIGNvbnN0cnVjdG9yYCxcbiAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKHBhcmFtZXRlcikpXG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCBcImNvbnN0cnVjdG9yXCIpXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZGVjbGFyYXRpb24ubWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgbWV0aG9kLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtZXRob2QgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgbm9taW5hbCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKHBhcmFtZXRlcikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhtZXRob2QuYm9keSwgXCJtZXRob2RcIilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWplY3RzIGxleGljYWwgYmluZGluZ3MgdGhhdCB3b3VsZCBjYXB0dXJlIEphdmEncyBwYWNrYWdlIHF1YWxpZmllciBpbiBlbWl0dGVkIGNvbGxlY3Rpb24gZmFjdG9yaWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUphdmFVdGlsRmFjdG9yeU5hbWVzKG1vZHVsZSkge1xuICAvKipcbiAgICogV2Fsa3Mgb25lIGxleGljYWwgYmxvY2sgd2hpbGUgcmV0YWluaW5nIG9ubHkgYSBjdXJyZW50bHkgdmlzaWJsZSBjYXB0dXJlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIEJsb2NrIHRvIGluc3BlY3QgaW4gc2VtYW50aWMgb3JkZXIuXG4gICAqIEBwYXJhbSB7e2RldGFpbDogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IHwgdW5kZWZpbmVkfSBpbmhlcml0ZWQgLSBWaXNpYmxlIGNhcHR1cmUuXG4gICAqIEBwYXJhbSB7XCJlbnRyeVwiIHwgXCJmdW5jdGlvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJtZXRob2RcIn0gb3duZXIgLSBPd25pbmcgc2NvcGUga2luZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUJsb2NrTmFtZXMgPSAoYmxvY2ssIGluaGVyaXRlZCwgb3duZXIpID0+IHtcbiAgICBsZXQgY2FwdHVyZSA9IGluaGVyaXRlZFxuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYmxvY2suc3RhdGVtZW50cykge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIHN0YXRlbWVudC5uYW1lID09IFwiamF2YVwiKSB7XG4gICAgICAgIGNhcHR1cmUgPSB7XG4gICAgICAgICAgZGV0YWlsOiBgJHtvd25lcn0gbG9jYWwgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheGAsXG4gICAgICAgICAgbG9jYXRpb246IHN0YXRlbWVudC5sb2NhdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5saXN0IDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5tYXAgOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKGNhcHR1cmUgJiYgZXhwcmVzc2lvbiAmJiAoZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLCBcIkxpc3RMaXRlcmFsXCIpIHx8XG4gICAgICAgIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJNYXBMaXRlcmFsXCIpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3B0aW9uYWxOb25lXCIpIHx8XG4gICAgICAgIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJPcHRpb25hbFNvbWVcIikpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImphdmFcIiwgY2FwdHVyZS5kZXRhaWwsIGNhcHR1cmUubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgY2FwdHVyZSwgb3duZXIpXG4gICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmFsdGVybmF0ZSwgY2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGNhcHR1cmUsIG93bmVyKVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGxvb3BDYXB0dXJlID0gc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lID09IFwiamF2YVwiID8ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uXG4gICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBsb29wQ2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgY29uc3QgY2FwdHVyZWRCaW5kaW5nID0gW3N0YXRlbWVudC5rZXlCaW5kaW5nLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nXS5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgICAgIGNvbnN0IGxvb3BDYXB0dXJlID0gY2FwdHVyZWRCaW5kaW5nID8ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBjYXB0dXJlZEJpbmRpbmcubG9jYXRpb25cbiAgICAgICAgfSA6IGNhcHR1cmVcblxuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGxvb3BDYXB0dXJlLCBvd25lcilcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuYm9keSwgY2FwdHVyZSwgb3duZXIpXG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBzdGF0ZW1lbnQuaGFuZGxlcnMgPz8gW10pIHtcbiAgICAgICAgICBjb25zdCBjYXRjaENhcHR1cmUgPSBoYW5kbGVyLmNhdGNoQmluZGluZy5uYW1lID09IFwiamF2YVwiID8ge1xuICAgICAgICAgICAgZGV0YWlsOiBgJHtvd25lcn0gY2F0Y2ggYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBoYW5kbGVyLmNhdGNoQmluZGluZy5sb2NhdGlvblxuICAgICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoaGFuZGxlci5jYXRjaEJvZHksIGNhdGNoQ2FwdHVyZSwgb3duZXIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5maW5hbGx5Qm9keSwgY2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCbG9ja05hbWVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIHVuZGVmaW5lZCwgXCJlbnRyeVwiKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PSBcImphdmFcIilcbiAgICBjb25zdCBjYXB0dXJlID0gcGFyYW1ldGVyID8ge1xuICAgICAgZGV0YWlsOiBcImZ1bmN0aW9uIHBhcmFtZXRlciAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4XCIsXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyLmxvY2F0aW9uXG4gICAgfSA6IHVuZGVmaW5lZFxuXG4gICAgdmFsaWRhdGVCbG9ja05hbWVzKGRlY2xhcmF0aW9uLmJvZHksIGNhcHR1cmUsIFwiZnVuY3Rpb25cIilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5jbGFzc2VzID8/IFtdKSB7XG4gICAgY29uc3QgY2FsbGFibGVzID0gW1xuICAgICAge2JvZHk6IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHksIG93bmVyOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJjb25zdHJ1Y3RvclwiKSwgcGFyYW1ldGVyczogZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc30sXG4gICAgICAuLi5kZWNsYXJhdGlvbi5tZXRob2RzLm1hcCgobWV0aG9kKSA9PiAoe2JvZHk6IG1ldGhvZC5ib2R5LCBvd25lcjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwibWV0aG9kXCIpLCBwYXJhbWV0ZXJzOiBtZXRob2QucGFyYW1ldGVyc30pKVxuICAgIF1cblxuICAgIGZvciAoY29uc3QgY2FsbGFibGUgb2YgY2FsbGFibGVzKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBjYWxsYWJsZS5wYXJhbWV0ZXJzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PSBcImphdmFcIilcbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBwYXJhbWV0ZXIgPyB7XG4gICAgICAgIGRldGFpbDogYCR7Y2FsbGFibGUub3duZXJ9IHBhcmFtZXRlciAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgbG9jYXRpb246IHBhcmFtZXRlci5sb2NhdGlvblxuICAgICAgfSA6IHVuZGVmaW5lZFxuXG4gICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoY2FsbGFibGUuYm9keSwgY2FwdHVyZSwgY2FsbGFibGUub3duZXIpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgbW9kdWxlIGNvbnRhaW5zIGFuIGV4cHJlc3Npb24ga2luZCB0aGF0IHJlcXVpcmVzIHRhcmdldCBydW50aW1lIHNjYWZmb2xkaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkLXNoYXBlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltcImtpbmRcIl19IGtpbmQgLSBTb3VnaHQgZXhwcmVzc2lvbiBraW5kLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtpbmQgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwga2luZCkge1xuICBjb25zdCBjbGFzc0Jsb2NrcyA9IChtb2R1bGUuY2xhc3NlcyA/PyBbXSkuZmxhdE1hcCgoZGVjbGFyYXRpb24pID0+IFtcbiAgICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCAuLi5kZWNsYXJhdGlvbi5tZXRob2RzLm1hcCgobWV0aG9kKSA9PiBtZXRob2QuYm9keSlcbiAgXSlcblxuICByZXR1cm4gW21vZHVsZS5lbnRyeVBvaW50LmJvZHksIC4uLm1vZHVsZS5mdW5jdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24uYm9keSksIC4uLmNsYXNzQmxvY2tzXS5zb21lKChibG9jaykgPT5cbiAgICBhbGxTdGF0ZW1lbnRzKGJsb2NrKS5zb21lKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiID8gc3RhdGVtZW50Lmxpc3QgOlxuICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiID8gc3RhdGVtZW50Lm1hcCA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiID8gc3RhdGVtZW50LmluaXRpYWxpemVyIDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gZXhwcmVzc2lvbiA/IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwga2luZCkgOiBmYWxzZVxuICAgIH0pKVxufVxuXG4vKipcbiAqIFNlYXJjaGVzIG9uZSB2YWxpZGF0ZWQgZXhwcmVzc2lvbiB0cmVlIGZvciBhIHNlbWFudGljIGtpbmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHJvb3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb25bXCJraW5kXCJdfSBraW5kIC0gU291Z2h0IGtpbmQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUga2luZCBvY2N1cnMuXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwga2luZCkge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IGtpbmQpIHJldHVybiB0cnVlXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5vcGVyYW5kLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5sZWZ0LCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmlnaHQsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb25kaXRpb24sIGtpbmQpIHx8XG4gICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29uc2VxdWVudCwga2luZCkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5hbHRlcm5hdGUsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChhcmd1bWVudCwga2luZCkpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5yZWNlaXZlciwga2luZCkgfHxcbiAgICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGFyZ3VtZW50LCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoYXJndW1lbnQsIGtpbmQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5yZWNlaXZlciwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdExpdGVyYWxcIikgcmV0dXJuIGV4cHJlc3Npb24uZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChlbGVtZW50LCBraW5kKSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uZW50cmllcy5zb21lKChlbnRyeSkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChlbnRyeS5rZXksIGtpbmQpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZW50cnkudmFsdWUsIGtpbmQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmNvbGxlY3Rpb24sIGtpbmQpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5pbmRleCwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ua2V5LCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24udmFsdWUsIGtpbmQpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLm9wZXJhbmQsIGtpbmQpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcGFyc2VyLWJhY2tlZCBmdW5jdGlvbi1uYW1lIGxvY2F0aW9uIHdoZW4gb25lIHN1cnZpdmVkIHNlbWFudGljIGFkYXB0YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gU2VtYW50aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IG5hbWUgb3IgZGVjbGFyYXRpb24gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGRlY2xhcmF0aW9uTmFtZUxvY2F0aW9uKGRlY2xhcmF0aW9uKSB7XG4gIHJldHVybiBkZWNsYXJhdGlvbi5zb3VyY2VQcm92ZW5hbmNlPy5yYW5nZXMubmFtZSA/PyBkZWNsYXJhdGlvbi5sb2NhdGlvblxufVxuXG4vKipcbiAqIFJldHVybnMgYSBwYXJzZXItYmFja2VkIGJpbmRpbmctbmFtZSBsb2NhdGlvbiB3aGVuIG9uZSBzdXJ2aXZlZCBzZW1hbnRpYyBhZGFwdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXIgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVmFsdWVCaW5kaW5nIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2F0Y2hCaW5kaW5nfSBiaW5kaW5nIC0gU2VtYW50aWMgYmluZGluZy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgbmFtZSBvciBiaW5kaW5nIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBiaW5kaW5nTmFtZUxvY2F0aW9uKGJpbmRpbmcpIHtcbiAgcmV0dXJuIGJpbmRpbmcuc291cmNlUHJvdmVuYW5jZT8ucmFuZ2VzLm5hbWUgPz8gYmluZGluZy5sb2NhdGlvblxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgSmF2YSBtZXRob2Qgc2lnbmF0dXJlIHVzZWQgZm9yIGluaGVyaXRlZC1pbnN0YW5jZSBjb2xsaXNpb24gY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIENhbmRpZGF0ZSBKYXZhIHRhcmdldCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IEVtaXR0ZWQgbmFtZSBhbmQgcGFyYW1ldGVyIHR5cGVzIHdoZW4gYWxsIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGVtaXR0ZWRKYXZhRnVuY3Rpb25TaWduYXR1cmUoZGVjbGFyYXRpb24pIHtcbiAgY29uc3QgcGFyYW1ldGVyVHlwZXMgPSBbXVxuXG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCB0eXBlID0gcGFyYW1ldGVyLnR5cGVcblxuICAgIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodHlwZSkpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBlbWl0dGVkID0gdHlwZS5raW5kID09IFwiTGlzdFR5cGVcIiA/IFwiamF2YS51dGlsLkxpc3RcIiA6IHR5cGUua2luZCA9PSBcIk1hcFR5cGVcIiA/IFwiamF2YS51dGlsLk1hcFwiIDpcbiAgICAgIHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgPyBcImphdmEudXRpbC5TZXF1ZW5jZWRNYXBcIiA6XG4gICAgICB0eXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgPyBlbWl0U2NhbGFyVHlwZShcImphdmFcIiwgdHlwZSkgOiB1bmRlZmluZWRcblxuICAgIGlmICghZW1pdHRlZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHBhcmFtZXRlclR5cGVzLnB1c2goZW1pdHRlZClcbiAgfVxuXG4gIHJldHVybiBgJHtkZWNsYXJhdGlvbi5uYW1lfSgke3BhcmFtZXRlclR5cGVzLmpvaW4oXCIsXCIpfSlgXG59XG5cbi8qKlxuICogUmV0dXJucyBldmVyeSBzdGF0ZW1lbnQgbmVzdGVkIGJlbmVhdGggYSBibG9jayBpbiBzZW1hbnRpYyBvcmRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50W119IFN0YXRlbWVudHMgaW5jbHVkaW5nIG5lc3RlZCBicmFuY2hlcy5cbiAqL1xuZnVuY3Rpb24gYWxsU3RhdGVtZW50cyhibG9jaykge1xuICByZXR1cm4gYmxvY2suc3RhdGVtZW50cy5mbGF0TWFwKChzdGF0ZW1lbnQpID0+IHtcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuY29uc2VxdWVudCksIC4uLihzdGF0ZW1lbnQuYWx0ZXJuYXRlID8gYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYWx0ZXJuYXRlKSA6IFtdKV1cbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYm9keSldXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBbc3RhdGVtZW50LCAuLi5hbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5ib2R5KV1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmJvZHkpLFxuICAgICAgICAuLi4oc3RhdGVtZW50LmhhbmRsZXJzID8/IFtdKS5mbGF0TWFwKChoYW5kbGVyKSA9PiBhbGxTdGF0ZW1lbnRzKGhhbmRsZXIuY2F0Y2hCb2R5KSksXG4gICAgICAgIC4uLihzdGF0ZW1lbnQuZmluYWxseUJvZHkgPyBhbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5maW5hbGx5Qm9keSkgOiBbXSldXG4gICAgfVxuXG4gICAgcmV0dXJuIFtzdGF0ZW1lbnRdXG4gIH0pXG59XG5cbi8qKlxuICogSW5kZXhlcyBleGFjdCBsb29wIGlkZW50aXRpZXMgYmVmb3JlIHJlY3Vyc2l2ZSB0YXJnZXQgdmFsaWRhdGlvbiBzbyBjcm9zcy1mdW5jdGlvbiB0YXJnZXRzIGZhaWwgZGV0ZXJtaW5pc3RpY2FsbHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge01hcDxzdHJpbmcsIG9iamVjdD59IExvb3Agb3duZXIgYnkgbW9kdWxlLWxvY2FsIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiBjb2xsZWN0TG9vcE93bmVycyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGNvbnN0IG93bmVycyA9IG5ldyBNYXAoKVxuICBjb25zdCBjbGFzc093bmVycyA9IChtb2R1bGUuY2xhc3NlcyA/PyBbXSkuZmxhdE1hcCgoZGVjbGFyYXRpb24pID0+IFtkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvciwgLi4uZGVjbGFyYXRpb24ubWV0aG9kc10pXG5cbiAgZm9yIChjb25zdCBvd25lciBvZiBbLi4uY2xhc3NPd25lcnMsIC4uLm1vZHVsZS5mdW5jdGlvbnMsIG1vZHVsZS5lbnRyeVBvaW50XSkge1xuICAgIGlmIChvd25lciAmJiB0eXBlb2Ygb3duZXIgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvd25lcikpIHZpc2l0KFJlZmxlY3QuZ2V0KG93bmVyLCBcImJvZHlcIiksIG93bmVyKVxuICB9XG5cbiAgcmV0dXJuIG93bmVyc1xuXG4gIC8qKlxuICAgKiBWaXNpdHMgbG9vcCBjb250YWluZXJzIHdoaWxlIGJvdW5kaW5nIG1hbGZvcm1lZCBjeWNsZXMuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvd25lciAtIEVuY2xvc2luZyBmdW5jdGlvbiBvciBlbnRyeSBwb2ludC5cbiAgICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZV0gLSBCbG9ja3Mgb24gdGhlIGFjdGl2ZSByZWN1cnNpdmUgcGF0aC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChibG9jaywgb3duZXIsIGFjdGl2ZSA9IG5ldyBTZXQoKSkge1xuICAgIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgYWN0aXZlLmhhcyhibG9jaykpIHJldHVyblxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50cykpIHJldHVyblxuICAgIGNvbnN0IHBhdGggPSBuZXcgU2V0KGFjdGl2ZSlcblxuICAgIHBhdGguYWRkKGJsb2NrKVxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgICBjb25zdCBraW5kID0gU3RyaW5nKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpKVxuXG4gICAgICBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICBjb25zdCBpZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJpZFwiKVxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIiksIFJlZmxlY3QuZ2V0KGJsb2NrLCBcImxvY2F0aW9uXCIpKVxuXG4gICAgICAgIGlmICh0eXBlb2YgaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGlkKSkgY29udGludWVcbiAgICAgICAgaWYgKG93bmVycy5oYXMoaWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICAgICAgb3duZXJzLnNldChpZCwgb3duZXIpXG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBvd25lciwgcGF0aClcbiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXQoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIG93bmVyLCBwYXRoKVxuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBvd25lciwgcGF0aClcbiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBvd25lciwgcGF0aClcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJoYW5kbGVyc1wiKSA/PyBbXSkgdmlzaXQoUmVmbGVjdC5nZXQoaGFuZGxlciwgXCJjYXRjaEJvZHlcIiksIG93bmVyLCBwYXRoKVxuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZmluYWxseUJvZHlcIiksIG93bmVyLCBwYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgY29tcGxldGUgc2VtYW50aWMgYmxvY2sgYmVmb3JlIGVtaXNzaW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3thY3RpdmU6IChpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50KVtdLCBvd25lcjogb2JqZWN0LCBvd25lcnM6IE1hcDxzdHJpbmcsIG9iamVjdD59fSBsb29wQ29udGV4dCAtIEFjdGl2ZSBsb29wcyBhbmQgdGhlaXIgbGV4aWNhbCBvd25lci5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVQYXRoXSAtIEJsb2NrcyBvbiB0aGUgYWN0aXZlIHJlY3Vyc2l2ZSBwYXRoLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gW2V4dGVybmFsRGVjbGFyYXRpb25JZHNdIC0gUmVzb2x2ZWQgZGVjbGFyYXRpb25zIHdob3NlIHNvdXJjZSBzcGVsbGluZyBpcyB0YXJnZXQtaW5kZXBlbmRlbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCbG9jayhibG9jaywgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoID0gbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBibG9ja1wiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKGJsb2NrKVxuICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihjYW5kaWRhdGUubG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG5cbiAgaWYgKGFjdGl2ZVBhdGguaGFzKGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjeWNsaWMgYmxvY2tcIiwgbG9jYXRpb24pXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIkJsb2NrXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGJsb2NrICR7U3RyaW5nKFJlZmxlY3QuZ2V0KGJsb2NrLCBcImtpbmRcIikpfWAsIGxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnN0YXRlbWVudHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGJsb2NrIHN0YXRlbWVudHNcIiwgbG9jYXRpb24pXG4gIGNvbnN0IGJsb2NrUGF0aCA9IG5ldyBTZXQoYWN0aXZlUGF0aClcblxuICBibG9ja1BhdGguYWRkKGNhbmRpZGF0ZSlcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgY2FuZGlkYXRlLnN0YXRlbWVudHMpIHtcbiAgICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbG9vcENvbnRleHQsIGJsb2NrUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgc3VwcG9ydGVkIHN0YXRlbWVudCByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gc3RhdGVtZW50IC0gQ2FuZGlkYXRlIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgYm9keSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7e2FjdGl2ZTogKGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnQpW10sIG93bmVyOiBvYmplY3QsIG93bmVyczogTWFwPHN0cmluZywgb2JqZWN0Pn19IGxvb3BDb250ZXh0IC0gQWN0aXZlIGxvb3BzIGFuZCB0aGVpciBsZXhpY2FsIG93bmVyLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZVBhdGhdIC0gQWN0aXZlIGJsb2NrIGNvbnRhaW5lcnMuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbZXh0ZXJuYWxEZWNsYXJhdGlvbklkc10gLSBSZXNvbHZlZCBkZWNsYXJhdGlvbnMgd2hvc2Ugc291cmNlIHNwZWxsaW5nIGlzIHRhcmdldC1pbmRlcGVuZGVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCA9IG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhdGVtZW50XCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIilcbiAgY29uc3Qgb3duTG9jYXRpb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIilcbiAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24ob3duTG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG5cbiAgaWYgKHR5cGVvZiBraW5kICE9IFwic3RyaW5nXCIpIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHN0YXRlbWVudFwiLCBsb2NhdGlvbilcbiAgaWYgKGtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbn0gKi8gKHN0YXRlbWVudClcblxuICAgIGlmICh0eXBlb2YgZGVjbGFyYXRpb24ubXV0YWJsZSAhPSBcImJvb2xlYW5cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvY2FsIGRlY2xhcmF0aW9uIHdpdGggaW52YWxpZCBtdXRhYmlsaXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBcImxvY2FsXCIsIGxvY2F0aW9uKVxuICAgIGlmIChkZWNsYXJhdGlvbi50eXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiAmJiBkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ua2luZCAhPSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJvcmRlcmVkLW1hcCBsb2NhbCByZXF1aXJlcyBhIGRpcmVjdCBsaXRlcmFsIGluaXRpYWxpemVyXCIsXG4gICAgICAgIGRpYWdub3N0aWNMb2NhdGlvbihkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ubG9jYXRpb24sIGxvY2F0aW9uKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIiAmJiBkZWNsYXJhdGlvbi5tdXRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGxvY2FsIG11c3QgYmUgaW1tdXRhYmxlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyxcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiICYmIGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkFzc2lnbm1lbnRTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG5cbiAgICB2YWxpZGF0ZUFzc2lnbm1lbnRUYXJnZXQoYXNzaWdubWVudC50YXJnZXQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoYXNzaWdubWVudCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZXhwcmVzc2lvbixmaWVsZCxraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgdHlwZW9mIGFzc2lnbm1lbnQuZmllbGQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgYXNzaWdubWVudC5yZWNlaXZlcj8ua2luZCAhPSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByaXZhdGUgZmllbGQgcmVjZWl2ZXIgb3IgcHJpdmF0ZSBmaWVsZCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGFzc2lnbm1lbnQucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZXhwcmVzc2lvblwiKVxuXG4gICAgaWYgKGV4cHJlc3Npb24gIT09IHVuZGVmaW5lZCkgdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgbG9vcENvbnRleHQuYWN0aXZlLnNvbWUoKHtraW5kfSkgPT4ga2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBraW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcInJldHVybiBmcm9tIGFuIGl0ZXJhdGlvbiBib2R5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDUgdm9pZCBjYWxsIGV4cHJlc3Npb24gc3RhdGVtZW50XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleHByZXNzaW9uID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIilcblxuICAgIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAhW1wiQ2FsbEV4cHJlc3Npb25cIiwgXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiLCBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCJdLmluY2x1ZGVzKFN0cmluZyhSZWZsZWN0LmdldChleHByZXNzaW9uLCBcImtpbmRcIikpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImV4cHJlc3Npb24gc3RhdGVtZW50IG90aGVyIHRoYW4gYSBkaXJlY3Qgb3IgcmVjZWl2ZXIgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIiksIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBicmFuY2ggPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklmU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGJyYW5jaC5jb25kaXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUJsb2NrKGJyYW5jaC5jb25zZXF1ZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGlmIChPYmplY3QuaGFzT3duKGJyYW5jaCwgXCJhbHRlcm5hdGVcIikpIHtcbiAgICAgIHZhbGlkYXRlQmxvY2soYnJhbmNoLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJCcmVha1N0YXRlbWVudFwiIHx8IGtpbmQgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDA4TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwOCBvcmRlcmVkIGxpc3QgaXRlcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgYCR7a2luZH0gbG9jYXRpb25gLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKC8qKiBAdHlwZSB7b2JqZWN0fSAqLyAoc3RhdGVtZW50KSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwia2luZCxsb2NhdGlvbix0YXJnZXRMb29wSWRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkICR7a2luZH1gLCBsb2NhdGlvbilcbiAgICBjb25zdCB0YXJnZXRMb29wSWQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwidGFyZ2V0TG9vcElkXCIpXG4gICAgY29uc3QgbmVhcmVzdCA9IGxvb3BDb250ZXh0LmFjdGl2ZS5hdCgtMSlcblxuICAgIGlmICghbmVhcmVzdCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtraW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIn0gb3V0c2lkZSBhIGxvb3BgLCBsb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIHRhcmdldExvb3BJZCAhPSBcInN0cmluZ1wiIHx8ICFsb29wQ29udGV4dC5vd25lcnMuaGFzKHRhcmdldExvb3BJZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJpbnZhbGlkIGxvb3AgY29udHJvbCB0YXJnZXQgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChsb29wQ29udGV4dC5vd25lcnMuZ2V0KHRhcmdldExvb3BJZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibG9vcCBjb250cm9sIHRhcmdldCBjcm9zc2VzIGEgZnVuY3Rpb24gYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICh0YXJnZXRMb29wSWQgIT0gbmVhcmVzdC5pZCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvb3AgY29udHJvbCBtdXN0IHRhcmdldCB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbG9vcFwiLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMzJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMyIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3BcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIldoaWxlU3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgbG9vcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMobG9vcCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYm9keSxjb25kaXRpb24saWQsa2luZCxsb2NhdGlvblwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFdoaWxlU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIGxvb3AuaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGxvb3AuaWQpIHx8IGxvb3BDb250ZXh0Lm93bmVycy5nZXQobG9vcC5pZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbG9vcC5jb25kaXRpb24gfHwgdHlwZW9mIGxvb3AuY29uZGl0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmNvbmRpdGlvbikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmNvbmRpdGlvbiwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLmNvbmRpdGlvbiwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3AgYm9keVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AuYm9keSwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBib2R5IGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUJsb2NrKGxvb3AuYm9keSwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFsuLi5sb29wQ29udGV4dC5hY3RpdmUsIGxvb3BdLCBvd25lcjogbG9vcENvbnRleHQub3duZXIsIG93bmVyczogbG9vcENvbnRleHQub3duZXJzfSwgYWN0aXZlUGF0aCxcbiAgICAgIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMDhMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA4IG9yZGVyZWQgbGlzdCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIkZvckVhY2hTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksaWQsa2luZCxsaXN0LGxvY2F0aW9uLHZhbHVlQmluZGluZ1wiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIEZvckVhY2hTdGF0ZW1lbnRcIiwgbG9vcExvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgbG9vcC5pZCAhPSBcInN0cmluZ1wiIHx8ICEvXmxvb3A6WzAtOV0rJC91LnRlc3QobG9vcC5pZCkgfHwgbG9vcENvbnRleHQub3duZXJzLmdldChsb29wLmlkKSAhPT0gbG9vcENvbnRleHQub3duZXIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBsb29wIGlkZW50aXR5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmxpc3QgfHwgdHlwZW9mIGxvb3AubGlzdCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5saXN0KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gY29sbGVjdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AubGlzdCwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiaXRlcmF0aW9uIGNvbGxlY3Rpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLmxpc3QsIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgaWYgKCFsb29wLnZhbHVlQmluZGluZyB8fCB0eXBlb2YgbG9vcC52YWx1ZUJpbmRpbmcgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AudmFsdWVCaW5kaW5nKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gYmluZGluZ1wiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGJpbmRpbmcgPSBsb29wLnZhbHVlQmluZGluZ1xuICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGJpbmRpbmcsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIml0ZXJhdGlvbiBiaW5kaW5nIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoYmluZGluZy5raW5kICE9IFwiVmFsdWVCaW5kaW5nXCIgfHwgYmluZGluZ0ZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24sbXV0YWJsZSxuYW1lLHR5cGVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibXV0YWJsZSBpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgYmluZGluZy5uYW1lLCBcIml0ZXJhdGlvbiBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGl0ZXJhdGlvbiBib2R5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5ib2R5LCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJpdGVyYXRpb24gYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDE0TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxNCBvcmRlcmVkLW1hcCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksaWQsa2V5QmluZGluZyxraW5kLGxvY2F0aW9uLG1hcCx2YWx1ZUJpbmRpbmdcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBGb3JFYWNoTWFwU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsb29wLmlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChsb29wLmlkKSB8fCBsb29wQ29udGV4dC5vd25lcnMuZ2V0KGxvb3AuaWQpICE9PSBsb29wQ29udGV4dC5vd25lcikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWxvb3AubWFwIHx8IHR5cGVvZiBsb29wLm1hcCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5tYXApKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG9yZGVyZWQtbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5tYXAsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24obG9vcC5tYXAsIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBbcm9sZSwgYmluZGluZ10gb2YgW1tcImtleVwiLCBsb29wLmtleUJpbmRpbmddLCBbXCJ2YWx1ZVwiLCBsb29wLnZhbHVlQmluZGluZ11dKSB7XG4gICAgICBpZiAoIWJpbmRpbmcgfHwgdHlwZW9mIGJpbmRpbmcgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJpbmRpbmcpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGxvb3BMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGJpbmRpbmcubG9jYXRpb24sIGxhbmd1YWdlLCBgbWFwIGl0ZXJhdGlvbiAke3JvbGV9IGJpbmRpbmcgbG9jYXRpb25gLCBsb29wTG9jYXRpb24pXG4gICAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICAgIGlmIChiaW5kaW5nLmtpbmQgIT0gXCJWYWx1ZUJpbmRpbmdcIiB8fCBiaW5kaW5nRmllbGRzICE9IFwia2luZCxsb2NhdGlvbixtdXRhYmxlLG5hbWUsdHlwZVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGJpbmRpbmdMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiTWFwIGl0ZXJhdGlvbiBiaW5kaW5ncyBtdXN0IGJlIGltbXV0YWJsZVwiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBiaW5kaW5nLm5hbWUsIGBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmJvZHkgfHwgdHlwZW9mIGxvb3AuYm9keSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5ib2R5KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtYXAgaXRlcmF0aW9uIGJvZHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmJvZHksIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIm1hcCBpdGVyYXRpb24gYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKC8qKiBAdHlwZSB7b2JqZWN0fSAqLyAoc3RhdGVtZW50KSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmFpc2VkID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImVycm9yXCIpXG4gICAgY29uc3QgcmFpc2VMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJSYWlzZVN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGNvbnN0cnVjdGlvbkZpZWxkcyA9IHJhaXNlZCAmJiB0eXBlb2YgcmFpc2VkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmFpc2VkKVxuICAgICAgPyBPYmplY3Qua2V5cyhyYWlzZWQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmIChmaWVsZHMgIT0gXCJlcnJvcixraW5kLGxvY2F0aW9uXCIgfHwgIXJhaXNlZCB8fCB0eXBlb2YgcmFpc2VkICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyYWlzZWQpIHx8XG4gICAgICByYWlzZWQua2luZCAhPSBcIkVycm9yQ29uc3RydWN0aW9uXCIgfHwgY29uc3RydWN0aW9uRmllbGRzICE9IFwiZXJyb3Isa2luZCxsb2NhdGlvbixtZXNzYWdlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgUmFpc2VTdGF0ZW1lbnRcIiwgcmFpc2VMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocmFpc2VkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJlcnJvciBjb25zdHJ1Y3Rpb24gbG9jYXRpb25cIiwgcmFpc2VMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKHJhaXNlZC5lcnJvciwgbGFuZ3VhZ2UsIHJhaXNlZC5sb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24ocmFpc2VkLm1lc3NhZ2UsIGxhbmd1YWdlLCByYWlzZWQubG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJSZXRocm93U3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCByZXRocm93ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXRocm93U3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IHJldGhyb3dMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJSZXRocm93U3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG5cbiAgICBpZiAoT2JqZWN0LmtleXMocmV0aHJvdykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpICE9IFwiYmluZGluZyxiaW5kaW5nTm9kZSxraW5kLGxvY2F0aW9uXCIgfHxcbiAgICAgIHR5cGVvZiByZXRocm93LmJpbmRpbmcgIT0gXCJzdHJpbmdcIiB8fCByZXRocm93LmJpbmRpbmcubGVuZ3RoID09IDAgfHxcbiAgICAgICFyZXRocm93LmJpbmRpbmdOb2RlIHx8IHJldGhyb3cuYmluZGluZ05vZGUua2luZCAhPSBcIkNhdGNoQmluZGluZ1wiIHx8IHJldGhyb3cuYmluZGluZ05vZGUubmFtZSAhPSByZXRocm93LmJpbmRpbmcpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgUmV0aHJvd1N0YXRlbWVudFwiLCByZXRocm93TG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHJldGhyb3cuYmluZGluZywgXCJjYXRjaCBiaW5kaW5nXCIsIHJldGhyb3dMb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgdHJ5U3RhdGVtZW50ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgdHJ5TG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiVHJ5U3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXModHJ5U3RhdGVtZW50KS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJib2R5LGhhbmRsZXJzLGtpbmQsbG9jYXRpb25cIiAmJiBmaWVsZHMgIT0gXCJib2R5LGZpbmFsbHlCb2R5LGhhbmRsZXJzLGtpbmQsbG9jYXRpb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBUcnlTdGF0ZW1lbnRcIiwgdHJ5TG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0cnlTdGF0ZW1lbnQuaGFuZGxlcnMpIHx8ICh0cnlTdGF0ZW1lbnQuaGFuZGxlcnMubGVuZ3RoID09IDAgJiYgIXRyeVN0YXRlbWVudC5maW5hbGx5Qm9keSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUcnlTdGF0ZW1lbnQgd2l0aG91dCBhbiBvcmRlcmVkIGhhbmRsZXIgbGlzdFwiLCB0cnlMb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVCbG9jayh0cnlTdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UsIHRyeUxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdHJ5U3RhdGVtZW50LmhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBoYW5kbGVyTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihoYW5kbGVyPy5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiY2F0Y2ggaGFuZGxlciBsb2NhdGlvblwiLCB0cnlMb2NhdGlvbilcbiAgICAgIGNvbnN0IGhhbmRsZXJGaWVsZHMgPSBoYW5kbGVyICYmIHR5cGVvZiBoYW5kbGVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoaGFuZGxlcilcbiAgICAgICAgPyBPYmplY3Qua2V5cyhoYW5kbGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICAgIGlmICghaGFuZGxlciB8fCBoYW5kbGVyLmtpbmQgIT0gXCJDYXRjaEhhbmRsZXJcIiB8fCBoYW5kbGVyRmllbGRzICE9IFwiY2F0Y2hCaW5kaW5nLGNhdGNoQm9keSxjYXRjaFR5cGUsa2luZCxsb2NhdGlvblwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgY2F0Y2ggaGFuZGxlclwiLCBoYW5kbGVyTG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKGhhbmRsZXIuY2F0Y2hUeXBlLCBsYW5ndWFnZSwgaGFuZGxlckxvY2F0aW9uKVxuICAgICAgY29uc3QgYmluZGluZyA9IGhhbmRsZXIuY2F0Y2hCaW5kaW5nXG4gICAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gYmluZGluZyAmJiB0eXBlb2YgYmluZGluZyA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGJpbmRpbmcpXG4gICAgICAgID8gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuICAgICAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oYmluZGluZz8ubG9jYXRpb24sIGxhbmd1YWdlLCBcImNhdGNoIGJpbmRpbmcgbG9jYXRpb25cIiwgaGFuZGxlckxvY2F0aW9uKVxuXG4gICAgICBpZiAoIWJpbmRpbmcgfHwgYmluZGluZy5raW5kICE9IFwiQ2F0Y2hCaW5kaW5nXCIgfHwgYmluZGluZ0ZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24sbXV0YWJsZSxuYW1lLHR5cGVcIiB8fCBiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgY2F0Y2ggYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBiaW5kaW5nLm5hbWUsIFwiY2F0Y2ggYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKGJpbmRpbmcudHlwZSwgbGFuZ3VhZ2UsIGJpbmRpbmdMb2NhdGlvbilcbiAgICAgIGlmIChiaW5kaW5nLnR5cGUuZGVjbGFyYXRpb25JZCAhPSBoYW5kbGVyLmNhdGNoVHlwZS5kZWNsYXJhdGlvbklkKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjYXRjaCBiaW5kaW5nIHR5cGUgbWlzbWF0Y2hcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVCbG9jayhoYW5kbGVyLmNhdGNoQm9keSwgbGFuZ3VhZ2UsIGhhbmRsZXJMb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIGlmICh0cnlTdGF0ZW1lbnQuZmluYWxseUJvZHkpIHZhbGlkYXRlQmxvY2sodHJ5U3RhdGVtZW50LmZpbmFsbHlCb2R5LCBsYW5ndWFnZSwgdHJ5TG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG5cbiAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgc3RhdGVtZW50ICR7a2luZH1gLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGNsb3NlZCBwYXJzZXItbmV1dHJhbCBlcnJvciB0eXBlIHNoYXBlLlxuICogQHBhcmFtIHt1bmtub3dufSB0eXBlIC0gQ2FuZGlkYXRlIGVycm9yIHR5cGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBvd25lckxvY2F0aW9uIC0gTmVhcmVzdCBvd25pbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFcnJvclR5cGVTaGFwZSgvKiogQHR5cGUge3Vua25vd259ICovIHR5cGUsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gKi8gb3duZXJMb2NhdGlvbikge1xuICBjb25zdCBmaWVsZHMgPSB0eXBlICYmIHR5cGVvZiB0eXBlID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodHlwZSlcbiAgICA/IE9iamVjdC5rZXlzKHR5cGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcbiAgY29uc3QgY2FuZGlkYXRlID0gdHlwZSAmJiB0eXBlb2YgdHlwZSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHR5cGUpXG4gICAgPyAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodHlwZSkgOiB7fVxuXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIkVycm9yVHlwZVwiIHx8IGZpZWxkcyAhPSBcImRlY2xhcmF0aW9uSWQsa2luZFwiIHx8IHR5cGVvZiBjYW5kaWRhdGUuZGVjbGFyYXRpb25JZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgIS9eKD86KD86W2Etel1bYS16MC05Ll8tXSojKT9lcnJvcjpbMC05XSt8KD86bW9kdWxlOlswLTldK1xcLyk/Y2FwYWJpbGl0eTpbMC05XStcXC9mYWlsdXJlOlswLTldKykkL3VcbiAgICAgIC50ZXN0KGNhbmRpZGF0ZS5kZWNsYXJhdGlvbklkKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXJyb3IgdHlwZVwiLCBvd25lckxvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbXBsZXRlIHNlbWFudGljIGxvY2F0aW9uIHN1aXRhYmxlIGZvciBkaWFnbm9zdGljIGNvbnN0cnVjdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gUHJlZmVycmVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBmYWxsYmFjayAtIE5lYXJlc3QgZW5jbG9zaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBTYWZlIGRpYWdub3N0aWMgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGRpYWdub3N0aWNMb2NhdGlvbihjYW5kaWRhdGUsIGZhbGxiYWNrKSB7XG4gIGlmIChpc1NlbWFudGljTG9jYXRpb24oY2FuZGlkYXRlKSkgcmV0dXJuIGNhbmRpZGF0ZVxuICBpZiAoaXNTZW1hbnRpY0xvY2F0aW9uKGZhbGxiYWNrKSkgcmV0dXJuIGZhbGxiYWNrXG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlcXVpcmVzIG9uZSBjb21wbGV0ZSBwYXJzZXItbmV1dHJhbCBsb2NhdGlvbiBiZWZvcmUgYW55IGJhY2tlbmQgb3IgZGlhZ25vc3RpYyBjb25zdW1lcyBpdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gUmVxdWlyZWQgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBMb2NhdGlvbiBvd25lciBmb3IgYSBkZXRlcm1pbmlzdGljIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3Vua25vd259IGZhbGxiYWNrIC0gTmVhcmVzdCBlbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFZhbGlkYXRlZCBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oY2FuZGlkYXRlLCBsYW5ndWFnZSwgc3ViamVjdCwgZmFsbGJhY2spIHtcbiAgaWYgKCFpc1NlbWFudGljTG9jYXRpb24oY2FuZGlkYXRlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWlzc2luZyBvciBpbnZhbGlkICR7c3ViamVjdH1gLCBkaWFnbm9zdGljTG9jYXRpb24oZmFsbGJhY2ssIHVuZGVmaW5lZCkpXG5cbiAgcmV0dXJuIGNhbmRpZGF0ZVxufVxuXG4vKipcbiAqIENoZWNrcyBhIGNvbXBsZXRlIG9yZGVyZWQgVVRGLTE2IHNvdXJjZSByYW5nZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gbG9jYXRpb24gLSBDYW5kaWRhdGUgc291cmNlIHJhbmdlLlxuICogQHJldHVybnMge2xvY2F0aW9uIGlzIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBXaGV0aGVyIHRoZSByYW5nZSBpcyBzYWZlIHRvIGNvbnN1bWUuXG4gKi9cbmZ1bmN0aW9uIGlzU2VtYW50aWNMb2NhdGlvbihsb2NhdGlvbikge1xuICBpZiAoIWxvY2F0aW9uIHx8IHR5cGVvZiBsb2NhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9jYXRpb24pKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHt7ZmlsZW5hbWU/OiB1bmtub3duLCBzdGFydD86IHVua25vd24sIGVuZD86IHVua25vd259fSAqLyAobG9jYXRpb24pXG5cbiAgaWYgKHR5cGVvZiBjYW5kaWRhdGUuZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUuZmlsZW5hbWUubGVuZ3RoID09IDAgfHxcbiAgICAhaXNTZW1hbnRpY1BvaW50KGNhbmRpZGF0ZS5zdGFydCkgfHwgIWlzU2VtYW50aWNQb2ludChjYW5kaWRhdGUuZW5kKSkgcmV0dXJuIGZhbHNlXG5cbiAgcmV0dXJuIGNhbmRpZGF0ZS5lbmQub2Zmc2V0ID49IGNhbmRpZGF0ZS5zdGFydC5vZmZzZXQgJiYgY2FuZGlkYXRlLmVuZC5saW5lID49IGNhbmRpZGF0ZS5zdGFydC5saW5lICYmXG4gICAgKGNhbmRpZGF0ZS5lbmQubGluZSAhPSBjYW5kaWRhdGUuc3RhcnQubGluZSB8fCBjYW5kaWRhdGUuZW5kLmNvbHVtbiA+PSBjYW5kaWRhdGUuc3RhcnQuY29sdW1uKVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgY29tcGxldGUgb25lLWJhc2VkIFVURi0xNiBzb3VyY2UgcG9pbnQuXG4gKiBAcGFyYW0ge3Vua25vd259IHBvaW50IC0gQ2FuZGlkYXRlIHNvdXJjZSBwb2ludC5cbiAqIEByZXR1cm5zIHtwb2ludCBpcyBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VQb2ludH0gV2hldGhlciBhbGwgY29vcmRpbmF0ZXMgYXJlIHZhbGlkLlxuICovXG5mdW5jdGlvbiBpc1NlbWFudGljUG9pbnQocG9pbnQpIHtcbiAgaWYgKCFwb2ludCB8fCB0eXBlb2YgcG9pbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHBvaW50KSkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7e29mZnNldD86IHVua25vd24sIGxpbmU/OiB1bmtub3duLCBjb2x1bW4/OiB1bmtub3dufX0gKi8gKHBvaW50KVxuXG4gIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihjYW5kaWRhdGUub2Zmc2V0KSAmJiBOdW1iZXIoY2FuZGlkYXRlLm9mZnNldCkgPj0gMCAmJlxuICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS5saW5lKSAmJiBOdW1iZXIoY2FuZGlkYXRlLmxpbmUpID49IDEgJiZcbiAgICBOdW1iZXIuaXNTYWZlSW50ZWdlcihjYW5kaWRhdGUuY29sdW1uKSAmJiBOdW1iZXIoY2FuZGlkYXRlLmNvbHVtbikgPj0gMVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgc2ltcGxlIGlkZW50aWZpZXIgdGFyZ2V0IGludHJvZHVjZWQgYnkgdGFzayAwMDIuXG4gKiBAcGFyYW0ge3Vua25vd259IHRhcmdldCAtIENhbmRpZGF0ZSBhc3NpZ25tZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBBc3NpZ25tZW50IGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXNzaWdubWVudFRhcmdldCh0YXJnZXQsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uKSB7XG4gIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBhc3NpZ25tZW50IHRhcmdldFwiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKHRhcmdldClcbiAgY29uc3QgbG9jYXRpb24gPSBjYW5kaWRhdGUubG9jYXRpb24gPz8gb3duZXJMb2NhdGlvblxuXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgYXNzaWdubWVudCB0YXJnZXQgJHtTdHJpbmcoUmVmbGVjdC5nZXQodGFyZ2V0LCBcImtpbmRcIikpfWAsIGxvY2F0aW9uKVxuICB9XG5cbiAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLm5hbWUsIFwiYXNzaWdubWVudCB0YXJnZXRcIiwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ2hlY2tzIGV4cHJlc3Npb24gYmFja2VuZCBjYXBhYmlsaXRpZXMgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0ge3Vua25vd259IGV4cHJlc3Npb24gLSBDYW5kaWRhdGUgc2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBOZWFyZXN0IG93bmluZyBub2RlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dKYXZhTmVnYXRlZE1pbmltdW1PcGVyYW5kXSAtIFdoZXRoZXIgSmF2YSBtYXkgdXNlIDIxNDc0ODM2NDggb25seSBiZW5lYXRoIGludGVnZXIgbmVnYXRpb24uXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbYWN0aXZlUGF0aF0gLSBBbmNlc3RvcnMgb24gdGhlIGN1cnJlbnQgcmVjdXJzaXZlIHZhbGlkYXRpb24gcGF0aC5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IFtleHRlcm5hbERlY2xhcmF0aW9uSWRzXSAtIFJlc29sdmVkIGRlY2xhcmF0aW9ucyB3aG9zZSBzb3VyY2Ugc3BlbGxpbmcgaXMgdGFyZ2V0LWluZGVwZW5kZW50LlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dKYXZhT3JkZXJlZE1hcFJvb3RdIC0gV2hldGhlciB0aGlzIHJvb3QgaXMgYSBKYXZhIGxvY2FsIGluaXRpYWxpemVyIGVsaWdpYmxlIGZvciBzdGF0ZW1lbnQgbG93ZXJpbmcuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uLCBhbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmQgPSBmYWxzZSwgYWN0aXZlUGF0aCA9IG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKSwgYWxsb3dKYXZhT3JkZXJlZE1hcFJvb3QgPSBmYWxzZSkge1xuICBpZiAoIWV4cHJlc3Npb24gfHwgdHlwZW9mIGV4cHJlc3Npb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXhwcmVzc2lvblwiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoZXhwcmVzc2lvbilcbiAgY29uc3QgbG9jYXRpb24gPSBjYW5kaWRhdGUubG9jYXRpb24gPz8gb3duZXJMb2NhdGlvblxuXG4gIGlmIChhY3RpdmVQYXRoLmhhcyhjYW5kaWRhdGUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY3ljbGljIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gIGNvbnN0IGV4cHJlc3Npb25QYXRoID0gbmV3IFNldChhY3RpdmVQYXRoKVxuXG4gIGV4cHJlc3Npb25QYXRoLmFkZChjYW5kaWRhdGUpXG5cbiAgaWYgKHR5cGVvZiBjYW5kaWRhdGUua2luZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyKGxhbmd1YWdlLCBjYW5kaWRhdGUubmFtZSwgXCJyZWZlcmVuY2VcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImNsYXNzSWQsa2luZCxsb2NhdGlvblwiIHx8IHR5cGVvZiBjYW5kaWRhdGUuY2xhc3NJZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICAhL14oPzpbYS16XVthLXowLTkuXy1dKiMpP2NsYXNzOlswLTldKyQvdS50ZXN0KGNhbmRpZGF0ZS5jbGFzc0lkKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcml2YXRlIGZpZWxkIHJlY2VpdmVyXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJFcnJvck1lc3NhZ2VSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24scmVjZWl2ZXJcIiB8fCBjYW5kaWRhdGUucmVjZWl2ZXI/LmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIEVycm9yTWVzc2FnZVJlYWRcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBjYW5kaWRhdGUua2luZCA9PSBcIk93bmVkQm9ycm93RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCBleHBlY3RlZCA9IGNhbmRpZGF0ZS5raW5kID09IFwiT3duZWRNb3ZlRXhwcmVzc2lvblwiID8gXCJleHByZXNzaW9uLGtpbmQsbG9jYXRpb24sdHlwZVwiIDogXCJleHByZXNzaW9uLGtpbmQsbG9jYXRpb24sbW9kZSx0eXBlXCJcblxuICAgIGlmIChmaWVsZHMgIT0gZXhwZWN0ZWQgfHwgY2FuZGlkYXRlLmV4cHJlc3Npb24ua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIgJiYgY2FuZGlkYXRlLmV4cHJlc3Npb24ua2luZCAhPSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiICYmXG4gICAgICBjYW5kaWRhdGUuZXhwcmVzc2lvbi5raW5kICE9IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtYWxmb3JtZWQgJHtjYW5kaWRhdGUua2luZH1gLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS52YWx1ZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJub24tc2FmZSBpbnRlZ2VyIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHZhbGlkTmVnYXRlZE1pbmltdW1PcGVyYW5kID0gYWxsb3dKYXZhTmVnYXRlZE1pbmltdW1PcGVyYW5kICYmIGNhbmRpZGF0ZS52YWx1ZSA9PSAyMTQ3NDgzNjQ4XG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgIXZhbGlkTmVnYXRlZE1pbmltdW1PcGVyYW5kICYmIChjYW5kaWRhdGUudmFsdWUgPCAtMjE0NzQ4MzY0OCB8fCBjYW5kaWRhdGUudmFsdWUgPiAyMTQ3NDgzNjQ3KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImludGVnZXIgbGl0ZXJhbCBvdXRzaWRlIHNpZ25lZCAzMi1iaXQgaW50IHJhbmdlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoKGxhbmd1YWdlID09IFwiY3NoYXJwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJnb1wiIHx8IGxhbmd1YWdlID09IFwiY1wiIHx8IGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiB8fCBsYW5ndWFnZSA9PSBcInJ1c3RcIiB8fCBsYW5ndWFnZSA9PSBcInN3aWZ0XCIpICYmIGNhbmRpZGF0ZS52YWx1ZSA8IDAgfHxcbiAgICAgIChsYW5ndWFnZSA9PSBcImNcIiB8fCBsYW5ndWFnZSA9PSBcImNwcFwiIHx8IGxhbmd1YWdlID09IFwiZGFydFwiIHx8IGxhbmd1YWdlID09IFwia290bGluXCIgfHwgbGFuZ3VhZ2UgPT0gXCJydXN0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiKSAmJiBPYmplY3QuaXMoY2FuZGlkYXRlLnZhbHVlLCAtMCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJuZWdhdGl2ZSBpbnRlZ2VyIGxpdGVyYWwgd2l0aG91dCBzZW1hbnRpYyBuZWdhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIiB8fCBjYW5kaWRhdGUua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikgcmV0dXJuXG4gIGlmIChbXCJPcHRpb25hbE5vbmVcIiwgXCJPcHRpb25hbFNvbWVcIiwgXCJPcHRpb25hbElzUHJlc2VudFwiLCBcIk9wdGlvbmFsVW53cmFwXCJdLmluY2x1ZGVzKGNhbmRpZGF0ZS5raW5kKSkge1xuICAgIGlmICghdGFzazAwN0xhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgdmFsdWVzXCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgZXhwZWN0ZWRGaWVsZHMgPSBjYW5kaWRhdGUua2luZCA9PSBcIk9wdGlvbmFsTm9uZVwiID8gXCJraW5kLGxvY2F0aW9uXCIgOlxuICAgICAgY2FuZGlkYXRlLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIiA/IFwia2luZCxsb2NhdGlvbix2YWx1ZVwiIDogXCJraW5kLGxvY2F0aW9uLG9wZXJhbmRcIlxuXG4gICAgaWYgKGZpZWxkcyAhPSBleHBlY3RlZEZpZWxkcykgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkICR7Y2FuZGlkYXRlLmtpbmR9YCwgbG9jYXRpb24pXG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3B0aW9uYWxOb25lXCIpIHJldHVyblxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnZhbHVlLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBvcGVyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk9wdGlvbmFsSXNQcmVzZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuT3B0aW9uYWxVbndyYXB9ICovIChjYW5kaWRhdGUpXG5cbiAgICBpZiAoIW9wZXJhdGlvbi5vcGVyYW5kIHx8IG9wZXJhdGlvbi5vcGVyYW5kLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke2NhbmRpZGF0ZS5raW5kfSB3aXRob3V0IGEgc2ltcGxlIGlkZW50aWZpZXIgb3BlcmFuZGAsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24ob3BlcmF0aW9uLm9wZXJhbmQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChbXCJMaXN0TGl0ZXJhbFwiLCBcIk1hcExpdGVyYWxcIiwgXCJPcmRlcmVkTWFwTGl0ZXJhbFwiLCBcIkxpc3RJbmRleEV4cHJlc3Npb25cIiwgXCJNYXBMb29rdXBFeHByZXNzaW9uXCIsIFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCJdLmluY2x1ZGVzKGNhbmRpZGF0ZS5raW5kKSkge1xuICAgIGlmICghdGFzazAwNkxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb25zXCIsIGxvY2F0aW9uKVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIgJiYgIXRhc2swMTRMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDE0IG9yZGVyZWQtbWFwIGl0ZXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIiAmJiBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiAhYWxsb3dKYXZhT3JkZXJlZE1hcFJvb3QpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJ1bnNhZmUgSmF2YSBvcmRlcmVkLW1hcCBleHByZXNzaW9uIGxvd2VyaW5nXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSB7XG4gICAgICBpZiAoIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuZWxlbWVudHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBzcGFyc2UgbGlzdCBlbGVtZW50c1wiLCBsb2NhdGlvbilcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjYW5kaWRhdGUuZWxlbWVudHMpIHtcbiAgICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGVsZW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBjYW5kaWRhdGUua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5lbnRyaWVzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3Igc3BhcnNlIG1hcCBlbnRyaWVzXCIsIGxvY2F0aW9uKVxuICAgICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWFwTGl0ZXJhbFwiICYmIGxhbmd1YWdlID09IFwiamF2YVwiICYmIGNhbmRpZGF0ZS5lbnRyaWVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJqYXZhLnV0aWwuTWFwLm9mIHN1cHBvcnRzIGF0IG1vc3QgdGVuIGVudHJpZXNcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNhbmRpZGF0ZS5lbnRyaWVzKSB7XG4gICAgICAgIGlmICghZW50cnkgfHwgZW50cnkua2luZCAhPSBcIk1hcEVudHJ5XCIgfHwgIWVudHJ5LmtleSB8fCBlbnRyeS5rZXkua2luZCAhPSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbWFwIGVudHJ5XCIsIGVudHJ5Py5sb2NhdGlvbiA/PyBsb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZW50cnkua2V5LCBsYW5ndWFnZSwgZW50cnkubG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGVudHJ5LnZhbHVlLCBsYW5ndWFnZSwgZW50cnkubG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICAgIGlmIChjYW5kaWRhdGUudG90YWxpdHkgPT0gXCJmYWlsLW9uLWFic2VuY2VcIiAmJiBsYW5ndWFnZSAhPSBcImphdmFcIikge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibGlzdCBhY2Nlc3MgZGVwZW5kcyBvbiBKYXZhLXNwZWNpZmljIGJvdW5kcyBmYWlsdXJlXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb2xsZWN0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuaW5kZXgsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgICAgaWYgKGNhbmRpZGF0ZS50b3RhbGl0eSA9PSBcImZhaWwtb24tYWJzZW5jZVwiICYmIGxhbmd1YWdlICE9IFwicnVieVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYXAgbG9va3VwIGRlcGVuZHMgb24gUnVieSBmZXRjaCBhYnNlbmNlIGZhaWx1cmVcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbGxlY3Rpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5rZXksIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSB7XG4gICAgICBpZiAoY2FuZGlkYXRlLmNvbGxlY3Rpb25LaW5kICE9IFwibGlzdFwiICYmIGNhbmRpZGF0ZS5jb2xsZWN0aW9uS2luZCAhPSBcIm1hcFwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb2xsZWN0aW9uIHNpemUgd2l0aG91dCBhIHZhbGlkYXRlZCByZWNlaXZlciBraW5kXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb2xsZWN0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25JZCA9IGNhbmRpZGF0ZS5yZXNvbHV0aW9uICYmIHR5cGVvZiBjYW5kaWRhdGUucmVzb2x1dGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5yZXNvbHV0aW9uKVxuICAgICAgPyBSZWZsZWN0LmdldChjYW5kaWRhdGUucmVzb2x1dGlvbiwgXCJkZWNsYXJhdGlvbklkXCIpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKHR5cGVvZiBkZWNsYXJhdGlvbklkICE9IFwic3RyaW5nXCIgfHwgIWV4dGVybmFsRGVjbGFyYXRpb25JZHMuaGFzKGRlY2xhcmF0aW9uSWQpKSB7XG4gICAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIGNhbmRpZGF0ZS5jYWxsZWUsIFwiY2FsbGVlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWNhbmRpZGF0ZS5yZXNvbHV0aW9uIHx8IHR5cGVvZiBjYW5kaWRhdGUucmVzb2x1dGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnJlc29sdXRpb24pKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlc29sdmVkIGNhbGwgc2lnbmF0dXJlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgY2FsbCBhcmd1bWVudHNcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIGNhbmRpZGF0ZS5hcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjYWxsIGFyZ3VtZW50IGNvdW50IG90aGVyIHRoYW4gdHdvXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IHJlc29sdXRpb24gPSBjYW5kaWRhdGUucmVzb2x1dGlvblxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImFyZ3VtZW50cyxlZmZlY3RTaXRlSWQsa2luZCxsb2NhdGlvbixvcGVyYXRpb24scmVzb2x1dGlvblwiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykgfHxcbiAgICAgIHR5cGVvZiBjYW5kaWRhdGUuZWZmZWN0U2l0ZUlkICE9IFwic3RyaW5nXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5vcGVyYXRpb24gIT0gXCJzdHJpbmdcIiB8fCAhcmVzb2x1dGlvbiB8fFxuICAgICAgcmVzb2x1dGlvbi5raW5kICE9IFwiUmVzb2x2ZWRFZmZlY3RPcGVyYXRpb25TaWduYXR1cmVcIiB8fCByZXNvbHV0aW9uLm9wZXJhdGlvbklkICE9IGNhbmRpZGF0ZS5vcGVyYXRpb24gfHxcbiAgICAgICFpc0RlbnNlQXJyYXkocmVzb2x1dGlvbi5wYXJhbWV0ZXJUeXBlcykgfHwgIWlzRGVuc2VBcnJheShyZXNvbHV0aW9uLmZhaWx1cmVJZHMpIHx8IHJlc29sdXRpb24uZWZmZWN0cz8uam9pbihcIixcIikgIT0gXCJob3N0XCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgYXV0aG9yaXplZCBlZmZlY3QgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCByZXNvbHV0aW9uID0gY2FuZGlkYXRlLnJlc29sdXRpb25cbiAgICBjb25zdCBlZmZlY3RmdWxGaWVsZHMgPSBcImFyZ3VtZW50cyxlZmZlY3RTaXRlSWQsZWZmZWN0cyxmYWlsdXJlSWRzLGtpbmQsbG9jYXRpb24scmVmZXJlbmNlLHJlc29sdXRpb25cIlxuICAgIGNvbnN0IHB1cmVGaWVsZHMgPSBcImFyZ3VtZW50cyxraW5kLGxvY2F0aW9uLHJlZmVyZW5jZSxyZXNvbHV0aW9uXCJcblxuICAgIGlmICghW3B1cmVGaWVsZHMsIGVmZmVjdGZ1bEZpZWxkc10uaW5jbHVkZXMoZmllbGRzKSB8fFxuICAgICAgY2FuZGlkYXRlLnJlZmVyZW5jZT8ua2luZCAhPSBcIlJlZmVyZW5jZVR5cGVcIiAmJiBjYW5kaWRhdGUucmVmZXJlbmNlPy5raW5kICE9IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIgfHxcbiAgICAgIHR5cGVvZiBjYW5kaWRhdGUucmVmZXJlbmNlLmRlY2xhcmF0aW9uSWQgIT0gXCJzdHJpbmdcIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpIHx8XG4gICAgICAhcmVzb2x1dGlvbiB8fCByZXNvbHV0aW9uLmtpbmQgIT0gXCJSZXNvbHZlZENvbnN0cnVjdG9yU2lnbmF0dXJlXCIgfHxcbiAgICAgIHJlc29sdXRpb24uZGVjbGFyYXRpb25JZCAhPSBgJHtjYW5kaWRhdGUucmVmZXJlbmNlLmRlY2xhcmF0aW9uSWR9OmNvbnN0cnVjdG9yYCB8fCAhaXNEZW5zZUFycmF5KHJlc29sdXRpb24ucGFyYW1ldGVyVHlwZXMpIHx8XG4gICAgICBmaWVsZHMgPT0gZWZmZWN0ZnVsRmllbGRzICYmXG4gICAgICAodHlwZW9mIGNhbmRpZGF0ZS5lZmZlY3RTaXRlSWQgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUuZWZmZWN0cz8uam9pbihcIixcIikgIT0gXCJob3N0XCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuZmFpbHVyZUlkcykpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHJlZmVyZW5jZSBjb25zdHJ1Y3Rpb24gb3IgcmVzb2x2ZWQgY29uc3RydWN0b3Igc2lnbmF0dXJlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IHJlc29sdXRpb24gPSBjYW5kaWRhdGUucmVzb2x1dGlvblxuXG4gICAgY29uc3QgZWZmZWN0ZnVsRmllbGRzID0gXCJhcmd1bWVudHMsZWZmZWN0U2l0ZUlkLGVmZmVjdHMsZmFpbHVyZUlkcyxraW5kLGxvY2F0aW9uLG1ldGhvZCxyZWNlaXZlcixyZXNvbHV0aW9uXCJcbiAgICBjb25zdCBwdXJlRmllbGRzID0gXCJhcmd1bWVudHMsa2luZCxsb2NhdGlvbixtZXRob2QscmVjZWl2ZXIscmVzb2x1dGlvblwiXG5cbiAgICBpZiAoIVtwdXJlRmllbGRzLCBlZmZlY3RmdWxGaWVsZHNdLmluY2x1ZGVzKGZpZWxkcykgfHwgdHlwZW9mIGNhbmRpZGF0ZS5tZXRob2QgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSB8fCAhcmVzb2x1dGlvbiB8fCByZXNvbHV0aW9uLmtpbmQgIT0gXCJSZXNvbHZlZE1ldGhvZFNpZ25hdHVyZVwiIHx8XG4gICAgICByZXNvbHV0aW9uLmRlY2xhcmF0aW9uSWQgIT0gY2FuZGlkYXRlLm1ldGhvZCB8fCAhaXNEZW5zZUFycmF5KHJlc29sdXRpb24ucGFyYW1ldGVyVHlwZXMpIHx8XG4gICAgICAhT2JqZWN0Lmhhc093bihyZXNvbHV0aW9uLCBcInJldHVyblR5cGVcIikgfHwgT2JqZWN0Lmhhc093bihyZXNvbHV0aW9uLCBcInJlc291cmNlRmxvd1wiKSAmJlxuICAgICAgKCFyZXNvbHV0aW9uLnJlc291cmNlRmxvdyB8fCAhW1wicHJlc2VydmVcIiwgXCJ0ZXJtaW5hbFwiXS5pbmNsdWRlcyhTdHJpbmcocmVzb2x1dGlvbi5yZXNvdXJjZUZsb3cua2luZCkpIHx8XG4gICAgICAgIE9iamVjdC5oYXNPd24ocmVzb2x1dGlvbi5yZXNvdXJjZUZsb3csIFwidGVybWluYWxGYWlsdXJlSWRcIikgJiYgdHlwZW9mIHJlc29sdXRpb24ucmVzb3VyY2VGbG93LnRlcm1pbmFsRmFpbHVyZUlkICE9IFwic3RyaW5nXCIpIHx8XG4gICAgICBmaWVsZHMgPT0gZWZmZWN0ZnVsRmllbGRzICYmXG4gICAgICAodHlwZW9mIGNhbmRpZGF0ZS5lZmZlY3RTaXRlSWQgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUuZWZmZWN0cz8uam9pbihcIixcIikgIT0gXCJob3N0XCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuZmFpbHVyZUlkcykpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHJlY2VpdmVyIGNhbGwgb3IgcmVzb2x2ZWQgbWV0aG9kIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYXJndW1lbnRzLGtpbmQsbG9jYXRpb24scmVjb3JkXCIgfHwgIWNhbmRpZGF0ZS5yZWNvcmQgfHwgY2FuZGlkYXRlLnJlY29yZC5raW5kICE9IFwiUmVjb3JkVHlwZVwiIHx8XG4gICAgICB0eXBlb2YgY2FuZGlkYXRlLnJlY29yZC5kZWNsYXJhdGlvbklkICE9IFwic3RyaW5nXCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBSZWNvcmRDb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWVtYmVyUmVhZFwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJmaWVsZCxraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5maWVsZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIE1lbWJlclJlYWRcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZmllbGQsa2luZCxsb2NhdGlvbixyZWNlaXZlclwiIHx8IHR5cGVvZiBjYW5kaWRhdGUuZmllbGQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgY2FuZGlkYXRlLnJlY2VpdmVyPy5raW5kICE9IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJpdmF0ZSBmaWVsZCByZWNlaXZlciBvciBwcml2YXRlIGZpZWxkIGlkZW50aXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGlmICghT2JqZWN0Lmhhc093bih1bmFyeU9wZXJhdGlvblN5bnRheCwgU3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgdW5hcnkgb3BlcmF0aW9uICR7U3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pfWAsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLm9wZXJhbmQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgY2FuZGlkYXRlLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIiwgZXhwcmVzc2lvblBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlS25vd25UYXJnZXRJbnRlZ2VyKGNhbmRpZGF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihiaW5hcnlPcGVyYXRpb25TeW50YXgsIFN0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGJpbmFyeSBvcGVyYXRpb24gJHtTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbil9YCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUubGVmdCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yaWdodCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVLbm93blRhcmdldEludGVnZXIoY2FuZGlkYXRlLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYWx0ZXJuYXRlLGNvbmRpdGlvbixjb25zZXF1ZW50LGtpbmQsbG9jYXRpb24sdHlwZVwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIENvbmRpdGlvbmFsRXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCF0YXNrMDQ4Q29uZGl0aW9uYWxMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDQ4IGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb25kaXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29uc2VxdWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5hbHRlcm5hdGUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG5cbiAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBTdHJpbmcoUmVmbGVjdC5nZXQoZXhwcmVzc2lvbiwgXCJraW5kXCIpKSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVqZWN0cyBjb21waWxlLXRpbWUta25vd24gSmF2YSBpbnRlZ2VyIG9wZXJhdGlvbiByZXN1bHRzIG91dHNpZGUgcHJpbWl0aXZlIGludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFZhbGlkYXRlZCBvcGVyYXRpb24gc2hhcGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIE9wZXJhdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtub3duVGFyZ2V0SW50ZWdlcihleHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24pIHtcbiAgY29uc3QgdmFsdWUgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uKVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICh2YWx1ZSA8IC0yMTQ3NDgzNjQ4biB8fCB2YWx1ZSA+IDIxNDc0ODM2NDduKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSBzaWduZWQgMzItYml0IGludCByYW5nZVwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoKGxhbmd1YWdlID09IFwiY3NoYXJwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJnb1wiIHx8IGxhbmd1YWdlID09IFwiY1wiIHx8IGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJydXN0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiIHx8IGxhbmd1YWdlID09IFwid2FzbVwiIHx8IGxhbmd1YWdlID09IFwiemlnXCIpICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAodmFsdWUgPCAtOTIyMzM3MjAzNjg1NDc3NTgwOG4gfHwgdmFsdWUgPiA5MjIzMzcyMDM2ODU0Nzc1ODA3bikpIHtcbiAgICBjb25zdCBzY2FsYXIgPSBsYW5ndWFnZSA9PSBcIndhc21cIiB8fCBsYW5ndWFnZSA9PSBcInppZ1wiID8gXCJpNjRcIiA6IGxhbmd1YWdlID09IFwic3dpZnRcIiA/IFwiSW50NjRcIiA6IFwibG9uZ1wiXG5cbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSBzaWduZWQgNjQtYml0ICR7c2NhbGFyfSByYW5nZWAsIGxvY2F0aW9uKVxuICB9XG4gIGlmICgobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIikgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICh2YWx1ZSA8IC1CaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHx8IHZhbHVlID4gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY29tcGlsZS10aW1lLWtub3duIGludGVnZXIgb3BlcmF0aW9uIG91dHNpZGUgdGhlIFNlbWFudGlmb2xkIHNhZmUtaW50ZWdlciByYW5nZVwiLCBsb2NhdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlcyBvbmx5IGxpdGVyYWwgaW50ZWdlci1vcGVyYXRpb24gdHJlZXMgZm9yIGJvdW5kcyB2YWxpZGF0aW9uLCBuZXZlciBJUiBmb2xkaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtiaWdpbnQgfCB1bmRlZmluZWR9IEtub3duIG1hdGhlbWF0aWNhbCBpbnRlZ2VyLlxuICovXG5mdW5jdGlvbiBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKGV4cHJlc3Npb24udmFsdWUpKSByZXR1cm4gQmlnSW50KGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgIGNvbnN0IG9wZXJhbmQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLm9wZXJhbmQpXG5cbiAgICByZXR1cm4gb3BlcmFuZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogLW9wZXJhbmRcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbGVmdCA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24ubGVmdClcbiAgY29uc3QgcmlnaHQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLnJpZ2h0KVxuXG4gIGlmIChsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIpIHJldHVybiBsZWZ0ICsgcmlnaHRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIpIHJldHVybiBsZWZ0IC0gcmlnaHRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck11bHRpcGx5XCIpIHJldHVybiBsZWZ0ICogcmlnaHRcblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogRW1pdHMgb25lIHJlY3Vyc2l2ZSBzZW1hbnRpYyB0eXBlIHdoaWxlIG1hcHBpbmcgZXZlcnkgY29uc3RpdHVlbnQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCB0eXBlIG9jY3VycmVuY2UgcGF0aC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVGV4dEJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtqYXZhQm94ZWRdIC0gV2hldGhlciBhIEphdmEgc2NhbGFyIGlzIGEgZ2VuZXJpYyBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdFR5cGUod3JpdGVyLCB0eXBlLCBwYXRoLCBsYW5ndWFnZSwgamF2YUJveGVkID0gZmFsc2UpIHtcbiAgaWYgKHR5cGUua2luZCA9PSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gd3JpdGVyLnR5cGVQYXJhbWV0ZXJGb3JJZCh0eXBlLnBhcmFtZXRlcklkKVxuXG4gICAgd3JpdGVyLm1hcHBlZChwYXJhbWV0ZXIubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHBhcmFtZXRlci5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgIGNvbnN0IHJlY29yZCA9IHdyaXRlci5yZWNvcmRGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5yZWNvcmROYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogcmVjb3JkLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICBpZiAodHlwZS5hcmd1bWVudHMpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIltcIiA6IFwiPFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxuICAgICAgdHlwZS5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMobGFuZ3VhZ2UgPT0gXCJwaHBcIiB8fCBsYW5ndWFnZSA9PSBcInJ1YnlcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLFwiIDogXCIsIFwiLFxuICAgICAgICAgIFwiZ2VuZXJpYyB0eXBlIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbdHlwZV0sIFtwYXRoXSlcbiAgICAgICAgZW1pdFR5cGUod3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgICAgfSlcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIl1cIiA6IFwiPlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB3cml0ZXIuY2xhc3NGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jbGFzc05hbWVGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBkZWNsYXJhdGlvbi5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHdyaXRlci5yZXNvdXJjZUZvcklkKHR5cGUucmVzb3VyY2VJZClcbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jYXBhYmlsaXR5Tm9taW5hbE5hbWUocmVzb3VyY2UubmFtZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiByZXNvdXJjZS5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB3cml0ZXIuY2xhc3NGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuY2xhc3NOYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGRlY2xhcmF0aW9uLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBqYXZhQm94ZWRcbiAgICAgID8gdHlwZS5uYW1lID09IFwiaW50ZWdlclwiID8gXCJJbnRlZ2VyXCIgOiB0eXBlLm5hbWUgPT0gXCJib29sZWFuXCIgPyBcIkJvb2xlYW5cIiA6IHR5cGUubmFtZSA9PSBcInN0cmluZ1wiID8gXCJTdHJpbmdcIiA6IFwidm9pZFwiXG4gICAgICA6IGVtaXRTY2FsYXJUeXBlKGxhbmd1YWdlLCB0eXBlKVxuXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBjb25zdCBwcmVmaXggPSBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLk9wdGlvbmFsPFwiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiP1wiIDogXCJcIlxuXG4gICAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIj5cIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCI/XCIgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IFwifG51bGxcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiIHwgbnVsbFwiIDogXCJcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiB0eXBlLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBwcmVmaXggPSB0eXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiXG4gICAgPyBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiQXJyYXlbXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJsaXN0PFwiIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuTGlzdDxcIiA6IFwiUmVhZG9ubHlBcnJheTxcIlxuICAgIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIkhhc2hbXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJhcnJheTxcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgPyBcImphdmEudXRpbC5TZXF1ZW5jZWRNYXA8XCIgOiBcImphdmEudXRpbC5NYXA8XCIgOiBcIlJlYWRvbmx5TWFwPFwiXG5cbiAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiKSB7XG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLmVsZW1lbnRUeXBlLCBgJHtwYXRofS9lbGVtZW50VHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgfSBlbHNlIHtcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUua2V5VHlwZSwgYCR7cGF0aH0va2V5VHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgICB3cml0ZXIuc3ludGhldGljKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gXCIsIFwiIDogXCIsXCIsIFwibWFwIHR5cGUgc2VwYXJhdG9yXCIsIFt0eXBlXSwgW3BhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgdHlwZS52YWx1ZVR5cGUsIGAke3BhdGh9L3ZhbHVlVHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgfVxuICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicnVieVwiID8gXCJdXCIgOiBcIj5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiB0eXBlLCBwYXRofSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIHN1cHBvcnRlZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCBKU09OIFBvaW50ZXIgZm9yIHRoaXMgZXhwcmVzc2lvbiBvY2N1cnJlbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UZXh0QmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7KG5hbWU6IHN0cmluZykgPT4gc3RyaW5nfSBlbWl0SWRlbnRpZmllciAtIElkZW50aWZpZXIgZm9ybWF0dGVyLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcikge1xuICBjb25zdCBlZmZlY3RUZW1wb3JhcnkgPSB3cml0ZXIuZWZmZWN0UmVwbGFjZW1lbnROYW1lKGV4cHJlc3Npb24pXG5cbiAgaWYgKGVmZmVjdFRlbXBvcmFyeSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoZW1pdElkZW50aWZpZXIoZWZmZWN0VGVtcG9yYXJ5KSwgXCJleGFjdGx5LW9uY2UgZWZmZWN0IHRlbXBvcmFyeSByZWFkXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0SWRlbnRpZmllcihleHByZXNzaW9uLm5hbWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiJHRoaXNcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJzZWxmXCIgOiBcInRoaXNcIixcbiAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY2VpdmVyXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoZXhwcmVzc2lvbi5leHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGVtaXRJZGVudGlmaWVyKGV4cHJlc3Npb24uZXhwcmVzc2lvbi5uYW1lKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGV4cHJlc3Npb24uZXhwcmVzc2lvbi5uYW1lLFxuICAgICAgICBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmV4cHJlc3Npb24ua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBcIiR0aGlzXCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwic2VsZlwiIDogXCJ0aGlzXCIsXG4gICAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY2VpdmVyXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5wcml2YXRlRmllbGRGb3JJZChleHByZXNzaW9uLmV4cHJlc3Npb24uZmllbGQpXG5cbiAgICAgIGlmIChsYW5ndWFnZSAhPSBcInJ1YnlcIikge1xuICAgICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vZXhwcmVzc2lvbi9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIH1cbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGAtPiR7ZmllbGQubmFtZX1gIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBgLiMke2ZpZWxkLm5hbWV9YCA6XG4gICAgICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gYEAke2ZpZWxkLm5hbWV9YCA6IGAuJHtmaWVsZC5uYW1lfWAsXG4gICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcImNzaGFycFwiIHx8IGxhbmd1YWdlID09IFwia290bGluXCIgPyBgJHtleHByZXNzaW9uLnZhbHVlfUxgIDogU3RyaW5nKGV4cHJlc3Npb24udmFsdWUpXG5cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcInB5dGhvblwiID8gZXhwcmVzc2lvbi52YWx1ZSA/IFwiVHJ1ZVwiIDogXCJGYWxzZVwiIDogZXhwcmVzc2lvbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCJfc2VtYW50aWZvbGRCb29sZWFuKFwiLCBcIkRhcnQgYW5hbHl6ZWQgQm9vbGVhbiBsaXRlcmFsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIikgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJEYXJ0IGFuYWx5emVkIEJvb2xlYW4gbGl0ZXJhbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U3RyaW5nTGl0ZXJhbChsYW5ndWFnZSwgZXhwcmVzc2lvbi52YWx1ZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsTm9uZVwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLk9wdGlvbmFsLmVtcHR5KClcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJuaWxcIiA6IFwibnVsbFwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImFic2VuY2VcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiamF2YS51dGlsLk9wdGlvbmFsLm9mKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJzb21lXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJzb21lXCJ9KVxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24udmFsdWUsIGAke3BhdGh9L3ZhbHVlYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsSXNQcmVzZW50XCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHdyaXRlci5tYXBwZWQoXCIhXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVsc2UgaWYgKGxhbmd1YWdlICE9IFwiamF2YVwiKSB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5pc1ByZXNlbnQoKVwiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIi5uaWw/XCIgOiBcIiAhPT0gbnVsbFwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIGlmIChsYW5ndWFnZSAhPSBcInJ1YnlcIiAmJiBsYW5ndWFnZSAhPSBcImphdmFcIikgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxVbndyYXBcIikge1xuICAgIGlmIChsYW5ndWFnZSAhPSBcImphdmFcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwidW53cmFwXCJ9KVxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIuZ2V0KClcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwidW53cmFwXCJ9KVxuICAgIH0gZWxzZSB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLkxpc3Qub2YoXCIgOiBcIltcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImxpc3QgZWxlbWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGVsZW1lbnQsIGAke3BhdGh9L2VsZW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKVwiIDogXCJdXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgb3BlbiA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuTWFwLm9mKFwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIm5ldyBNYXAoW1wiIDpcbiAgICAgIGxhbmd1YWdlID09IFwicGhwXCIgPyBcIltcIiA6IFwie1wiXG4gICAgY29uc3QgY2xvc2UgPSBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKVwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIl0pXCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiXVwiIDogXCJ9XCJcblxuICAgIHdyaXRlci5tYXBwZWQob3Blbiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmVudHJpZXMuZm9yRWFjaCgoZW50cnksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeVBhdGggPSBgJHtwYXRofS9lbnRyaWVzLyR7aW5kZXh9YFxuXG4gICAgICBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIm1hcCBlbnRyeSBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHdyaXRlci5tYXBwZWQoXCJbXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZW50cnksIHBhdGg6IGVudHJ5UGF0aH0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGVudHJ5LmtleSwgYCR7ZW50cnlQYXRofS9rZXlgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicnVieVwiID8gXCIgPT4gXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCIgPT4gXCIgOiBcIiwgXCIsIHtcbiAgICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZW50cnksIHBhdGg6IGVudHJ5UGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgICB9KVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBlbnRyeS52YWx1ZSwgYCR7ZW50cnlQYXRofS92YWx1ZWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikgd3JpdGVyLm1hcHBlZChcIl1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBlbnRyeSwgcGF0aDogZW50cnlQYXRofSlcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoY2xvc2UsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RJbmRleEV4cHJlc3Npb25cIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5nZXQoXCIgOiBcIltcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmluZGV4LCBgJHtwYXRofS9pbmRleGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIpXCIgOiBcIl1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiLmZldGNoKFwiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiW1wiIDogXCIuZ2V0KFwiXG5cbiAgICB3cml0ZXIubWFwcGVkKG9wZXJhdG9yLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ua2V5LCBgJHtwYXRofS9rZXlgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCJdXCIgOiBcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIhXCIsIFwic3RhdGljYWxseSBwcm92ZW4gbWFwIGxvb2t1cFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJjb3VudChcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLnNpemVcIiA6XG4gICAgICBleHByZXNzaW9uLmNvbGxlY3Rpb25LaW5kID09IFwibGlzdFwiID8gXCIubGVuZ3RoXCIgOiBcIi5zaXplXCJcblxuICAgIHdyaXRlci5tYXBwZWQoYCR7b3BlcmF0b3J9JHtsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKClcIiA6IFwiXCJ9YCwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNhbGxBcmd1bWVudFN1ZmZpeCA9IHdyaXRlci5jYWxsQXJndW1lbnRTdWZmaXhGb3IoZXhwcmVzc2lvbilcbiAgICBjb25zdCBkYXJ0TXVsdGlsaW5lID0gbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgKGV4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCA+IDAgfHwgQm9vbGVhbihjYWxsQXJndW1lbnRTdWZmaXgpKSAmJlxuICAgICAgZGFydEV4cHJlc3Npb25FeGNlZWRzUGFnZVdpZHRoKHdyaXRlciwgZXhwcmVzc2lvbilcbiAgICBjb25zdCBkYXJ0SW5kZW50ID0gZGFydE11bHRpbGluZSA/IGN1cnJlbnRMaW5lSW5kZW50KHdyaXRlcikgOiBcIlwiXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jYWxsTmFtZUZvcihleHByZXNzaW9uKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZXhwcmVzc2lvbi5jYWxsZWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiY2FsbGVlXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZGFydE11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRleCA/IFwiXCIgOiBcIlxcblwifSR7ZGFydEluZGVudH0gIGAsIFwiRGFydCBhcmd1bWVudCBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVsc2UgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgaWYgKGRhcnRNdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoXCIsXFxuXCIsIFwiRGFydCBmb3JtYXR0ZXIgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH0pXG4gICAgaWYgKGNhbGxBcmd1bWVudFN1ZmZpeCkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhkYXJ0TXVsdGlsaW5lID8gYCR7ZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoID8gXCJcIiA6IFwiXFxuXCJ9JHtkYXJ0SW5kZW50fSAgJHtjYWxsQXJndW1lbnRTdWZmaXh9LFxcbmAgOlxuICAgICAgICBgJHtleHByZXNzaW9uLmFyZ3VtZW50cy5sZW5ndGggPyBcIiwgXCIgOiBcIlwifSR7Y2FsbEFyZ3VtZW50U3VmZml4fWAsXG4gICAgICBcInRhcmdldC1jb250YWluZXIgc2VtYW50aWMgY2FsbCBhcmd1bWVudFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgaWYgKGRhcnRNdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoZGFydEluZGVudCwgXCJEYXJ0IGNhbGwgY2xvc2luZyBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gd3JpdGVyLmVmZmVjdE9wZXJhdGlvbkZvcklkKGV4cHJlc3Npb24ub3BlcmF0aW9uKVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiB3cml0ZXIucmVmZXJlbmNlQ2xhc3NFbWlzc2lvbkRlcHRoID4gMCkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIk1haW4uXCIsIFwicHJvdGVjdGVkIFRhc2sgMDM0IGhvc3Qgc3VwcG9ydCBvd25lclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuc3RkbGliUHJvdmlkZXJFbnRyeUZvcihvcGVyYXRpb24pID8/IG9wZXJhdGlvbi5uYW1lLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBvcGVyYXRpb24ubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjYWxsZWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImVmZmVjdCBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gd3JpdGVyLmNsYXNzRm9ySWQoZXhwcmVzc2lvbi5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBuYW1lID0gd3JpdGVyLmNsYXNzTmFtZUZvcklkKGV4cHJlc3Npb24ucmVmZXJlbmNlLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgcHJlZml4ID0gbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBgJHtuYW1lfS5uZXdgIDogYG5ldyAke25hbWV9YFxuXG4gICAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBkZWNsYXJhdGlvbi5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImNsYXNzXCJ9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJjb25zdHJ1Y3RvciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBtZXRob2QgPSB3cml0ZXIubWV0aG9kRm9ySWQoZXhwcmVzc2lvbi5tZXRob2QpXG5cbiAgICB3cml0ZXIubWFwcGVkKGAke2xhbmd1YWdlID09IFwicGhwXCIgPyBcIi0+XCIgOiBcIi5cIn0ke21ldGhvZC5uYW1lfWAsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IG1ldGhvZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwiXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwibWV0aG9kIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgcmVjb3JkID0gd3JpdGVyLnJlY29yZEZvcklkKGV4cHJlc3Npb24ucmVjb3JkLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHdyaXRlci5yZWNvcmROYW1lRm9ySWQoZXhwcmVzc2lvbi5yZWNvcmQuZGVjbGFyYXRpb25JZCwgdHJ1ZSlcbiAgICBjb25zdCBwcmVmaXggPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGAke3RhcmdldE5hbWV9Lm5ld2AgOiBgbmV3ICR7dGFyZ2V0TmFtZX1gXG5cbiAgICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHJlY29yZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY29yZFwifSlcbiAgICBpZiAoKGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwiamF2YVwiKSAmJiBleHByZXNzaW9uLnJlY29yZC5hcmd1bWVudHMpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCI8XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbi5yZWNvcmQsIHBhdGg6IGAke3BhdGh9L3JlY29yZGB9KVxuICAgICAgZXhwcmVzc2lvbi5yZWNvcmQuYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIsXCIgOiBcIiwgXCIsIFwiZ2VuZXJpYyBjb25zdHJ1Y3Rpb24gYXJndW1lbnQgc2VwYXJhdG9yXCIsXG4gICAgICAgICAgW2V4cHJlc3Npb24ucmVjb3JkXSwgW2Ake3BhdGh9L3JlY29yZGBdKVxuICAgICAgICBlbWl0VHlwZSh3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9yZWNvcmQvYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgICAgfSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCI+XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbi5yZWNvcmQsIHBhdGg6IGAke3BhdGh9L3JlY29yZGB9KVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwicmVjb3JkIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1lbWJlclJlYWRcIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3QgZmllbGQgPSB3cml0ZXIuZmllbGRGb3JJZChleHByZXNzaW9uLmZpZWxkKVxuICAgIGNvbnN0IHBocEdlbmVyaWNSZWNvcmQgPSBsYW5ndWFnZSA9PSBcInBocFwiICYmXG4gICAgICAod3JpdGVyLnJlY29yZEZvckZpZWxkSWQoZXhwcmVzc2lvbi5maWVsZCkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwKSA+IDBcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBgLT4ke2ZpZWxkLm5hbWV9JHtwaHBHZW5lcmljUmVjb3JkID8gXCIoKVwiIDogXCJcIn1gIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gYC4ke2ZpZWxkLm5hbWV9KClgIDogYC4ke2ZpZWxkLm5hbWV9YFxuXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJQcml2YXRlRmllbGRSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5wcml2YXRlRmllbGRGb3JJZChleHByZXNzaW9uLmZpZWxkKVxuXG4gICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGBAJHtmaWVsZC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBmaWVsZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGAtPiR7ZmllbGQubmFtZX1gIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBgLiMke2ZpZWxkLm5hbWV9YCA6IGAuJHtmaWVsZC5uYW1lfWAsXG4gICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVycm9yTWVzc2FnZVJlYWRcIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCItPmdldE1lc3NhZ2UoKVwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5nZXRNZXNzYWdlKClcIiA6IFwiLm1lc3NhZ2VcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb25kaXRpb24sIGAke3BhdGh9L2NvbmRpdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiID8gXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb25zZXF1ZW50LCBgJHtwYXRofS9jb25zZXF1ZW50YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIgOiBcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiY29sb25cIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmFsdGVybmF0ZSwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpIHtcbiAgICAgIGVtaXREYXJ0SW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIFwiX3NlbWFudGlmb2xkSW50ZWdlck5lZ2F0ZVwiLCBbXG4gICAgICAgIFtleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgXVxuICAgICAgXSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgICAgZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBcInNlbWFudGlmb2xkX2ludGVnZXJfbmVnYXRlXCIsIFtcbiAgICAgICAgW2V4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGBdXG4gICAgICBdKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImNzaGFycFwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiY2hlY2tlZChcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCItXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInB5dGhvblwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiQm9vbGVhbk5vdFwiID8gXCJub3QgXCIgOiB1bmFyeU9wZXJhdGlvblN5bnRheFtleHByZXNzaW9uLm9wZXJhdGlvbl0sIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgIGNvbnN0IGhlbHBlciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlckFkZFwiID8gXCJfc2VtYW50aWZvbGRJbnRlZ2VyQWRkXCIgOlxuICAgICAgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyU3VidHJhY3RcIiA/IFwiX3NlbWFudGlmb2xkSW50ZWdlclN1YnRyYWN0XCIgOiBcIl9zZW1hbnRpZm9sZEludGVnZXJNdWx0aXBseVwiXG5cbiAgICBlbWl0RGFydEludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIFtcbiAgICAgIFtleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgXSwgW2V4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YF1cbiAgICBdKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgW1wiSW50ZWdlckFkZFwiLCBcIkludGVnZXJTdWJ0cmFjdFwiLCBcIkludGVnZXJNdWx0aXBseVwiXS5pbmNsdWRlcyhleHByZXNzaW9uLm9wZXJhdGlvbikpIHtcbiAgICBjb25zdCBoZWxwZXIgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJBZGRcIiA/IFwic2VtYW50aWZvbGRfaW50ZWdlcl9hZGRcIiA6XG4gICAgICBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJTdWJ0cmFjdFwiID8gXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX3N1YnRyYWN0XCIgOiBcInNlbWFudGlmb2xkX2ludGVnZXJfbXVsdGlwbHlcIlxuXG4gICAgZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIFtcbiAgICAgIFtleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgXSwgW2V4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YF1cbiAgICBdKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgd3JpdGVyLnVzZXNNZXRob2RTdHJpbmdFcXVhbGl0eSgpICYmXG4gICAgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiIVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIi5lcXVhbHMoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIikpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgIHdyaXRlci5tYXBwZWQoXCJjaGVja2VkKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGJpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBsYW5ndWFnZSksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdFcXVhbFwiIHx8IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikpIHtcbiAgICBjb25zdCBjb21wb3NpdGVPcGVyYXRvciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIiAmJiB3cml0ZXIuaGFzUmFuZ2UoZXhwcmVzc2lvbiwgcGF0aCwgXCJlcXVhbGl0eU9wZXJhdG9yXCIpXG5cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIhXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIi5lcXVhbHNcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogY29tcG9zaXRlT3BlcmF0b3IgPyBcImVxdWFsaXR5T3BlcmF0b3JcIiA6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcInN3aWZ0XCIgJiYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgd3JpdGVyLm1hcHBlZChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgPyBcInNlbWFudGlmb2xkX3N0cmluZ19lcXVhbFwiIDogXCJzZW1hbnRpZm9sZF9zdHJpbmdfbm90X2VxdWFsXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiU3dpZnQgc2NhbGFyLWVxdWFsaXR5IGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiU3dpZnQgc2NhbGFyLWVxdWFsaXR5IGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZGFydE11bHRpbGluZSA9IGxhbmd1YWdlID09IFwiZGFydFwiICYmIGRhcnRFeHByZXNzaW9uRXhjZWVkc1BhZ2VXaWR0aCh3cml0ZXIsIGV4cHJlc3Npb24pXG4gIGNvbnN0IGRhcnRJbmRlbnQgPSBkYXJ0TXVsdGlsaW5lID8gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSA6IFwiXCJcblxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBjb25zdCBzcGVsbGluZyA9IGJpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBsYW5ndWFnZSlcblxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiICYmIHdyaXRlci5oYXNSYW5nZShleHByZXNzaW9uLCBwYXRoLCBcImVxdWFsaXR5T3BlcmF0b3JcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDAsIDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJlcXVhbGl0eU9wZXJhdG9yXCJ9KVxuICB9IGVsc2Ugd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoZGFydE11bHRpbGluZSA/IGBcXG4ke2RhcnRJbmRlbnR9ICAgIGAgOiBcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxufVxuXG4vKipcbiAqIEVtaXRzIGEgS290bGluIGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgd2hpbGUgcHJlc2VydmluZyB0aGUgc2VtYW50aWMgb3BlcmF0b3IgcmFuZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIE9wZXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gT3BlcmF0aW9uIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscGVyIC0gRXhhY3QgdGFyZ2V0IGhlbHBlci5cbiAqIEBwYXJhbSB7W2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb24sIHN0cmluZ11bXX0gb3BlcmFuZHMgLSBPcmRlcmVkIG9wZXJhbmRzIGFuZCBwYXRocy5cbiAqL1xuZnVuY3Rpb24gZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIG9wZXJhbmRzKSB7XG4gIHdyaXRlci5tYXBwZWQoaGVscGVyLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJLb3RsaW4gY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBvcGVyYW5kcy5mb3JFYWNoKChbb3BlcmFuZCwgb3BlcmFuZFBhdGhdLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiS290bGluIGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBvcGVyYW5kLCBvcGVyYW5kUGF0aCwgXCJrb3RsaW5cIiwgaWRlbnRpdHlJZGVudGlmaWVyKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiKVwiLCBcIktvdGxpbiBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBjb21waWxlci1vd25lZCBEYXJ0IGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBPcGVyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBPcGVyYXRpb24gcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwZXIgRXhhY3QgdGFyZ2V0IGhlbHBlci5cbiAqIEBwYXJhbSB7W2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb24sIHN0cmluZ11bXX0gb3BlcmFuZHMgT3JkZXJlZCBvcGVyYW5kcyBhbmQgcGF0aHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdERhcnRJbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgaGVscGVyLCBvcGVyYW5kcykge1xuICBjb25zdCBmbGF0TGVuZ3RoID0gaGVscGVyLmxlbmd0aCArIDIgKyBvcGVyYW5kcy5yZWR1Y2UoKHRvdGFsLCBbb3BlcmFuZF0sIGluZGV4KSA9PlxuICAgIHRvdGFsICsgZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgb3BlcmFuZCkubGVuZ3RoICsgKGluZGV4ID8gMiA6IDApLCAwKVxuICBjb25zdCBtdWx0aWxpbmUgPSB3cml0ZXIuY29sdW1uIC0gMSArIGZsYXRMZW5ndGggPiA4MFxuICBjb25zdCBpbmRlbnQgPSBtdWx0aWxpbmUgPyBjdXJyZW50TGluZUluZGVudCh3cml0ZXIpIDogXCJcIlxuXG4gIHdyaXRlci5tYXBwZWQoaGVscGVyLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgb3BlcmFuZHMuZm9yRWFjaCgoW29wZXJhbmQsIG9wZXJhbmRQYXRoXSwgaW5kZXgpID0+IHtcbiAgICBpZiAobXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKGAke2luZGV4ID8gXCJcIiA6IFwiXFxuXCJ9JHtpbmRlbnR9ICBgLCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IGluZGVudGF0aW9uXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVsc2UgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBvcGVyYW5kLCBvcGVyYW5kUGF0aCwgXCJkYXJ0XCIsIGlkZW50aXR5SWRlbnRpZmllcilcbiAgICBpZiAobXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKFwiLFxcblwiLCBcIkRhcnQgZm9ybWF0dGVyIGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIH0pXG4gIGlmIChtdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGNsb3NpbmcgaW5kZW50YXRpb25cIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiRGFydCBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIERhcnQncyBkZWZhdWx0IDgwLWNvbHVtbiBmb3JtYXR0ZXIgbXVzdCBzcGxpdCBhbiBleHByZXNzaW9uIGF0IHRoZSBjdXJyZW50IHNpdGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBmbGF0IGV4cHJlc3Npb24gY3Jvc3NlcyB0aGUgZm9ybWF0dGVyIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiBkYXJ0RXhwcmVzc2lvbkV4Y2VlZHNQYWdlV2lkdGgod3JpdGVyLCBleHByZXNzaW9uKSB7XG4gIHJldHVybiB3cml0ZXIuY29sdW1uIC0gMSArIGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24pLmxlbmd0aCA+IDgwXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBnZW5lcmF0ZWQgbGluZSdzIHN0cnVjdHVyYWwgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBMZWFkaW5nIHNwYWNlcy5cbiAqL1xuZnVuY3Rpb24gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSB7XG4gIHJldHVybiAvXiAqL3UuZXhlYyh3cml0ZXIuY29kZS5zbGljZSh3cml0ZXIuY29kZS5sYXN0SW5kZXhPZihcIlxcblwiKSArIDEpKT8uWzBdID8/IFwiXCJcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBib3VuZGVkIFRhc2stMDA1IERhcnQgZXhwcmVzc2lvbiBwcm9maWxlIHdpdGhvdXQgbWFwcGluZ3MgZm9yIHBhZ2Utd2lkdGggcGxhbm5pbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZsYXQgY2Fub25pY2FsIHNwZWxsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb24ubmFtZVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikgcmV0dXJuIFN0cmluZyhleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIikgcmV0dXJuIGBfc2VtYW50aWZvbGRCb29sZWFuKCR7ZXhwcmVzc2lvbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifSlgXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVybiBlbWl0U3RyaW5nTGl0ZXJhbChcImRhcnRcIiwgZXhwcmVzc2lvbi52YWx1ZSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBhcmd1bWVudHNfID0gZXhwcmVzc2lvbi5hcmd1bWVudHMubWFwKChhcmd1bWVudCkgPT4gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQpKVxuICAgIGNvbnN0IGNhbGxBcmd1bWVudFN1ZmZpeCA9IHdyaXRlci5jYWxsQXJndW1lbnRTdWZmaXhGb3IoZXhwcmVzc2lvbilcblxuICAgIGlmIChjYWxsQXJndW1lbnRTdWZmaXgpIGFyZ3VtZW50c18ucHVzaChjYWxsQXJndW1lbnRTdWZmaXgpXG5cbiAgICByZXR1cm4gYCR7d3JpdGVyLmNhbGxOYW1lRm9yKGV4cHJlc3Npb24pfSgke2FyZ3VtZW50c18uam9pbihcIiwgXCIpfSlgXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZClcblxuICAgIHJldHVybiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIiA/IGBfc2VtYW50aWZvbGRJbnRlZ2VyTmVnYXRlKCR7b3BlcmFuZH0pYCA6IGAoISR7b3BlcmFuZH0pYFxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBsZWZ0ID0gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0KVxuICAgIGNvbnN0IHJpZ2h0ID0gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodClcblxuICAgIGlmIChbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgICAgY29uc3QgaGVscGVyID0gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJBZGRcIiA6XG4gICAgICAgIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJTdWJ0cmFjdFwiIDogXCJfc2VtYW50aWZvbGRJbnRlZ2VyTXVsdGlwbHlcIlxuXG4gICAgICByZXR1cm4gYCR7aGVscGVyfSgke2xlZnR9LCAke3JpZ2h0fSlgXG4gICAgfVxuICAgIHJldHVybiBgKCR7bGVmdH0gJHtiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhleHByZXNzaW9uLm9wZXJhdGlvbiwgXCJkYXJ0XCIpfSAke3JpZ2h0fSlgXG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIERhcnQgZXhwcmVzc2lvbiByZWFjaGVkIGZvcm1hdHRlciBwbGFubmluZyBhZnRlciBwcmVmbGlnaHQuXCIpXG59XG5cbi8qKlxuICogUHJlc2VydmVzIGEgS290bGluIGlkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIElkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmNoYW5nZWQgc3BlbGxpbmcuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5SWRlbnRpZmllcihuYW1lKSB7XG4gIHJldHVybiBuYW1lXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIEphdmFTY3JpcHQtZmFtaWx5IGV4ZWN1dGlvbiBjYW4gY3JlYXRlIElFRUUtNzU0IHNpZ25lZCB6ZXJvLlxuICogU2VtYW50aWZvbGQgaW50ZWdlcnMgaGF2ZSBvbmUgbWF0aGVtYXRpY2FsIHplcm8sIHNvIHRob3NlIHRhcmdldHMgY2Fub25pY2FsaXplXG4gKiB0aGVpciBvYnNlcnZhYmxlIHNjYWxhciBvdXRwdXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3BlcmF0aW9uIHRyZWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgY2Fub25pY2FsIG91dHB1dCByZW5kZXJpbmcgaXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlc0Nhbm9uaWNhbFplcm9SZW5kZXJpbmcobW9kdWxlKSB7XG4gIHJldHVybiBtb2R1bGUuZnVuY3Rpb25zLnNvbWUoKGRlY2xhcmF0aW9uKSA9PiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihkZWNsYXJhdGlvbi5ib2R5KSkgfHxcbiAgICBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihtb2R1bGUuZW50cnlQb2ludC5ib2R5KVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgYmxvY2sgZm9yIHNpZ24tcHJvZHVjaW5nIGludGVnZXIgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBhIG5lc3RlZCBleHByZXNzaW9uIGNhbiBwcm9kdWNlIHNpZ25lZCB6ZXJvIGluIEphdmFTY3JpcHQuXG4gKi9cbmZ1bmN0aW9uIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGJsb2NrKSB7XG4gIHJldHVybiBibG9jay5zdGF0ZW1lbnRzLnNvbWUoKHN0YXRlbWVudCkgPT4ge1xuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5jb25kaXRpb24pIHx8XG4gICAgICAgIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5jb25zZXF1ZW50KSB8fFxuICAgICAgICBCb29sZWFuKHN0YXRlbWVudC5hbHRlcm5hdGUgJiYgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmFsdGVybmF0ZSkpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50Lmxpc3QpIHx8IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5tYXApIHx8IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuY29uZGl0aW9uKSB8fCBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYm9keSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYm9keSkgfHwgKHN0YXRlbWVudC5oYW5kbGVycyA/PyBbXSkuc29tZSgoaGFuZGxlcikgPT4gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oaGFuZGxlci5jYXRjaEJvZHkpKSB8fFxuICAgICAgICAoc3RhdGVtZW50LmZpbmFsbHlCb2R5ID8gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmZpbmFsbHlCb2R5KSA6IGZhbHNlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5pbml0aWFsaXplcilcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKHN0YXRlbWVudC5leHByZXNzaW9uICYmIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24pKVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgZXhwcmVzc2lvbiB0cmVlIGZvciBzaWduLXByb2R1Y2luZyBpbnRlZ2VyIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB0cmVlIGNvbnRhaW5zIGludGVnZXIgbmVnYXRpb24gb3IgbXVsdGlwbGljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIgfHwgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJNdWx0aXBseVwiIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5sZWZ0KSB8fFxuICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLnJpZ2h0KVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGFyZ3VtZW50KSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oYXJndW1lbnQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ucmVjZWl2ZXIpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSByZXR1cm4gZXhwcmVzc2lvbi5lbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVsZW1lbnQpKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5lbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVudHJ5LmtleSkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZW50cnkudmFsdWUpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLmNvbGxlY3Rpb24pIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5pbmRleClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKSB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ua2V5KVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBNYXBzIG9uZSBhbHJlYWR5IHZhbGlkYXRlZCBzZW1hbnRpYyBvcGVyYXRpb24gdG8gdGFyZ2V0IHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IG9wZXJhdG9yIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhvcGVyYXRpb24sIGxhbmd1YWdlKSB7XG4gIGNvbnN0IHN5bnRheCA9IGJpbmFyeU9wZXJhdGlvblN5bnRheFtvcGVyYXRpb25dXG5cbiAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIgJiYgc3ludGF4LnBocCkgcmV0dXJuIHN5bnRheC5waHBcbiAgaWYgKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgc3ludGF4LnB5dGhvbikgcmV0dXJuIHN5bnRheC5weXRob25cbiAgaWYgKChsYW5ndWFnZSA9PSBcInBocFwiIHx8IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSAmJiBzeW50YXguc3RyaWN0KSByZXR1cm4gc3ludGF4LnN0cmljdFxuXG4gIHJldHVybiBzeW50YXguZGVmYXVsdFxufVxuIl19