occam-verify-cli 1.0.824 → 1.0.825

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.
@@ -24,6 +24,12 @@ _export(exports, {
24
24
  get assumptionsToAssumptionsJSON () {
25
25
  return assumptionsToAssumptionsJSON;
26
26
  },
27
+ get axiomsFromJSON () {
28
+ return axiomsFromJSON;
29
+ },
30
+ get axiomsToAxiomsJSON () {
31
+ return axiomsToAxiomsJSON;
32
+ },
27
33
  get combinatorsFromJSON () {
28
34
  return combinatorsFromJSON;
29
35
  },
@@ -36,6 +42,12 @@ _export(exports, {
36
42
  get conclusionToConclusionJSON () {
37
43
  return conclusionToConclusionJSON;
38
44
  },
45
+ get conjecturesFromJSON () {
46
+ return conjecturesFromJSON;
47
+ },
48
+ get conjecturesToConjecturesJSON () {
49
+ return conjecturesToConjecturesJSON;
50
+ },
39
51
  get constructorsFromJSON () {
40
52
  return constructorsFromJSON;
41
53
  },
@@ -225,6 +237,12 @@ _export(exports, {
225
237
  get referencesToReferencesJSON () {
226
238
  return referencesToReferencesJSON;
227
239
  },
240
+ get rulesFromJSON () {
241
+ return rulesFromJSON;
242
+ },
243
+ get rulesToRulesJSON () {
244
+ return rulesToRulesJSON;
245
+ },
228
246
  get signatureFromJSON () {
229
247
  return signatureFromJSON;
230
248
  },
@@ -276,6 +294,12 @@ _export(exports, {
276
294
  get termsToTermsJSON () {
277
295
  return termsToTermsJSON;
278
296
  },
297
+ get theoremsFromJSON () {
298
+ return theoremsFromJSON;
299
+ },
300
+ get theoremsToTheoremsJSON () {
301
+ return theoremsToTheoremsJSON;
302
+ },
279
303
  get typeFromJSON () {
280
304
  return typeFromJSON;
281
305
  },
@@ -464,6 +488,15 @@ function termsFromJSON(json, context) {
464
488
  });
465
489
  return terms;
466
490
  }
491
+ function rulesFromJSON(json, context) {
492
+ let { rules } = json;
493
+ const { Rule } = _elements.default, rulesJSON = rules; ///
494
+ rules = rulesJSON.map((ruleJSON)=>{
495
+ const json = ruleJSON, rule = Rule.fromJSON(json, context);
496
+ return rule;
497
+ });
498
+ return rules;
499
+ }
467
500
  function framesFromJSON(json, context) {
468
501
  let { frames } = json;
469
502
  const { Frame } = _elements.default, framesJSON = frames; ///
@@ -482,6 +515,15 @@ function labelsFromJSON(json, context) {
482
515
  });
483
516
  return labels;
484
517
  }
518
+ function axiomsFromJSON(json, context) {
519
+ let { axioms } = json;
520
+ const { Axiom } = _elements.default, axiomsJSON = axioms; ///
521
+ axioms = axiomsJSON.map((axiomJSON)=>{
522
+ const json = axiomJSON, axiom = Axiom.fromJSON(json, context);
523
+ return axiom;
524
+ });
525
+ return axioms;
526
+ }
485
527
  function premisesFromJSON(json, context) {
486
528
  let { premises } = json;
487
529
  const { Premise } = _elements.default, premisesJSON = premises; ///
@@ -491,6 +533,15 @@ function premisesFromJSON(json, context) {
491
533
  });
492
534
  return premises;
493
535
  }
536
+ function theoremsFromJSON(json, context) {
537
+ let { theorems } = json;
538
+ const { Theorem } = _elements.default, theoremsJSON = theorems; ///
539
+ theorems = theoremsJSON.map((theoremJSON)=>{
540
+ const json = theoremJSON, theorem = Theorem.fromJSON(json, context);
541
+ return theorem;
542
+ });
543
+ return theorems;
544
+ }
494
545
  function variablesFromJSON(json, context) {
495
546
  let { variables } = json;
496
547
  const { Variable } = _elements.default, variablesJSON = variables; ///
@@ -580,6 +631,15 @@ function referencesFromJSON(json, context) {
580
631
  });
581
632
  return references;
582
633
  }
634
+ function conjecturesFromJSON(json, context) {
635
+ let { conjectures } = json;
636
+ const { Conjecture } = _elements.default, conjecturesJSON = conjectures; ///
637
+ conjectures = conjecturesJSON.map((conjectureJSON)=>{
638
+ const json = conjectureJSON, conjecture = Conjecture.fromJSON(json, context);
639
+ return conjecture;
640
+ });
641
+ return conjectures;
642
+ }
583
643
  function combinatorsFromJSON(json, context) {
584
644
  let { combinators } = json;
585
645
  const { Combinator } = _elements.default, combinatorsJSON = combinators; ///
@@ -798,6 +858,13 @@ function typesToTypesJSON(types) {
798
858
  });
799
859
  return typesJSON;
800
860
  }
861
+ function rulesToRulesJSON(rules) {
862
+ const rulesJSON = rules.map((rule)=>{
863
+ const ruleJSON = rule.toJSON();
864
+ return ruleJSON;
865
+ });
866
+ return rulesJSON;
867
+ }
801
868
  function labelsToLabelsJSON(labels) {
802
869
  const labelsJSON = labels.map((label)=>{
803
870
  const labelJSON = label.toJSON();
@@ -812,6 +879,13 @@ function framesToFramesJSON(frames) {
812
879
  });
813
880
  return framesJSON;
814
881
  }
882
+ function axiomsToAxiomsJSON(axioms) {
883
+ const axiomsJSON = axioms.map((axiom)=>{
884
+ const axiomJSON = axiom.toJSON();
885
+ return axiomJSON;
886
+ });
887
+ return axiomsJSON;
888
+ }
815
889
  function premisesToPremisesJSON(premises) {
816
890
  const premisesJSON = premises.map((premise)=>{
817
891
  const premiseJSON = premise.toJSON();
@@ -819,6 +893,13 @@ function premisesToPremisesJSON(premises) {
819
893
  });
820
894
  return premisesJSON;
821
895
  }
896
+ function theoremsToTheoremsJSON(theorems) {
897
+ const theoremsJSON = theorems.map((theorem)=>{
898
+ const theoremJSON = theorem.toJSON();
899
+ return theoremJSON;
900
+ });
901
+ return theoremsJSON;
902
+ }
822
903
  function variablesToVariablesJSON(variables) {
823
904
  const variablesJSON = variables.map((variable)=>{
824
905
  const variableJSON = variable.toJSON();
@@ -889,6 +970,13 @@ function referencesToReferencesJSON(references) {
889
970
  });
890
971
  return referencesJSON;
891
972
  }
973
+ function conjecturesToConjecturesJSON(conjectures) {
974
+ const conjecturesJSON = conjectures.map((conjecture)=>{
975
+ const conjectureJSON = conjecture.toJSON();
976
+ return conjectureJSON;
977
+ });
978
+ return conjecturesJSON;
979
+ }
892
980
  function combinatorsToCombinatorsJSON(combinators) {
893
981
  const combinatorsJSON = combinators.map((combinator)=>{
894
982
  const combinatorJSON = combinator.toJSON();
@@ -982,4 +1070,4 @@ function findMetaTypeByName(name, context) {
982
1070
  return metaType;
983
1071
  }
984
1072
 
985
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IEVwaGVtZXJhbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvZXBoZW1lcmFsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBuYW1lIH0gPSBqc29uO1xuXG4gIGNvbnN0IG5hbWVKU09OID0gbmFtZTsgIC8vL1xuXG4gIG5hbWUgPSBuYW1lSlNPTjsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdGVybSB9ID0ganNvbjtcblxuICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1KU09OID0gdGVybTsgIC8vL1xuXG4gICAganNvbiA9IHRlcm1KU09OOyAgLy8vXG5cbiAgICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzO1xuXG4gICAgdGVybSA9IFRlcm0uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHR5cGUgfSA9IGpzb247XG5cbiAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gdHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbmFtZSA9IHN0cmluZzsgIC8vL1xuXG4gICAgdHlwZSA9IGZpbmRUeXBlQnlOYW1lKG5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWwgfSA9IGpzb247XG5cbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgbGFiZWxKU09OID0gbGFiZWw7ICAvLy9cblxuICBqc29uID0gbGFiZWxKU09OOyAvLy9cblxuICBsYWJlbCA9IExhYmVsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBmcmFtZSB9ID0ganNvbjtcblxuICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCBmcmFtZUpTT04gPSBmcmFtZTsgIC8vL1xuXG4gICAganNvbiA9IGZyYW1lSlNPTjsgIC8vL1xuXG4gICAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHM7XG5cbiAgICBmcmFtZSA9IEZyYW1lLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCBsZW1tYXMgPSBbXTtcblxuICByZXR1cm4gbGVtbWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBuZWdhdGVkIH0gPSBqc29uO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGFUeXBlIH0gPSBqc29uO1xuXG4gIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgIGpzb24gPSBtZXRhVHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbmFtZSA9IHN0cmluZzsgIC8vL1xuXG4gICAgbWV0YVR5cGUgPSBmaW5kTWV0YVR5cGVCeU5hbWUobmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN0YXRlbWVudCA9IG51bGwgfSA9IGpzb247XG5cbiAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnRKU09OID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICBqc29uID0gc3RhdGVtZW50SlNPTjsgLy8vXG5cbiAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBkZWR1Y3Rpb24gfSA9IGpzb247XG5cbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uOyAgLy8vXG5cbiAganNvbiA9IGRlZHVjdGlvbkpTT047ICAvLy9cblxuICBkZWR1Y3Rpb24gPSBEZWR1Y3Rpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc2lnbmF0dXJlID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAoc2lnbmF0dXJlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmU7ICAvLy9cblxuICAgIGpzb24gPSBzaWduYXR1cmVKU09OOyAvLy9cblxuICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHJlZmVyZW5jZSB9ID0ganNvbjtcblxuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZUpTT04gPSByZWZlcmVuY2U7ICAvLy9cblxuICBqc29uID0gcmVmZXJlbmNlSlNPTjsgLy8vXG5cbiAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBpZGVudGlmaWVyIH0gPSBqc29uO1xuXG4gIGNvbnN0IGlkZW50aWZpZXJKU09OID0gaWRlbnRpZmllcjsgIC8vL1xuXG4gIGlkZW50aWZpZXIgPSBpZGVudGlmaWVySlNPTjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgY29uY2x1c2lvbiB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25jbHVzaW9uSlNPTiA9IGNvbmNsdXNpb247ICAvLy9cblxuICBqc29uID0gY29uY2x1c2lvbkpTT047ICAvLy9cblxuICBjb25jbHVzaW9uID0gQ29uY2x1c2lvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFMZW1tYXMgPSBbXTtcblxuICByZXR1cm4gbWV0YUxlbW1hcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IHByb3Zpc2lvbmFsIH0gPSBqc29uO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXZhcmlhYmxlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZTsgIC8vL1xuXG4gIGpzb24gPSBtZXRhdmFyaWFibGVKU09OOyAvLy9cblxuICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByb2NlZHVyZUNhbGwgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsSlNPTiA9IHByb2NlZHVyZUNhbGw7ICAvLy9cblxuICAgIGpzb24gPSBwcm9jZWR1cmVDYWxsSlNPTjsgLy8vXG5cbiAgICBwcm9jZWR1cmVDYWxsID0gUHJvY2VkdXJlQ2FsbC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9taW5hbFR5cGVOYW1lRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IG5vbWluYWxUeXBlTmFtZSB9ID0ganNvbjtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VKU09OID0gcHJvY2VkdXJlUmVmZXJlbmNlOyAgLy8vXG5cbiAganNvbiA9IHByb2NlZHVyZVJlZmVyZW5jZUpTT047ICAvLy9cblxuICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBQcm9jZWR1cmVSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbUpTT04oanNvbiwgdHlwZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB0eXBlczogdHlwZXNKU09OIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHM7XG5cbiAgdHlwZXNKU09OLmZvckVhY2goKHR5cGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZSA9IFR5cGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0eXBlcy5wdXNoKHR5cGUpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0ZXJtcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0ZXJtc0pTT04gPSB0ZXJtczsgLy8vXG5cbiAgdGVybXMgPSB0ZXJtc0pTT04ubWFwKCh0ZXJtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0ZXJtSlNPTiwgIC8vL1xuICAgICAgICAgIHRlcm0gPSBUZXJtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZnJhbWVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgIGZyYW1lc0pTT04gPSBmcmFtZXM7IC8vL1xuXG4gIGZyYW1lcyA9IGZyYW1lc0pTT04ubWFwKChmcmFtZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZnJhbWVKU09OLCAgLy8vXG4gICAgICAgICAgZnJhbWUgPSBGcmFtZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbHNKU09OID0gbGFiZWxzOyAgLy8vXG5cbiAgbGFiZWxzID0gbGFiZWxzSlNPTi5tYXAoKGxhYmVsSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBsYWJlbEpTT04sIC8vL1xuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJlbWlzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJlbWlzZXNKU09OID0gcHJlbWlzZXM7ICAvLy9cblxuICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTi5tYXAoKHByZW1pc2VKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByZW1pc2VKU09OLCAvLy9cbiAgICAgICAgICBwcmVtaXNlID0gUHJlbWlzZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlczsgLy8vXG5cbiAgdmFyaWFibGVzID0gdmFyaWFibGVzSlNPTi5tYXAoKHZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZXF1YWxpdGllcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgZXF1YWxpdGllc0pTT04gPSBlcXVhbGl0aWVzOyAvLy9cblxuICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT04ubWFwKChlcXVhbGl0eUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZXF1YWxpdHlKU09OLCAgLy8vXG4gICAgICAgICAgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9wZXJ0aWVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9wZXJ0aWVzSlNPTiA9IHByb3BlcnRpZXM7IC8vL1xuXG4gIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzSlNPTi5tYXAoKHByb3BlcnR5SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwcm9wZXJ0eUpTT04sICAvLy9cbiAgICAgICAgICBwcm9wZXJ0eSA9IFByb3BlcnR5LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgc3VwZXJUeXBlczogc3VwZXJUeXBlc0pTT04gfSA9IGpzb247XG5cbiAgY29uc3Qgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNKU09OLm1hcCgoc3VwZXJUeXBlSlNPTikgPT4ge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBzdXBlclR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgICAgICAgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgICAgbmFtZSA9IHN0cmluZywgIC8vL1xuICAgICAgICAgICAgICAgIHR5cGUgPSBmaW5kVHlwZUJ5TmFtZShuYW1lLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdXBlclR5cGUgPSB0eXBlOyAvLy9cblxuICAgICAgICAgIHJldHVybiBzdXBlclR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgaHlwb3RoZXNlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXM7ICAvLy9cblxuICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0pTT04ubWFwKChoeXBvdGhlc2lzSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBoeXBvdGhlc2lzSlNPTiwgLy8vXG4gICAgICAgICAgaHlwb3RoZXNpcyA9IEh5cG90aGVzaXMuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwYXJhbWV0ZXJzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyc0pTT04gPSBwYXJhbWV0ZXJzOyAvLy9cblxuICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0pTT04ubWFwKChwYXJhbWV0ZXJKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHBhcmFtZXRlckpTT04sICAvLy9cbiAgICAgICAgICBwYXJhbWV0ZXIgPSBQYXJhbWV0ZXIuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGp1ZGdlbWVudHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBqdWRnZW1lbnRzSlNPTiA9IGp1ZGdlbWVudHM7IC8vL1xuXG4gIGp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzSlNPTi5tYXAoKGp1ZGdlbWVudEpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0ganVkZ2VtZW50SlNPTiwgIC8vL1xuICAgICAgICAgIGp1ZGdlbWVudCA9IEp1ZGdlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBqdWRnZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3RhdGVtZW50cyB9ID0ganNvbjtcblxuICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50czsgLy8vXG5cbiAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OLm1hcCgoc3RhdGVtZW50SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdGF0ZW1lbnRKU09OLCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50ID0gU3RhdGVtZW50LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBhc3NlcnRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiwgRGVmaW5lZEFzc2VydGlvbiwgUHJvcGVydHlBc3NlcnRpb24sIFN1YnByb29mQXNzZXJ0aW9uLCBTYXRpc2ZpZXNBc3NlcnRpb24sIENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGFzc2VydGlvbnNKU09OID0gYXNzZXJ0aW9uczsgLy8vXG5cbiAgYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnNKU09OLm1hcCgoYXNzZXJ0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBhc3NlcnRpb25KU09OLCAgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uID0gVHlwZUFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5QXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIFN1YnByb29mQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIFNhdGlzZmllc0Fzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBDb250YWluZWRBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzZXJ0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHJlZmVyZW5jZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VzSlNPTiA9IHJlZmVyZW5jZXM7IC8vL1xuXG4gIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzSlNPTi5tYXAoKHJlZmVyZW5jZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcmVmZXJlbmNlSlNPTiwgIC8vL1xuICAgICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH0pO1xuXG4gIHJldHVybiByZWZlcmVuY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbWJpbmF0b3JzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbWJpbmF0b3JzSlNPTiA9IGNvbWJpbmF0b3JzOyAvLy9cblxuICBjb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzSlNPTi5tYXAoKGNvbWJpbmF0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbWJpbmF0b3JKU09OLCAgLy8vXG4gICAgICAgICAgY29tYmluYXRvciA9IENvbWJpbmF0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGFzc3VtcHRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnM7IC8vL1xuXG4gIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNKU09OLm1hcCgoYXNzdW1wdGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gYXNzdW1wdGlvbkpTT04sICAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uID0gQXNzdW1wdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4ZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHR5cGVQcmVmaXhlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICB0eXBlUHJlZml4ZXNKU09OID0gdHlwZVByZWZpeGVzOyAvLy9cblxuICB0eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXNKU09OLm1hcCgodHlwZVByZWZpeEpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdHlwZVByZWZpeEpTT04sICAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4ID0gVHlwZVByZWZpeC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0eXBlUHJlZml4O1xuICB9KTtcblxuICByZXR1cm4gdHlwZVByZWZpeGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25zdHJ1Y3RvcnMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnM7IC8vL1xuXG4gIGNvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9yc0pTT04ubWFwKChjb25zdHJ1Y3RvckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gY29uc3RydWN0b3JKU09OLCAgLy8vXG4gICAgICAgICAgY29uc3RydWN0b3IgPSBDb25zdHJ1Y3Rvci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXRoZW9yZW1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdGhlb3JlbXNKU09OID0gbWV0YXRoZW9yZW1zOyAvLy9cblxuICBtZXRhdGhlb3JlbXMgPSBtZXRhdGhlb3JlbXNKU09OLm1hcCgobWV0YXRoZW9yZW1KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IG1ldGF0aGVvcmVtSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGF0aGVvcmVtID0gTWV0YXRoZW9yZW0uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXRoZW9yZW07XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN1cHBvc2l0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uczsgIC8vL1xuXG4gIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04ubWFwKChzdXBwb3NpdGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3VwcG9zaXRpb25KU09OLCAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbiA9IFN1cHBvc2l0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3Vic3RpdHV0aW9ucyB9ID0ganNvbjsgIC8vL1xuXG4gIGNvbnN0IHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9uczsgLy8vXG5cbiAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OLm1hcCgoc3Vic3RpdHV0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdWJzdGl0dXRpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN1YnN0aXR1dGlvbkpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVzSlNPTiA9IG1ldGF2YXJpYWJsZXM7IC8vL1xuXG4gIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTi5tYXAoKG1ldGF2YXJpYWJsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbWV0YXZhcmlhYmxlSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXBoZW1lcmFsQ29udGV4dEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBjb250ZXh0O1xuXG4gICh7Y29udGV4dH0gPSBqc29uKTtcblxuICBqc29uID0gY29udGV4dDsgLy8vXG5cbiAgY29udGV4dCA9IHJlbGVhc2VDb250ZXh0OyAvLy9cblxuICBjb25zdCBlbXBoZW1lcmFsQ29udGV4dCA9IEVwaGVtZXJhbENvbnRleHQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVtcGhlbWVyYWxDb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZWRWYXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGRlY2xhcmVkVmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBkZWNsYXJlZFZhcmlhYmxlc0pTT04gPSBkZWNsYXJlZFZhcmlhYmxlczsgLy8vXG5cbiAgZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlc0pTT04ubWFwKChkZWNsYXJlZFZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBkZWNsYXJlZFZhcmlhYmxlSlNPTiwgIC8vL1xuICAgICAgICAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByb3BlcnR5UmVsYXRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb25zSlNPTiA9IHByb3BlcnR5UmVsYXRpb25zOyAvLy9cblxuICBwcm9wZXJ0eVJlbGF0aW9ucyA9IHByb3BlcnR5UmVsYXRpb25zSlNPTi5tYXAoKHByb3BlcnR5UmVsYXRpb25KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByb3BlcnR5UmVsYXRpb25KU09OLCAgLy8vXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IFByb3BlcnR5UmVsYXRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGFMZXZlbEFzc3VtcHRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YUxldmVsQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiA9IG1ldGFMZXZlbEFzc3VtcHRpb25zOyAvLy9cblxuICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zSlNPTi5tYXAoKG1ldGFMZXZlbEFzc3VtcHRpb25KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IG1ldGFMZXZlbEFzc3VtcHRpb25KU09OLCAgLy8vXG4gICAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbiA9IE1ldGFMZXZlbEFzc3VtcHRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBkZWNsYXJlZE1ldGF2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzOyAvLy9cblxuICBkZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OLm1hcCgoZGVjbGFyZWRNZXRhdmFyaWFibGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZVRvTmFtZUpTT04obmFtZSkge1xuICBjb25zdCBuYW1lSlNPTiA9IG5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtVG9UZXJtSlNPTih0ZXJtKSB7XG4gIGNvbnN0IHRlcm1KU09OID0gKHRlcm0gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgIHRlcm0udG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiB0ZXJtSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVUb1R5cGVKU09OKHR5cGUpIHtcbiAgY29uc3QgdHlwZUpTT04gPSAodHlwZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgdHlwZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHR5cGVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVUb0ZyYW1lSlNPTihmcmFtZSkge1xuICBjb25zdCBmcmFtZUpTT04gPSAoZnJhbWUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICBmcmFtZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBmcmFtZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbFRvTGFiZWxKU09OKGxhYmVsKSB7XG4gIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gIHJldHVybiBsYWJlbEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVG9OZWdhdGVkSlNPTihuZWdhdGVkKSB7XG4gIGNvbnN0IG5lZ2F0ZWRKU09OID0gbmVnYXRlZDsgIC8vL1xuXG4gIHJldHVybiBuZWdhdGVkSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyaWFibGVUb1ZhcmlhYmxlSlNPTihhcmlhYmxlKSB7XG4gIGNvbnN0IGFyaWFibGVKU09OID0gYXJpYWJsZS50b0pTT04oKTtcblxuICByZXR1cm4gYXJpYWJsZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZVRvTWV0YVR5cGVKU09OKG1ldGFUeXBlKSB7XG4gIGNvbnN0IG1ldGFUeXBlSlNPTiA9IChtZXRhVHlwZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFUeXBlLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIG1ldGFUeXBlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVRvUmVmZXJlbmNlSlNPTihyZWZlcmVuY2UpIHtcbiAgY29uc3QgcmVmZXJlbmNlSlNPTiA9IHJlZmVyZW5jZS50b0pTT04oKTtcblxuICByZXR1cm4gcmVmZXJlbmNlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTihzdGF0ZW1lbnQpIHtcbiAgY29uc3Qgc3RhdGVtZW50SlNPTiA9IChzdGF0ZW1lbnQgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKGRlZHVjdGlvbikge1xuICBjb25zdCBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb25KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHNpZ25hdHVyZSkge1xuICBjb25zdCBzaWduYXR1cmVKU09OID0gKHNpZ25hdHVyZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyVG9JZGVudGlmaWVySlNPTihpZGVudGlmaWVyKSB7XG4gIGNvbnN0IGlkZW50aWZpZXJKU09OID0gaWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVySlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OKGNvbmNsdXNpb24pIHtcbiAgY29uc3QgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04ocHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWxKU09OID0gcHJvdmlzaW9uYWw7ICAvLy9cblxuICByZXR1cm4gcHJvdmlzaW9uYWxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlVG9NZXRhdmFyaWFibGVKU09OKG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBtZXRhdmFyaWFibGVKU09OID0gbWV0YXZhcmlhYmxlLnRvSlNPTigpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04ocHJvY2VkdXJlQ2FsbCkge1xuICBjb25zdCBwcm9jZWR1cmVDYWxsSlNPTiA9IChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZWR1cmVDYWxsLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVHlwZU5hbWVUb05vbWluYWxUeXBlTmFtZUpTT04obm9taW5hbFR5cGVOYW1lKSB7XG4gIGNvbnN0IG5vbWluYWxUeXBlTmFtZUpTT04gPSBub21pbmFsVHlwZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVwaGVtZXJhbENvbnRleHRUb0VwaGVtZXJhbENvbnRleHRKU09OKGVwaGVtZXJhbENvbnRleHQpIHtcbiAgY29uc3QgZXBoZW1lcmFsQ29udGV4dEpTT04gPSBlcGhlbWVyYWxDb250ZXh0LnRvSlNPTigpO1xuXG4gIHJldHVybiBlcGhlbWVyYWxDb250ZXh0SlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZVRvUHJvY2VkdXJlUmVmZXJlbmNlSlNPTihwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZS50b0pTT04oKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkTWV0YXZhcmlhYmxlVG9ERWNsYXJlZE1ldGF2YXJpYWJsZUpTT04oZGVjbGFyZWRNZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGVKU09OID0gZGVjbGFyZWRNZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbkZyb21TdWJzdGl0dXRpb25KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uLCBGcmFtZVN1YnN0aXR1dGlvbiwgU3RhdGVtZW50U3Vic3RpdHV0aW9uLCBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIEZyYW1lU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VTdWJzdGl0dXRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zVG9UZXJtc0pTT04odGVybXMpIHtcbiAgY29uc3QgdGVybXNKU09OID0gdGVybXMubWFwKCh0ZXJtKSA9PiB7XG4gICAgY29uc3QgdGVybUpTT04gPSB0ZXJtLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHRlcm1KU09OO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNUb1R5cGVzSlNPTih0eXBlcykge1xuICBjb25zdCB0eXBlc0pTT04gPSB0eXBlcy5tYXAoKHR5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gdHlwZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNUb0xhYmVsc0pTT04obGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHMubWFwKChsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGxhYmVsSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVsc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZXNUb0ZyYW1lc0pTT04oZnJhbWVzKSB7XG4gIGNvbnN0IGZyYW1lc0pTT04gPSBmcmFtZXMubWFwKChmcmFtZSkgPT4ge1xuICAgIGNvbnN0IGZyYW1lSlNPTiA9IGZyYW1lLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGZyYW1lSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc1RvUHJlbWlzZXNKU09OKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzSlNPTiA9IHByZW1pc2VzLm1hcCgocHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VKU09OID0gcHJlbWlzZS50b0pTT04oKTtcblxuICAgIHJldHVybiBwcmVtaXNlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlc1RvVmFyaWFibGVzSlNPTih2YXJpYWJsZXMpIHtcbiAgY29uc3QgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVKU09OID0gdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzLm1hcCgoaHlwb3RoZXNpcykgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXNKU09OID0gaHlwb3RoZXNpcy50b0pTT04oKTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04oc3VwZXJUeXBlcykge1xuICBjb25zdCBzdXBlclR5cGVzSlNPTiA9IHN1cGVyVHlwZXMubWFwKChzdXBlclR5cGUpID0+IHtcbiAgICBjb25zdCBzdXBlclR5cGVKU09OID0gc3VwZXJUeXBlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN1cGVyVHlwZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdXBlclR5cGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc0pTT04gPSBwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVySlNPTiA9IHBhcmFtZXRlci50b0pTT04oKTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXJKU09OO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllcy5tYXAoKHByb3BlcnR5KSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlKU09OID0gcHJvcGVydHkudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlKU09OO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTihqdWRnZW1lbnRzKSB7XG4gIGNvbnN0IGp1ZGdlbWVudHNKU09OID0ganVkZ2VtZW50cy5tYXAoKGp1ZGdlbWVudCkgPT4ge1xuICAgIGNvbnN0IGp1ZGdlbWVudEpTT04gPSBqdWRnZW1lbnQudG9KU09OKCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudHNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04oZXF1YWxpdGllcykge1xuICBjb25zdCBlcXVhbGl0aWVzSlNPTiA9IGVxdWFsaXRpZXMubWFwKChlcXVhbGl0eSkgPT4ge1xuICAgIGNvbnN0IGVxdWFsaXR5SlNPTiA9IGVxdWFsaXR5LnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04oc3RhdGVtZW50cykge1xuICBjb25zdCBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHMubWFwKChzdGF0ZW1lbnQpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnRKU09OID0gc3RhdGVtZW50LnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudEpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OKGFzc2VydGlvbnMpIHtcbiAgY29uc3QgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zLm1hcCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0aW9uSlNPTiA9IGFzc2VydGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gYXNzZXJ0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTihyZWZlcmVuY2VzKSB7XG4gIGNvbnN0IHJlZmVyZW5jZXNKU09OID0gcmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4ge1xuICAgIGNvbnN0IHJlZmVyZW5jZUpTT04gPSByZWZlcmVuY2UudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTihjb21iaW5hdG9ycykge1xuICBjb25zdCBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9ycy5tYXAoKGNvbWJpbmF0b3IpID0+IHtcbiAgICBjb25zdCBjb21iaW5hdG9ySlNPTiA9IGNvbWJpbmF0b3IudG9KU09OKCk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvckpTT047XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OKGFzc3VtcHRpb25zKSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zLm1hcCgoYXNzdW1wdGlvbikgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb25KU09OID0gYXNzdW1wdGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTihzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9ucy5tYXAoKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25KU09OID0gc3VwcG9zaXRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTihjb25zdHJ1Y3RvcnMpIHtcbiAgY29uc3QgY29uc3RydWN0b3JzSlNPTiA9IGNvbnN0cnVjdG9ycy5tYXAoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgY29uc3RydWN0b3JKU09OID0gY29uc3RydWN0b3IudG9KU09OKCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JKU09OO1xuICB9KTtcblxuICByZXR1cm4gY29uc3RydWN0b3JzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtc1RvTWV0YXRoZW9yZW1zSlNPTihtZXRhdGhlb3JlbXMpIHtcbiAgY29uc3QgbWV0YXRoZW9yZW1zSlNPTiA9IG1ldGF0aGVvcmVtcy5tYXAoKG1ldGF0aGVvcmVtKSA9PiB7XG4gICAgY29uc3QgbWV0YXRoZW9yZW1KU09OID0gbWV0YXRoZW9yZW0udG9KU09OKCk7XG5cbiAgICByZXR1cm4gbWV0YXRoZW9yZW1KU09OO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXRoZW9yZW1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTih0eXBlUHJlZml4ZXMpIHtcbiAgY29uc3QgdHlwZVByZWZpeGVzSlNPTiA9IHR5cGVQcmVmaXhlcy5tYXAoKHR5cGVQcmVmaXgpID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4SlNPTiA9IHR5cGVQcmVmaXgudG9KU09OKCk7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeEpTT047XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlUHJlZml4ZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04oc3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnMubWFwKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25KU09OID0gc3Vic3RpdHV0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OKG1ldGF2YXJpYWJsZXMpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzLm1hcCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uc1RvUHJvcGVydHlSZWxhdGlvbnNKU09OKHByb3BlcnR5UmVsYXRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb25zSlNPTiA9IHByb3BlcnR5UmVsYXRpb25zLm1hcCgocHJvcGVydHlSZWxhdGlvbikgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25KU09OID0gcHJvcGVydHlSZWxhdGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04oZGVjbGFyZWRWYXJpYWJsZXMpIHtcbiAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXNKU09OID0gZGVjbGFyZWRWYXJpYWJsZXMubWFwKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZUpTT04gPSBkZWNsYXJlZFZhcmlhYmxlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsQXNzdW1wdGlvbnNUb01ldGFMZXZlbEFzc3VtcHRpb25zSlNPTihtZXRhTGV2ZWxBc3N1bXB0aW9ucykge1xuICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT04gPSBtZXRhTGV2ZWxBc3N1bXB0aW9ucy5tYXAoKG1ldGFMZXZlbEFzc3VtcHRpb24pID0+IHtcbiAgICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uSlNPTiA9IG1ldGFMZXZlbEFzc3VtcHRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04oZGVjbGFyZWRNZXRhdmFyaWFibGVzKSB7XG4gIGNvbnN0IGRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXMubWFwKChkZWNsYXJlZE1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IGRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT047XG59XG5cbmZ1bmN0aW9uIGZpbmRUeXBlQnlOYW1lKG5hbWUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRNZXRhVHlwZUJ5TmFtZShuYW1lLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG5hbWUsICAvLy9cbiAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuIl0sIm5hbWVzIjpbImFyaWFibGVUb1ZhcmlhYmxlSlNPTiIsImFzc2VydGlvbnNGcm9tSlNPTiIsImFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OIiwiYXNzdW1wdGlvbnNGcm9tSlNPTiIsImFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04iLCJjb21iaW5hdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTiIsImNvbmNsdXNpb25Gcm9tSlNPTiIsImNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIiwiY29uc3RydWN0b3JzRnJvbUpTT04iLCJjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZVRvREVjbGFyZWRNZXRhdmFyaWFibGVKU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwiZXBoZW1lcmFsQ29udGV4dEZyb21KU09OIiwiZXBoZW1lcmFsQ29udGV4dFRvRXBoZW1lcmFsQ29udGV4dEpTT04iLCJlcXVhbGl0aWVzRnJvbUpTT04iLCJlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTiIsImZyYW1lRnJvbUpTT04iLCJmcmFtZVRvRnJhbWVKU09OIiwiZnJhbWVzRnJvbUpTT04iLCJmcmFtZXNUb0ZyYW1lc0pTT04iLCJoeXBvdGhlc2VzRnJvbUpTT04iLCJoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTiIsImlkZW50aWZpZXJGcm9tSlNPTiIsImlkZW50aWZpZXJUb0lkZW50aWZpZXJKU09OIiwianVkZ2VtZW50c0Zyb21KU09OIiwianVkZ2VtZW50c1RvSnVkZ2VtZW50c0pTT04iLCJsYWJlbEZyb21KU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImxhYmVsc0Zyb21KU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwibGVtbWFzRnJvbUpTT04iLCJtZXRhTGVtbWFzRnJvbUpTT04iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21KU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbnNUb01ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiIsIm1ldGFUeXBlRnJvbUpTT04iLCJtZXRhVHlwZVRvTWV0YVR5cGVKU09OIiwibWV0YXRoZW9yZW1zRnJvbUpTT04iLCJtZXRhdGhlb3JlbXNUb01ldGF0aGVvcmVtc0pTT04iLCJtZXRhdmFyaWFibGVGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwibmFtZUZyb21KU09OIiwibmFtZVRvTmFtZUpTT04iLCJuZWdhdGVkRnJvbUpTT04iLCJuZWdhdGVkVG9OZWdhdGVkSlNPTiIsIm5vbWluYWxUeXBlTmFtZUZyb21KU09OIiwibm9taW5hbFR5cGVOYW1lVG9Ob21pbmFsVHlwZU5hbWVKU09OIiwicGFyYW1ldGVyc0Zyb21KU09OIiwicGFyYW1ldGVyc1RvUGFyYW1ldGVyc0pTT04iLCJwcmVtaXNlc0Zyb21KU09OIiwicHJlbWlzZXNUb1ByZW1pc2VzSlNPTiIsInByb2NlZHVyZUNhbGxGcm9tSlNPTiIsInByb2NlZHVyZUNhbGxUb1Byb2NlZHVyZUNhbGxKU09OIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbUpTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VUb1Byb2NlZHVyZVJlZmVyZW5jZUpTT04iLCJwcm9wZXJ0aWVzRnJvbUpTT04iLCJwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTiIsInByb3BlcnR5UmVsYXRpb25zRnJvbUpTT04iLCJwcm9wZXJ0eVJlbGF0aW9uc1RvUHJvcGVydHlSZWxhdGlvbnNKU09OIiwicHJvdmlzaW9uYWxGcm9tSlNPTiIsInByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04iLCJyZWZlcmVuY2VGcm9tSlNPTiIsInJlZmVyZW5jZVRvUmVmZXJlbmNlSlNPTiIsInJlZmVyZW5jZXNGcm9tSlNPTiIsInJlZmVyZW5jZXNUb1JlZmVyZW5jZXNKU09OIiwic2lnbmF0dXJlRnJvbUpTT04iLCJzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04iLCJzdGF0ZW1lbnRGcm9tSlNPTiIsInN0YXRlbWVudFRvU3RhdGVtZW50SlNPTiIsInN0YXRlbWVudHNGcm9tSlNPTiIsInN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OIiwic3Vic3RpdHV0aW9uRnJvbVN1YnN0aXR1dGlvbkpTT04iLCJzdWJzdGl0dXRpb25zRnJvbUpTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsInN1cGVyVHlwZXNGcm9tSlNPTiIsInN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04iLCJ0ZXJtRnJvbUpTT04iLCJ0ZXJtVG9UZXJtSlNPTiIsInRlcm1zRnJvbUpTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwidHlwZUZyb21KU09OIiwidHlwZVByZWZpeGVzRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04iLCJ0eXBlVG9UeXBlSlNPTiIsInR5cGVzRnJvbUpTT04iLCJ0eXBlc1RvVHlwZXNKU09OIiwidmFyaWFibGVzRnJvbUpTT04iLCJ2YXJpYWJsZXNUb1ZhcmlhYmxlc0pTT04iLCJqc29uIiwiY29udGV4dCIsIm5hbWUiLCJuYW1lSlNPTiIsInRlcm0iLCJ0ZXJtSlNPTiIsIlRlcm0iLCJlbGVtZW50cyIsImZyb21KU09OIiwidHlwZSIsInN0cmluZyIsImZpbmRUeXBlQnlOYW1lIiwibGFiZWwiLCJMYWJlbCIsImxhYmVsSlNPTiIsImZyYW1lIiwiZnJhbWVKU09OIiwiRnJhbWUiLCJsZW1tYXMiLCJuZWdhdGVkIiwibWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU5hbWUiLCJzdGF0ZW1lbnQiLCJTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRKU09OIiwiZGVkdWN0aW9uIiwiRGVkdWN0aW9uIiwiZGVkdWN0aW9uSlNPTiIsInNpZ25hdHVyZSIsIlNpZ25hdHVyZSIsInNpZ25hdHVyZUpTT04iLCJyZWZlcmVuY2UiLCJSZWZlcmVuY2UiLCJyZWZlcmVuY2VKU09OIiwiaWRlbnRpZmllciIsImlkZW50aWZpZXJKU09OIiwiY29uY2x1c2lvbiIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW9uSlNPTiIsIm1ldGFMZW1tYXMiLCJwcm92aXNpb25hbCIsIm1ldGF2YXJpYWJsZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUpTT04iLCJwcm9jZWR1cmVDYWxsIiwiUHJvY2VkdXJlQ2FsbCIsInByb2NlZHVyZUNhbGxKU09OIiwibm9taW5hbFR5cGVOYW1lIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlSlNPTiIsInR5cGVzIiwidHlwZXNKU09OIiwiVHlwZSIsImZvckVhY2giLCJ0eXBlSlNPTiIsInB1c2giLCJ0ZXJtcyIsInRlcm1zSlNPTiIsIm1hcCIsImZyYW1lcyIsImZyYW1lc0pTT04iLCJsYWJlbHMiLCJsYWJlbHNKU09OIiwicHJlbWlzZXMiLCJQcmVtaXNlIiwicHJlbWlzZXNKU09OIiwicHJlbWlzZUpTT04iLCJwcmVtaXNlIiwidmFyaWFibGVzIiwiVmFyaWFibGUiLCJ2YXJpYWJsZXNKU09OIiwidmFyaWFibGVKU09OIiwidmFyaWFibGUiLCJlcXVhbGl0aWVzIiwiRXF1YWxpdHkiLCJlcXVhbGl0aWVzSlNPTiIsImVxdWFsaXR5SlNPTiIsImVxdWFsaXR5IiwicHJvcGVydGllcyIsIlByb3BlcnR5IiwicHJvcGVydGllc0pTT04iLCJwcm9wZXJ0eUpTT04iLCJwcm9wZXJ0eSIsInN1cGVyVHlwZXMiLCJzdXBlclR5cGVzSlNPTiIsInN1cGVyVHlwZUpTT04iLCJzdXBlclR5cGUiLCJoeXBvdGhlc2VzIiwiSHlwb3RoZXNpcyIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNpc0pTT04iLCJoeXBvdGhlc2lzIiwicGFyYW1ldGVycyIsIlBhcmFtZXRlciIsInBhcmFtZXRlcnNKU09OIiwicGFyYW1ldGVySlNPTiIsInBhcmFtZXRlciIsImp1ZGdlbWVudHMiLCJKdWRnZW1lbnQiLCJqdWRnZW1lbnRzSlNPTiIsImp1ZGdlbWVudEpTT04iLCJqdWRnZW1lbnQiLCJzdGF0ZW1lbnRzIiwic3RhdGVtZW50c0pTT04iLCJhc3NlcnRpb25zIiwiVHlwZUFzc2VydGlvbiIsIkRlZmluZWRBc3NlcnRpb24iLCJQcm9wZXJ0eUFzc2VydGlvbiIsIlN1YnByb29mQXNzZXJ0aW9uIiwiU2F0aXNmaWVzQXNzZXJ0aW9uIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiYXNzZXJ0aW9uc0pTT04iLCJhc3NlcnRpb25KU09OIiwiYXNzZXJ0aW9uIiwicmVmZXJlbmNlcyIsInJlZmVyZW5jZXNKU09OIiwiY29tYmluYXRvcnMiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvcnNKU09OIiwiY29tYmluYXRvckpTT04iLCJjb21iaW5hdG9yIiwiYXNzdW1wdGlvbnMiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbkpTT04iLCJhc3N1bXB0aW9uIiwidHlwZVByZWZpeGVzIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0pTT04iLCJ0eXBlUHJlZml4SlNPTiIsInR5cGVQcmVmaXgiLCJjb25zdHJ1Y3RvcnMiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvckpTT04iLCJjb25zdHJ1Y3RvciIsIm1ldGF0aGVvcmVtcyIsIk1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW1zSlNPTiIsIm1ldGF0aGVvcmVtSlNPTiIsIm1ldGF0aGVvcmVtIiwic3VwcG9zaXRpb25zIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25KU09OIiwic3VwcG9zaXRpb24iLCJzdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9uc0pTT04iLCJzdWJzdGl0dXRpb25KU09OIiwic3Vic3RpdHV0aW9uIiwibWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXNKU09OIiwicmVsZWFzZUNvbnRleHQiLCJlbXBoZW1lcmFsQ29udGV4dCIsIkVwaGVtZXJhbENvbnRleHQiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImRlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlY2xhcmVkVmFyaWFibGVKU09OIiwiZGVjbGFyZWRWYXJpYWJsZSIsInByb3BlcnR5UmVsYXRpb25zIiwiUHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb25zSlNPTiIsInByb3BlcnR5UmVsYXRpb25KU09OIiwicHJvcGVydHlSZWxhdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25zIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiIsIm1ldGFMZXZlbEFzc3VtcHRpb25KU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZSIsInRvSlNPTiIsIm5lZ2F0ZWRKU09OIiwiYXJpYWJsZSIsImFyaWFibGVKU09OIiwibWV0YVR5cGVKU09OIiwicHJvdmlzaW9uYWxKU09OIiwibm9taW5hbFR5cGVOYW1lSlNPTiIsImVwaGVtZXJhbENvbnRleHQiLCJlcGhlbWVyYWxDb250ZXh0SlNPTiIsIlRlcm1TdWJzdGl0dXRpb24iLCJGcmFtZVN1YnN0aXR1dGlvbiIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInR5cGVOYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwibWV0YVR5cGVO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
1073
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IEVwaGVtZXJhbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvZXBoZW1lcmFsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBuYW1lIH0gPSBqc29uO1xuXG4gIGNvbnN0IG5hbWVKU09OID0gbmFtZTsgIC8vL1xuXG4gIG5hbWUgPSBuYW1lSlNPTjsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdGVybSB9ID0ganNvbjtcblxuICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1KU09OID0gdGVybTsgIC8vL1xuXG4gICAganNvbiA9IHRlcm1KU09OOyAgLy8vXG5cbiAgICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzO1xuXG4gICAgdGVybSA9IFRlcm0uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHR5cGUgfSA9IGpzb247XG5cbiAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gdHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbmFtZSA9IHN0cmluZzsgIC8vL1xuXG4gICAgdHlwZSA9IGZpbmRUeXBlQnlOYW1lKG5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWwgfSA9IGpzb247XG5cbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgbGFiZWxKU09OID0gbGFiZWw7ICAvLy9cblxuICBqc29uID0gbGFiZWxKU09OOyAvLy9cblxuICBsYWJlbCA9IExhYmVsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBmcmFtZSB9ID0ganNvbjtcblxuICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCBmcmFtZUpTT04gPSBmcmFtZTsgIC8vL1xuXG4gICAganNvbiA9IGZyYW1lSlNPTjsgIC8vL1xuXG4gICAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHM7XG5cbiAgICBmcmFtZSA9IEZyYW1lLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCBsZW1tYXMgPSBbXTtcblxuICByZXR1cm4gbGVtbWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBuZWdhdGVkIH0gPSBqc29uO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGFUeXBlIH0gPSBqc29uO1xuXG4gIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgIGpzb24gPSBtZXRhVHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbmFtZSA9IHN0cmluZzsgIC8vL1xuXG4gICAgbWV0YVR5cGUgPSBmaW5kTWV0YVR5cGVCeU5hbWUobmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN0YXRlbWVudCA9IG51bGwgfSA9IGpzb247XG5cbiAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnRKU09OID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICBqc29uID0gc3RhdGVtZW50SlNPTjsgLy8vXG5cbiAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBkZWR1Y3Rpb24gfSA9IGpzb247XG5cbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uOyAgLy8vXG5cbiAganNvbiA9IGRlZHVjdGlvbkpTT047ICAvLy9cblxuICBkZWR1Y3Rpb24gPSBEZWR1Y3Rpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc2lnbmF0dXJlID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAoc2lnbmF0dXJlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmU7ICAvLy9cblxuICAgIGpzb24gPSBzaWduYXR1cmVKU09OOyAvLy9cblxuICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHJlZmVyZW5jZSB9ID0ganNvbjtcblxuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZUpTT04gPSByZWZlcmVuY2U7ICAvLy9cblxuICBqc29uID0gcmVmZXJlbmNlSlNPTjsgLy8vXG5cbiAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBpZGVudGlmaWVyIH0gPSBqc29uO1xuXG4gIGNvbnN0IGlkZW50aWZpZXJKU09OID0gaWRlbnRpZmllcjsgIC8vL1xuXG4gIGlkZW50aWZpZXIgPSBpZGVudGlmaWVySlNPTjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgY29uY2x1c2lvbiB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25jbHVzaW9uSlNPTiA9IGNvbmNsdXNpb247ICAvLy9cblxuICBqc29uID0gY29uY2x1c2lvbkpTT047ICAvLy9cblxuICBjb25jbHVzaW9uID0gQ29uY2x1c2lvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFMZW1tYXMgPSBbXTtcblxuICByZXR1cm4gbWV0YUxlbW1hcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IHByb3Zpc2lvbmFsIH0gPSBqc29uO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXZhcmlhYmxlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZTsgIC8vL1xuXG4gIGpzb24gPSBtZXRhdmFyaWFibGVKU09OOyAvLy9cblxuICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByb2NlZHVyZUNhbGwgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsSlNPTiA9IHByb2NlZHVyZUNhbGw7ICAvLy9cblxuICAgIGpzb24gPSBwcm9jZWR1cmVDYWxsSlNPTjsgLy8vXG5cbiAgICBwcm9jZWR1cmVDYWxsID0gUHJvY2VkdXJlQ2FsbC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9taW5hbFR5cGVOYW1lRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IG5vbWluYWxUeXBlTmFtZSB9ID0ganNvbjtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VKU09OID0gcHJvY2VkdXJlUmVmZXJlbmNlOyAgLy8vXG5cbiAganNvbiA9IHByb2NlZHVyZVJlZmVyZW5jZUpTT047ICAvLy9cblxuICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBQcm9jZWR1cmVSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbUpTT04oanNvbiwgdHlwZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB0eXBlczogdHlwZXNKU09OIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHM7XG5cbiAgdHlwZXNKU09OLmZvckVhY2goKHR5cGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZSA9IFR5cGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0eXBlcy5wdXNoKHR5cGUpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0ZXJtcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0ZXJtc0pTT04gPSB0ZXJtczsgLy8vXG5cbiAgdGVybXMgPSB0ZXJtc0pTT04ubWFwKCh0ZXJtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0ZXJtSlNPTiwgIC8vL1xuICAgICAgICAgIHRlcm0gPSBUZXJtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBydWxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBydWxlc0pTT04gPSBydWxlczsgLy8vXG5cbiAgcnVsZXMgPSBydWxlc0pTT04ubWFwKChydWxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBydWxlSlNPTiwgIC8vL1xuICAgICAgICAgIHJ1bGUgPSBSdWxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZnJhbWVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgIGZyYW1lc0pTT04gPSBmcmFtZXM7IC8vL1xuXG4gIGZyYW1lcyA9IGZyYW1lc0pTT04ubWFwKChmcmFtZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZnJhbWVKU09OLCAgLy8vXG4gICAgICAgICAgZnJhbWUgPSBGcmFtZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbHNKU09OID0gbGFiZWxzOyAgLy8vXG5cbiAgbGFiZWxzID0gbGFiZWxzSlNPTi5tYXAoKGxhYmVsSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBsYWJlbEpTT04sIC8vL1xuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGF4aW9tcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21zSlNPTiA9IGF4aW9tczsgLy8vXG5cbiAgYXhpb21zID0gYXhpb21zSlNPTi5tYXAoKGF4aW9tSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBheGlvbUpTT04sICAvLy9cbiAgICAgICAgICBheGlvbSA9IEF4aW9tLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9KTtcblxuICByZXR1cm4gYXhpb21zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByZW1pc2VzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByZW1pc2VzSlNPTiA9IHByZW1pc2VzOyAgLy8vXG5cbiAgcHJlbWlzZXMgPSBwcmVtaXNlc0pTT04ubWFwKChwcmVtaXNlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwcmVtaXNlSlNPTiwgLy8vXG4gICAgICAgICAgcHJlbWlzZSA9IFByZW1pc2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRoZW9yZW1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zOyAvLy9cblxuICB0aGVvcmVtcyA9IHRoZW9yZW1zSlNPTi5tYXAoKHRoZW9yZW1KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHRoZW9yZW1KU09OLCAgLy8vXG4gICAgICAgICAgdGhlb3JlbSA9IFRoZW9yZW0uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoZW9yZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHZhcmlhYmxlc0pTT04gPSB2YXJpYWJsZXM7IC8vL1xuXG4gIHZhcmlhYmxlcyA9IHZhcmlhYmxlc0pTT04ubWFwKCh2YXJpYWJsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdmFyaWFibGVKU09OLCAgLy8vXG4gICAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGVxdWFsaXRpZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllczsgLy8vXG5cbiAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNKU09OLm1hcCgoZXF1YWxpdHlKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGVxdWFsaXR5SlNPTiwgIC8vL1xuICAgICAgICAgIGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH0pO1xuXG4gIHJldHVybiBlcXVhbGl0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJvcGVydGllcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvcGVydGllc0pTT04gPSBwcm9wZXJ0aWVzOyAvLy9cblxuICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0pTT04ubWFwKChwcm9wZXJ0eUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcHJvcGVydHlKU09OLCAgLy8vXG4gICAgICAgICAgcHJvcGVydHkgPSBQcm9wZXJ0eS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IHN1cGVyVHlwZXM6IHN1cGVyVHlwZXNKU09OIH0gPSBqc29uO1xuXG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzSlNPTi5tYXAoKHN1cGVyVHlwZUpTT04pID0+IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gc3VwZXJUeXBlSlNPTiwgIC8vL1xuICAgICAgICAgICAgICAgIHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICAgIG5hbWUgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgICB0eXBlID0gZmluZFR5cGVCeU5hbWUobmFtZSwgY29udGV4dCksXG4gICAgICAgICAgICAgICAgc3VwZXJUeXBlID0gdHlwZTsgLy8vXG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGh5cG90aGVzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzOyAgLy8vXG5cbiAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLm1hcCgoaHlwb3RoZXNpc0pTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gaHlwb3RoZXNpc0pTT04sIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXMgPSBIeXBvdGhlc2lzLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcGFyYW1ldGVycyB9ID0ganNvbjtcblxuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnNKU09OID0gcGFyYW1ldGVyczsgLy8vXG5cbiAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNKU09OLm1hcCgocGFyYW1ldGVySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwYXJhbWV0ZXJKU09OLCAgLy8vXG4gICAgICAgICAgcGFyYW1ldGVyID0gUGFyYW1ldGVyLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBqdWRnZW1lbnRzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAganVkZ2VtZW50c0pTT04gPSBqdWRnZW1lbnRzOyAvLy9cblxuICBqdWRnZW1lbnRzID0ganVkZ2VtZW50c0pTT04ubWFwKChqdWRnZW1lbnRKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGp1ZGdlbWVudEpTT04sICAvLy9cbiAgICAgICAgICBqdWRnZW1lbnQgPSBKdWRnZW1lbnQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9KTtcblxuICByZXR1cm4ganVkZ2VtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN0YXRlbWVudHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHM7IC8vL1xuXG4gIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzSlNPTi5tYXAoKHN0YXRlbWVudEpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3RhdGVtZW50SlNPTiwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgYXNzZXJ0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGVBc3NlcnRpb24sIERlZmluZWRBc3NlcnRpb24sIFByb3BlcnR5QXNzZXJ0aW9uLCBTdWJwcm9vZkFzc2VydGlvbiwgU2F0aXNmaWVzQXNzZXJ0aW9uLCBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnM7IC8vL1xuXG4gIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTi5tYXAoKGFzc2VydGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gYXNzZXJ0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGFzc2VydGlvbiA9IFR5cGVBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgRGVmaW5lZEFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eUFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9vZkFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBTYXRpc2ZpZXNBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVkQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc2VydGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyByZWZlcmVuY2VzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlc0pTT04gPSByZWZlcmVuY2VzOyAvLy9cblxuICByZWZlcmVuY2VzID0gcmVmZXJlbmNlc0pTT04ubWFwKChyZWZlcmVuY2VKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHJlZmVyZW5jZUpTT04sICAvLy9cbiAgICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9KTtcblxuICByZXR1cm4gcmVmZXJlbmNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25qZWN0dXJlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlczsgLy8vXG5cbiAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04ubWFwKChjb25qZWN0dXJlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25qZWN0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmplY3R1cmUgPSBDb25qZWN0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb21iaW5hdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9yczsgLy8vXG5cbiAgY29tYmluYXRvcnMgPSBjb21iaW5hdG9yc0pTT04ubWFwKChjb21iaW5hdG9ySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb21iaW5hdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3IgPSBDb21iaW5hdG9yLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBhc3N1bXB0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgIGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zOyAvLy9cblxuICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zSlNPTi5tYXAoKGFzc3VtcHRpb25KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGFzc3VtcHRpb25KU09OLCAgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IEFzc3VtcHRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0eXBlUHJlZml4ZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgdHlwZVByZWZpeGVzSlNPTiA9IHR5cGVQcmVmaXhlczsgLy8vXG5cbiAgdHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzSlNPTi5tYXAoKHR5cGVQcmVmaXhKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHR5cGVQcmVmaXhKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZVByZWZpeCA9IFR5cGVQcmVmaXguZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgY29uc3RydWN0b3JzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzOyAvLy9cblxuICBjb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNKU09OLm1hcCgoY29uc3RydWN0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbnN0cnVjdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF0aGVvcmVtcyB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF0aGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXRoZW9yZW1zSlNPTiA9IG1ldGF0aGVvcmVtczsgLy8vXG5cbiAgbWV0YXRoZW9yZW1zID0gbWV0YXRoZW9yZW1zSlNPTi5tYXAoKG1ldGF0aGVvcmVtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBtZXRhdGhlb3JlbUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdGhlb3JlbSA9IE1ldGF0aGVvcmVtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXRoZW9yZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdXBwb3NpdGlvbnMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnM7ICAvLy9cblxuICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNKU09OLm1hcCgoc3VwcG9zaXRpb25KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHN1cHBvc2l0aW9uSlNPTiwgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb24gPSBTdXBwb3NpdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN1YnN0aXR1dGlvbnMgfSA9IGpzb247ICAvLy9cblxuICBjb25zdCBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnM7IC8vL1xuXG4gIHN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zSlNPTi5tYXAoKHN1YnN0aXR1dGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3Vic3RpdHV0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdWJzdGl0dXRpb25KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhdmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzOyAvLy9cblxuICBtZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0pTT04ubWFwKChtZXRhdmFyaWFibGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IG1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVwaGVtZXJhbENvbnRleHRGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gY29udGV4dDtcblxuICAoe2NvbnRleHR9ID0ganNvbik7XG5cbiAganNvbiA9IGNvbnRleHQ7IC8vL1xuXG4gIGNvbnRleHQgPSByZWxlYXNlQ29udGV4dDsgLy8vXG5cbiAgY29uc3QgZW1waGVtZXJhbENvbnRleHQgPSBFcGhlbWVyYWxDb250ZXh0LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBlbXBoZW1lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkVmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBkZWNsYXJlZFZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXNKU09OID0gZGVjbGFyZWRWYXJpYWJsZXM7IC8vL1xuXG4gIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNKU09OLm1hcCgoZGVjbGFyZWRWYXJpYWJsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZGVjbGFyZWRWYXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSB2YXJpYWJsZTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9wZXJ0eVJlbGF0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IFByb3BlcnR5UmVsYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uc0pTT04gPSBwcm9wZXJ0eVJlbGF0aW9uczsgLy8vXG5cbiAgcHJvcGVydHlSZWxhdGlvbnMgPSBwcm9wZXJ0eVJlbGF0aW9uc0pTT04ubWFwKChwcm9wZXJ0eVJlbGF0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwcm9wZXJ0eVJlbGF0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBQcm9wZXJ0eVJlbGF0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhTGV2ZWxBc3N1bXB0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGFMZXZlbEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT04gPSBtZXRhTGV2ZWxBc3N1bXB0aW9uczsgLy8vXG5cbiAgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT04ubWFwKChtZXRhTGV2ZWxBc3N1bXB0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBtZXRhTGV2ZWxBc3N1bXB0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBNZXRhTGV2ZWxBc3N1bXB0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZGVjbGFyZWRNZXRhdmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlczsgLy8vXG5cbiAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTi5tYXAoKGRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVUb05hbWVKU09OKG5hbWUpIHtcbiAgY29uc3QgbmFtZUpTT04gPSBuYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVRvVGVybUpTT04odGVybSkge1xuICBjb25zdCB0ZXJtSlNPTiA9ICh0ZXJtICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICB0ZXJtLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gdGVybUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlVG9UeXBlSlNPTih0eXBlKSB7XG4gIGNvbnN0IHR5cGVKU09OID0gKHR5cGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgIHR5cGUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiB0eXBlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lVG9GcmFtZUpTT04oZnJhbWUpIHtcbiAgY29uc3QgZnJhbWVKU09OID0gKGZyYW1lICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgZnJhbWUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gZnJhbWVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxUb0xhYmVsSlNPTihsYWJlbCkge1xuICBjb25zdCBsYWJlbEpTT04gPSBsYWJlbC50b0pTT04oKTtcblxuICByZXR1cm4gbGFiZWxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRvTmVnYXRlZEpTT04obmVnYXRlZCkge1xuICBjb25zdCBuZWdhdGVkSlNPTiA9IG5lZ2F0ZWQ7ICAvLy9cblxuICByZXR1cm4gbmVnYXRlZEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmlhYmxlVG9WYXJpYWJsZUpTT04oYXJpYWJsZSkge1xuICBjb25zdCBhcmlhYmxlSlNPTiA9IGFyaWFibGUudG9KU09OKCk7XG5cbiAgcmV0dXJuIGFyaWFibGVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVUb01ldGFUeXBlSlNPTihtZXRhVHlwZSkge1xuICBjb25zdCBtZXRhVHlwZUpTT04gPSAobWV0YVR5cGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhVHlwZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBtZXRhVHlwZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VUb1JlZmVyZW5jZUpTT04ocmVmZXJlbmNlKSB7XG4gIGNvbnN0IHJlZmVyZW5jZUpTT04gPSByZWZlcmVuY2UudG9KU09OKCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04oc3RhdGVtZW50KSB7XG4gIGNvbnN0IHN0YXRlbWVudEpTT04gPSAoc3RhdGVtZW50ICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gc3RhdGVtZW50SlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTihkZWR1Y3Rpb24pIHtcbiAgY29uc3QgZGVkdWN0aW9uSlNPTiA9IGRlZHVjdGlvbi50b0pTT04oKTtcblxuICByZXR1cm4gZGVkdWN0aW9uSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTihzaWduYXR1cmUpIHtcbiAgY29uc3Qgc2lnbmF0dXJlSlNPTiA9IChzaWduYXR1cmUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBzaWduYXR1cmVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllclRvSWRlbnRpZmllckpTT04oaWRlbnRpZmllcikge1xuICBjb25zdCBpZGVudGlmaWVySlNPTiA9IGlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllckpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTihjb25jbHVzaW9uKSB7XG4gIGNvbnN0IGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvbi50b0pTT04oKTtcblxuICByZXR1cm4gY29uY2x1c2lvbkpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OKHByb3Zpc2lvbmFsKSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsSlNPTiA9IHByb3Zpc2lvbmFsOyAgLy8vXG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTihtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxUb1Byb2NlZHVyZUNhbGxKU09OKHByb2NlZHVyZUNhbGwpIHtcbiAgY29uc3QgcHJvY2VkdXJlQ2FsbEpTT04gPSAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbC50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9taW5hbFR5cGVOYW1lVG9Ob21pbmFsVHlwZU5hbWVKU09OKG5vbWluYWxUeXBlTmFtZSkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWVKU09OID0gbm9taW5hbFR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcGhlbWVyYWxDb250ZXh0VG9FcGhlbWVyYWxDb250ZXh0SlNPTihlcGhlbWVyYWxDb250ZXh0KSB7XG4gIGNvbnN0IGVwaGVtZXJhbENvbnRleHRKU09OID0gZXBoZW1lcmFsQ29udGV4dC50b0pTT04oKTtcblxuICByZXR1cm4gZXBoZW1lcmFsQ29udGV4dEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VUb1Byb2NlZHVyZVJlZmVyZW5jZUpTT04ocHJvY2VkdXJlUmVmZXJlbmNlKSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZUpTT04gPSBwcm9jZWR1cmVSZWZlcmVuY2UudG9KU09OKCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlZE1ldGF2YXJpYWJsZVRvREVjbGFyZWRNZXRhdmFyaWFibGVKU09OKGRlY2xhcmVkTWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IGRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlLnRvSlNPTigpO1xuXG4gIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3Vic3RpdHV0aW9uSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24sIFN0YXRlbWVudFN1YnN0aXR1dGlvbiwgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gVGVybVN1YnN0aXR1dGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnRTdWJzdGl0dXRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zSlNPTiA9IHRlcm1zLm1hcCgodGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1KU09OID0gdGVybS50b0pTT04oKTtcblxuICAgIHJldHVybiB0ZXJtSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzVG9UeXBlc0pTT04odHlwZXMpIHtcbiAgY29uc3QgdHlwZXNKU09OID0gdHlwZXMubWFwKCh0eXBlKSA9PiB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHR5cGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gdHlwZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNUb1J1bGVzSlNPTihydWxlcykge1xuICBjb25zdCBydWxlc0pTT04gPSBydWxlcy5tYXAoKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlSlNPTiA9IHJ1bGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcnVsZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBydWxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNUb0xhYmVsc0pTT04obGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHMubWFwKChsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGxhYmVsSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVsc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZXNUb0ZyYW1lc0pTT04oZnJhbWVzKSB7XG4gIGNvbnN0IGZyYW1lc0pTT04gPSBmcmFtZXMubWFwKChmcmFtZSkgPT4ge1xuICAgIGNvbnN0IGZyYW1lSlNPTiA9IGZyYW1lLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGZyYW1lSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbXNUb0F4aW9tc0pTT04oYXhpb21zKSB7XG4gIGNvbnN0IGF4aW9tc0pTT04gPSBheGlvbXMubWFwKChheGlvbSkgPT4ge1xuICAgIGNvbnN0IGF4aW9tSlNPTiA9IGF4aW9tLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGF4aW9tSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGF4aW9tc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc1RvUHJlbWlzZXNKU09OKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzSlNPTiA9IHByZW1pc2VzLm1hcCgocHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VKU09OID0gcHJlbWlzZS50b0pTT04oKTtcblxuICAgIHJldHVybiBwcmVtaXNlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1zVG9UaGVvcmVtc0pTT04odGhlb3JlbXMpIHtcbiAgY29uc3QgdGhlb3JlbXNKU09OID0gdGhlb3JlbXMubWFwKCh0aGVvcmVtKSA9PiB7XG4gICAgY29uc3QgdGhlb3JlbUpTT04gPSB0aGVvcmVtLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHRoZW9yZW1KU09OO1xuICB9KTtcblxuICByZXR1cm4gdGhlb3JlbXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVzVG9WYXJpYWJsZXNKU09OKHZhcmlhYmxlcykge1xuICBjb25zdCB2YXJpYWJsZXNKU09OID0gdmFyaWFibGVzLm1hcCgodmFyaWFibGUpID0+IHtcbiAgICBjb25zdCB2YXJpYWJsZUpTT04gPSB2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHJldHVybiB2YXJpYWJsZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiB2YXJpYWJsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04oaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXMubWFwKChoeXBvdGhlc2lzKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpc0pTT04gPSBoeXBvdGhlc2lzLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNKU09OO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTihzdXBlclR5cGVzKSB7XG4gIGNvbnN0IHN1cGVyVHlwZXNKU09OID0gc3VwZXJUeXBlcy5tYXAoKHN1cGVyVHlwZSkgPT4ge1xuICAgIGNvbnN0IHN1cGVyVHlwZUpTT04gPSBzdXBlclR5cGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1RvUGFyYW1ldGVyc0pTT04ocGFyYW1ldGVycykge1xuICBjb25zdCBwYXJhbWV0ZXJzSlNPTiA9IHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJKU09OID0gcGFyYW1ldGVyLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlckpTT047XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcHJvcGVydGllc0pTT04gPSBwcm9wZXJ0aWVzLm1hcCgocHJvcGVydHkpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eUpTT04gPSBwcm9wZXJ0eS50b0pTT04oKTtcblxuICAgIHJldHVybiBwcm9wZXJ0eUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OKGp1ZGdlbWVudHMpIHtcbiAgY29uc3QganVkZ2VtZW50c0pTT04gPSBqdWRnZW1lbnRzLm1hcCgoanVkZ2VtZW50KSA9PiB7XG4gICAgY29uc3QganVkZ2VtZW50SlNPTiA9IGp1ZGdlbWVudC50b0pTT04oKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRKU09OO1xuICB9KTtcblxuICByZXR1cm4ganVkZ2VtZW50c0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTihlcXVhbGl0aWVzKSB7XG4gIGNvbnN0IGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllcy5tYXAoKGVxdWFsaXR5KSA9PiB7XG4gICAgY29uc3QgZXF1YWxpdHlKU09OID0gZXF1YWxpdHkudG9KU09OKCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlKU09OO1xuICB9KTtcblxuICByZXR1cm4gZXF1YWxpdGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTihzdGF0ZW1lbnRzKSB7XG4gIGNvbnN0IHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50cy5tYXAoKHN0YXRlbWVudCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnQudG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04oYXNzZXJ0aW9ucykge1xuICBjb25zdCBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnMubWFwKChhc3NlcnRpb24pID0+IHtcbiAgICBjb25zdCBhc3NlcnRpb25KU09OID0gYXNzZXJ0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBhc3NlcnRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZXNUb1JlZmVyZW5jZXNKU09OKHJlZmVyZW5jZXMpIHtcbiAgY29uc3QgcmVmZXJlbmNlc0pTT04gPSByZWZlcmVuY2VzLm1hcCgocmVmZXJlbmNlKSA9PiB7XG4gICAgY29uc3QgcmVmZXJlbmNlSlNPTiA9IHJlZmVyZW5jZS50b0pTT04oKTtcblxuICAgIHJldHVybiByZWZlcmVuY2VKU09OO1xuICB9KTtcblxuICByZXR1cm4gcmVmZXJlbmNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlc1RvQ29uamVjdHVyZXNKU09OKGNvbmplY3R1cmVzKSB7XG4gIGNvbnN0IGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzLm1hcCgoY29uamVjdHVyZSkgPT4ge1xuICAgIGNvbnN0IGNvbmplY3R1cmVKU09OID0gY29uamVjdHVyZS50b0pTT04oKTtcblxuICAgIHJldHVybiBjb25qZWN0dXJlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04oY29tYmluYXRvcnMpIHtcbiAgY29uc3QgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnMubWFwKChjb21iaW5hdG9yKSA9PiB7XG4gICAgY29uc3QgY29tYmluYXRvckpTT04gPSBjb21iaW5hdG9yLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JKU09OO1xuICB9KTtcblxuICByZXR1cm4gY29tYmluYXRvcnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTihhc3N1bXB0aW9ucykge1xuICBjb25zdCBhc3N1bXB0aW9uc0pTT04gPSBhc3N1bXB0aW9ucy5tYXAoKGFzc3VtcHRpb24pID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uSlNPTiA9IGFzc3VtcHRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04oc3VwcG9zaXRpb25zKSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnMubWFwKChzdXBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uSlNPTiA9IHN1cHBvc2l0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04oY29uc3RydWN0b3JzKSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnMubWFwKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9ySlNPTiA9IGNvbnN0cnVjdG9yLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9ySlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbXNUb01ldGF0aGVvcmVtc0pTT04obWV0YXRoZW9yZW1zKSB7XG4gIGNvbnN0IG1ldGF0aGVvcmVtc0pTT04gPSBtZXRhdGhlb3JlbXMubWFwKChtZXRhdGhlb3JlbSkgPT4ge1xuICAgIGNvbnN0IG1ldGF0aGVvcmVtSlNPTiA9IG1ldGF0aGVvcmVtLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIG1ldGF0aGVvcmVtSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04odHlwZVByZWZpeGVzKSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXMubWFwKCh0eXBlUHJlZml4KSA9PiB7XG4gICAgY29uc3QgdHlwZVByZWZpeEpTT04gPSB0eXBlUHJlZml4LnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhKU09OO1xuICB9KTtcblxuICByZXR1cm4gdHlwZVByZWZpeGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpIHtcbiAgY29uc3Qgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zLm1hcCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uSlNPTiA9IHN1YnN0aXR1dGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlcy5tYXAoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbnNUb1Byb3BlcnR5UmVsYXRpb25zSlNPTihwcm9wZXJ0eVJlbGF0aW9ucykge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uc0pTT04gPSBwcm9wZXJ0eVJlbGF0aW9ucy5tYXAoKHByb3BlcnR5UmVsYXRpb24pID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uSlNPTiA9IHByb3BlcnR5UmVsYXRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlZFZhcmlhYmxlc1RvRGVjbGFyZWRWYXJpYWJsZXNKU09OKGRlY2xhcmVkVmFyaWFibGVzKSB7XG4gIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkVmFyaWFibGVzLm1hcCgoZGVjbGFyZWRWYXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVKU09OID0gZGVjbGFyZWRWYXJpYWJsZS50b0pTT04oKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25zVG9NZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT04obWV0YUxldmVsQXNzdW1wdGlvbnMpIHtcbiAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbnNKU09OID0gbWV0YUxldmVsQXNzdW1wdGlvbnMubWFwKChtZXRhTGV2ZWxBc3N1bXB0aW9uKSA9PiB7XG4gICAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbkpTT04gPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZWRNZXRhdmFyaWFibGVzVG9EZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OKGRlY2xhcmVkTWV0YXZhcmlhYmxlcykge1xuICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzLm1hcCgoZGVjbGFyZWRNZXRhdmFyaWFibGUpID0+IHtcbiAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT04gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OO1xufVxuXG5mdW5jdGlvbiBmaW5kVHlwZUJ5TmFtZShuYW1lLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiBmaW5kTWV0YVR5cGVCeU5hbWUobmFtZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cbiJdLCJuYW1lcyI6WyJhcmlhYmxlVG9WYXJpYWJsZUpTT04iLCJhc3NlcnRpb25zRnJvbUpTT04iLCJhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTiIsImFzc3VtcHRpb25zRnJvbUpTT04iLCJhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OIiwiYXhpb21zRnJvbUpTT04iLCJheGlvbXNUb0F4aW9tc0pTT04iLCJjb21iaW5hdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTiIsImNvbmNsdXNpb25Gcm9tSlNPTiIsImNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIiwiY29uamVjdHVyZXNGcm9tSlNPTiIsImNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04iLCJjb25zdHJ1Y3RvcnNGcm9tSlNPTiIsImNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlVG9ERWNsYXJlZE1ldGF2YXJpYWJsZUpTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImRlY2xhcmVkVmFyaWFibGVzRnJvbUpTT04iLCJkZWNsYXJlZFZhcmlhYmxlc1RvRGVjbGFyZWRWYXJpYWJsZXNKU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJlcGhlbWVyYWxDb250ZXh0RnJvbUpTT04iLCJlcGhlbWVyYWxDb250ZXh0VG9FcGhlbWVyYWxDb250ZXh0SlNPTiIsImVxdWFsaXRpZXNGcm9tSlNPTiIsImVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OIiwiZnJhbWVGcm9tSlNPTiIsImZyYW1lVG9GcmFtZUpTT04iLCJmcmFtZXNGcm9tSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsImh5cG90aGVzZXNGcm9tSlNPTiIsImh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OIiwiaWRlbnRpZmllckZyb21KU09OIiwiaWRlbnRpZmllclRvSWRlbnRpZmllckpTT04iLCJqdWRnZW1lbnRzRnJvbUpTT04iLCJqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTiIsImxhYmVsRnJvbUpTT04iLCJsYWJlbFRvTGFiZWxKU09OIiwibGFiZWxzRnJvbUpTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJsZW1tYXNGcm9tSlNPTiIsIm1ldGFMZW1tYXNGcm9tSlNPTiIsIm1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbUpTT04iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc1RvTWV0YUxldmVsQXNzdW1wdGlvbnNKU09OIiwibWV0YVR5cGVGcm9tSlNPTiIsIm1ldGFUeXBlVG9NZXRhVHlwZUpTT04iLCJtZXRhdGhlb3JlbXNGcm9tSlNPTiIsIm1ldGF0aGVvcmVtc1RvTWV0YXRoZW9yZW1zSlNPTiIsIm1ldGF2YXJpYWJsZUZyb21KU09OIiwibWV0YXZhcmlhYmxlVG9NZXRhdmFyaWFibGVKU09OIiwibWV0YXZhcmlhYmxlc0Zyb21KU09OIiwibWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04iLCJuYW1lRnJvbUpTT04iLCJuYW1lVG9OYW1lSlNPTiIsIm5lZ2F0ZWRGcm9tSlNPTiIsIm5lZ2F0ZWRUb05lZ2F0ZWRKU09OIiwibm9taW5hbFR5cGVOYW1lRnJvbUpTT04iLCJub21pbmFsVHlwZU5hbWVUb05vbWluYWxUeXBlTmFtZUpTT04iLCJwYXJhbWV0ZXJzRnJvbUpTT04iLCJwYXJhbWV0ZXJzVG9QYXJhbWV0ZXJzSlNPTiIsInByZW1pc2VzRnJvbUpTT04iLCJwcmVtaXNlc1RvUHJlbWlzZXNKU09OIiwicHJvY2VkdXJlQ2FsbEZyb21KU09OIiwicHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSlNPTiIsInByb2NlZHVyZVJlZmVyZW5jZVRvUHJvY2VkdXJlUmVmZXJlbmNlSlNPTiIsInByb3BlcnRpZXNGcm9tSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicHJvcGVydHlSZWxhdGlvbnNGcm9tSlNPTiIsInByb3BlcnR5UmVsYXRpb25zVG9Qcm9wZXJ0eVJlbGF0aW9uc0pTT04iLCJwcm92aXNpb25hbEZyb21KU09OIiwicHJvdmlzaW9uYWxUb1Byb3Zpc2lvbmFsSlNPTiIsInJlZmVyZW5jZUZyb21KU09OIiwicmVmZXJlbmNlVG9SZWZlcmVuY2VKU09OIiwicmVmZXJlbmNlc0Zyb21KU09OIiwicmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04iLCJydWxlc0Zyb21KU09OIiwicnVsZXNUb1J1bGVzSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwic3RhdGVtZW50RnJvbUpTT04iLCJzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04iLCJzdGF0ZW1lbnRzRnJvbUpTT04iLCJzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTiIsInN1YnN0aXR1dGlvbkZyb21TdWJzdGl0dXRpb25KU09OIiwic3Vic3RpdHV0aW9uc0Zyb21KU09OIiwic3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04iLCJzdXBlclR5cGVzRnJvbUpTT04iLCJzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTiIsInN1cHBvc2l0aW9uc0Zyb21KU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwidGVybUZyb21KU09OIiwidGVybVRvVGVybUpTT04iLCJ0ZXJtc0Zyb21KU09OIiwidGVybXNUb1Rlcm1zSlNPTiIsInRoZW9yZW1zRnJvbUpTT04iLCJ0aGVvcmVtc1RvVGhlb3JlbXNKU09OIiwidHlwZUZyb21KU09OIiwidHlwZVByZWZpeGVzRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04iLCJ0eXBlVG9UeXBlSlNPTiIsInR5cGVzRnJvbUpTT04iLCJ0eXBlc1RvVHlwZXNKU09OIiwidmFyaWFibGVzRnJvbUpTT04iLCJ2YXJpYWJsZXNUb1ZhcmlhYmxlc0pTT04iLCJqc29uIiwiY29udGV4dCIsIm5hbWUiLCJuYW1lSlNPTiIsInRlcm0iLCJ0ZXJtSlNPTiIsIlRlcm0iLCJlbGVtZW50cyIsImZyb21KU09OIiwidHlwZSIsInN0cmluZyIsImZpbmRUeXBlQnlOYW1lIiwibGFiZWwiLCJMYWJlbCIsImxhYmVsSlNPTiIsImZyYW1lIiwiZnJhbWVKU09OIiwiRnJhbWUiLCJsZW1tYXMiLCJuZWdhdGVkIiwibWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU5hbWUiLCJzdGF0ZW1lbnQiLCJTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRKU09OIiwiZGVkdWN0aW9uIiwiRGVkdWN0aW9uIiwiZGVkdWN0aW9uSlNPTiIsInNpZ25hdHVyZSIsIlNpZ25hdHVyZSIsInNpZ25hdHVyZUpTT04iLCJyZWZlcmVuY2UiLCJSZWZlcmVuY2UiLCJyZWZlcmVuY2VKU09OIiwiaWRlbnRpZmllciIsImlkZW50aWZpZXJKU09OIiwiY29uY2x1c2lvbiIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW9uSlNPTiIsIm1ldGFMZW1tYXMiLCJwcm92aXNpb25hbCIsIm1ldGF2YXJpYWJsZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUpTT04iLCJwcm9jZWR1cmVDYWxsIiwiUHJvY2VkdXJlQ2FsbCIsInByb2NlZHVyZUNhbGxKU09OIiwibm9taW5hbFR5cGVOYW1lIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlSlNPTiIsInR5cGVzIiwidHlwZXNKU09OIiwiVHlwZSIsImZvckVhY2giLCJ0eXBlSlNPTiIsInB1c2giLCJ0ZXJtcyIsInRlcm1zSlNPTiIsIm1hcCIsInJ1bGVzIiwiUnVsZSIsInJ1bGVzSlNPTiIsInJ1bGVKU09OIiwicnVsZSIsImZyYW1lcyIsImZyYW1lc0pTT04iLCJsYWJlbHMiLCJsYWJlbHNKU09OIiwiYXhpb21zIiwiQXhpb20iLCJheGlvbXNKU09OIiwiYXhpb21KU09OIiwiYXhpb20iLCJwcmVtaXNlcyIsIlByZW1pc2UiLCJwcmVtaXNlc0pTT04iLCJwcmVtaXNlSlNPTiIsInByZW1pc2UiLCJ0aGVvcmVtcyIsIlRoZW9yZW0iLCJ0aGVvcmVtc0pTT04iLCJ0aGVvcmVtSlNPTiIsInRoZW9yZW0iLCJ2YXJpYWJsZXMiLCJWYXJpYWJsZSIsInZhcmlhYmxlc0pTT04iLCJ2YXJpYWJsZUpTT04iLCJ2YXJpYWJsZSIsImVxdWFsaXRpZXMiLCJFcXVhbGl0eSIsImVxdWFsaXRpZXNKU09OIiwiZXF1YWxpdHlKU09OIiwiZXF1YWxpdHkiLCJwcm9wZXJ0aWVzIiwiUHJvcGVydHkiLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnR5SlNPTiIsInByb3BlcnR5Iiwic3VwZXJUeXBlcyIsInN1cGVyVHlwZXNKU09OIiwic3VwZXJUeXBlSlNPTiIsInN1cGVyVHlwZSIsImh5cG90aGVzZXMiLCJIeXBvdGhlc2lzIiwiaHlwb3RoZXNlc0pTT04iLCJoeXBvdGhlc2lzSlNPTiIsImh5cG90aGVzaXMiLCJwYXJhbWV0ZXJzIiwiUGFyYW1ldGVyIiwicGFyYW1ldGVyc0pTT04iLCJwYXJhbWV0ZXJKU09OIiwicGFyYW1ldGVyIiwianVkZ2VtZW50cyIsIkp1ZGdlbWVudCIsImp1ZGdlbWVudHNKU09OIiwianVkZ2VtZW50SlNPTiIsImp1ZGdlbWVudCIsInN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzSlNPTiIsImFzc2VydGlvbnMiLCJUeXBlQXNzZXJ0aW9uIiwiRGVmaW5lZEFzc2VydGlvbiIsIlByb3BlcnR5QXNzZXJ0aW9uIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJTYXRpc2ZpZXNBc3NlcnRpb24iLCJDb250YWluZWRBc3NlcnRpb24iLCJhc3NlcnRpb25zSlNPTiIsImFzc2VydGlvbkpTT04iLCJhc3NlcnRpb24iLCJyZWZlcmVuY2VzIiwicmVmZXJlbmNlc0pTT04iLCJjb25qZWN0dXJlcyIsIkNvbmplY3R1cmUiLCJjb25qZWN0dXJlc0pTT04iLCJjb25qZWN0dXJlSlNPTiIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9ycyIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yc0pTT04iLCJjb21iaW5hdG9ySlNPTiIsImNvbWJpbmF0b3IiLCJhc3N1bXB0aW9ucyIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uc0pTT04iLCJhc3N1bXB0aW9uSlNPTiIsImFzc3VtcHRpb24iLCJ0eXBlUHJlZml4ZXMiLCJUeXBlUHJlZml4IiwidHlwZVByZWZpeGVzSlNPTiIsInR5cGVQcmVmaXhKU09OIiwidHlwZVByZWZpeCIsImNvbnN0cnVjdG9ycyIsIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JzSlNPTiIsImNvbnN0cnVjdG9ySlNPTiIsImNvbnN0cnVjdG9yIiwibWV0YXRoZW9yZW1zIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbXNKU09OIiwibWV0YXRoZW9yZW1KU09OIiwibWV0YXRoZW9yZW0iLCJzdXBwb3NpdGlvbnMiLCJTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uc0pTT04iLCJzdXBwb3NpdGlvbkpTT04iLCJzdXBwb3NpdGlvbiIsInN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbkpTT04iLCJzdWJzdGl0dXRpb24iLCJtZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlc0pTT04iLCJyZWxlYXNlQ29udGV4dCIsImVtcGhlbWVyYWxDb250ZXh0IiwiRXBoZW1lcmFsQ29udGV4dCIsImRlY2xhcmVkVmFyaWFibGVzIiwiZGVjbGFyZWRWYXJpYWJsZXNKU09OIiwiZGVjbGFyZWRWYXJpYWJsZUpTT04iLCJkZWNsYXJlZFZhcmlhYmxlIiwicHJvcGVydHlSZWxhdGlvbnMiLCJQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbnNKU09OIiwicHJvcGVydHlSZWxhdGlvbkpTT04iLCJwcm9wZXJ0eVJlbGF0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbnMiLCJNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbnNKU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbkpTT04iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwidG9KU09OIiwibmVnYXRlZEpTT04iLCJhcmlhYmxlIiwiYXJpYWJsZUpTT04iLCJtZXRhVHlwZUpTT04iLCJwcm92aXNpb25hbEpTT04iLCJub21pbmFsVHlwZU5hbWVKU09OIiwiZXBoZW1lcmFsQ29udGV4dCIsImVwaGVtZXJhbENvbnRleHRKU09OIiwiVGVybVN1YnN0aXR1dGlvbiIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidHlwZU5hbWUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJtZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBMnhCZ0JBO2VBQUFBOztRQTlTQUM7ZUFBQUE7O1FBMGpCQUM7ZUFBQUE7O1FBcmZBQztlQUFBQTs7UUE2aEJBQztlQUFBQTs7UUFseEJBQztlQUFBQTs7UUE0bkJBQztlQUFBQTs7UUF2WkFDO2VBQUFBOztRQW1pQkFDO2VBQUFBOztRQTc1QkFDO2VBQUFBOztRQW1xQkFDO2VBQUFBOztRQXpUQUM7ZUFBQUE7O1FBeWlCQUM7ZUFBQUE7O1FBemVBQztlQUFBQTs7UUFpaEJBQztlQUFBQTs7UUE1T0FDO2VBQUFBOztRQXZKQUM7ZUFBQUE7O1FBbWRBQztlQUFBQTs7UUFwZ0JBQztlQUFBQTs7UUFnZkFDO2VBQUFBOztRQTFpQ0FDO2VBQUFBOztRQWtzQkFDO2VBQUFBOztRQXRKQUM7ZUFBQUE7O1FBME1BQztlQUFBQTs7UUE5ZUFDO2VBQUFBOztRQXNwQkFDO2VBQUFBOztRQXg5QkFDO2VBQUFBOztRQTRzQkFDO2VBQUFBOztRQTFlQUM7ZUFBQUE7O1FBa3BCQUM7ZUFBQUE7O1FBbGdCQUM7ZUFBQUE7O1FBb2pCQUM7ZUFBQUE7O1FBbjBCQUM7ZUFBQUE7O1FBdXFCQUM7ZUFBQUE7O1FBeFhBQztlQUFBQTs7UUE0akJBQztlQUFBQTs7UUEzOUJBQztlQUFBQTs7UUFpdUJBQztlQUFBQTs7UUFsZUFDO2VBQUFBOztRQXduQkFDO2VBQUFBOztRQTExQkFDO2VBQUFBOztRQTBHQUM7ZUFBQUE7O1FBMmhCQUM7ZUFBQUE7O1FBeWRBQztlQUFBQTs7UUFsbENBQztlQUFBQTs7UUEwc0JBQztlQUFBQTs7UUEvTEFDO2VBQUFBOztRQTJnQkFDO2VBQUFBOztRQTU2QkFDO2VBQUFBOztRQXNwQkFDO2VBQUFBOztRQXRNQUM7ZUFBQUE7O1FBMGZBQztlQUFBQTs7UUF0b0NBQztlQUFBQTs7UUE0dUJBQztlQUFBQTs7UUFocUJBQztlQUFBQTs7UUFvc0JBQztlQUFBQTs7UUF4akJBQztlQUFBQTs7UUF3b0JBQztlQUFBQTs7UUF4YUFDO2VBQUFBOztRQXdqQkFDO2VBQUFBOztRQXhxQkFDO2VBQUFBOztRQXNuQkFDO2VBQUFBOztRQXJ2QkFDO2VBQUFBOztRQStvQkFDO2VBQUFBOztRQTFuQkFDO2VBQUFBOztRQThvQkFDO2VBQUFBOztRQXBlQUM7ZUFBQUE7O1FBa25CQUM7ZUFBQUE7O1FBL1RBQztlQUFBQTs7UUFxZEFDO2VBQUFBOztRQTE5QkFDO2VBQUFBOztRQXNwQkFDO2VBQUFBOztRQWhzQkFDO2VBQUFBOztRQXdwQkFDO2VBQUFBOztRQXZTQUM7ZUFBQUE7O1FBK2lCQUM7ZUFBQUE7O1FBcHlCQUM7ZUFBQUE7O1FBOG9CQUM7ZUFBQUE7O1FBenhCQUM7ZUFBQUE7O1FBMnJCQUM7ZUFBQUE7O1FBdnRCQUM7ZUFBQUE7O1FBeXNCQUM7ZUFBQUE7O1FBbFZBQztlQUFBQTs7UUFna0JBQztlQUFBQTs7UUFoS0FDO2VBQUFBOztRQTNQQUM7ZUFBQUE7O1FBK2ZBQztlQUFBQTs7UUFwdUJBQztlQUFBQTs7UUE4a0JBQztlQUFBQTs7UUF6WEFDO2VBQUFBOztRQXVlQUM7ZUFBQUE7O1FBMWtDQUM7ZUFBQUE7O1FBd3VCQUM7ZUFBQUE7O1FBMWZBQztlQUFBQTs7UUEwb0JBQztlQUFBQTs7UUExaUJBQztlQUFBQTs7UUFnbkJBQztlQUFBQTs7UUE5NkJBQztlQUFBQTs7UUFtaUJBQztlQUFBQTs7UUFxakJBQztlQUFBQTs7UUF4WEFDO2VBQUFBOztRQS9nQkFDO2VBQUFBOztRQWlxQkFDO2VBQUFBOztRQXBpQkFDO2VBQUFBOztRQTBtQkFDO2VBQUFBOzs7aUVBcjlCSztrRUFDUTs7Ozs7O0FBRXRCLFNBQVNwRCxhQUFhcUQsSUFBSSxFQUFFQyxPQUFPO0lBQ3hDLElBQUksRUFBRUMsSUFBSSxFQUFFLEdBQUdGO0lBRWYsTUFBTUcsV0FBV0QsTUFBTyxHQUFHO0lBRTNCQSxPQUFPQyxVQUFXLEdBQUc7SUFFckIsT0FBT0Q7QUFDVDtBQUVPLFNBQVNoQixhQUFhYyxJQUFJLEVBQUVDLE9BQU87SUFDeEMsSUFBSSxFQUFFRyxJQUFJLEVBQUUsR0FBR0o7SUFFZixJQUFJSSxTQUFTLE1BQU07UUFDakIsTUFBTUMsV0FBV0QsTUFBTyxHQUFHO1FBRTNCSixPQUFPSyxVQUFXLEdBQUc7UUFFckIsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsaUJBQVE7UUFFekJILE9BQU9FLEtBQUtFLFFBQVEsQ0FBQ1IsTUFBTUM7SUFDN0I7SUFFQSxPQUFPRztBQUNUO0FBRU8sU0FBU1osYUFBYVEsSUFBSSxFQUFFQyxPQUFPO0lBQ3hDLElBQUksRUFBRVEsSUFBSSxFQUFFLEdBQUdUO0lBRWYsSUFBSVMsU0FBUyxNQUFNO1FBQ2pCVCxPQUFPUyxNQUFPLEdBQUc7UUFFakIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR1YsTUFDYkUsT0FBT1EsUUFBUyxHQUFHO1FBRXpCRCxPQUFPRSxlQUFlVCxNQUFNRDtJQUM5QjtJQUVBLE9BQU9RO0FBQ1Q7QUFFTyxTQUFTOUUsY0FBY3FFLElBQUksRUFBRUMsT0FBTztJQUN6QyxJQUFJLEVBQUVXLEtBQUssRUFBRSxHQUFHWjtJQUVoQixNQUFNLEVBQUVhLEtBQUssRUFBRSxHQUFHTixpQkFBUSxFQUN4Qk8sWUFBWUYsT0FBUSxHQUFHO0lBRXpCWixPQUFPYyxXQUFXLEdBQUc7SUFFckJGLFFBQVFDLE1BQU1MLFFBQVEsQ0FBQ1IsTUFBTUM7SUFFN0IsT0FBT1c7QUFDVDtBQUVPLFNBQVMzRixjQUFjK0UsSUFBSSxFQUFFQyxPQUFPO0lBQ3pDLElBQUksRUFBRWMsS0FBSyxFQUFFLEdBQUdmO0lBRWhCLElBQUllLFVBQVUsTUFBTTtRQUNsQixNQUFNQyxZQUFZRCxPQUFRLEdBQUc7UUFFN0JmLE9BQU9nQixXQUFZLEdBQUc7UUFFdEIsTUFBTSxFQUFFQyxLQUFLLEVBQUUsR0FBR1YsaUJBQVE7UUFFMUJRLFFBQVFFLE1BQU1ULFFBQVEsQ0FBQ1IsTUFBTUM7SUFDL0I7SUFFQSxPQUFPYztBQUNUO0FBRU8sU0FBU2hGLGVBQWVpRSxJQUFJLEVBQUVDLE9BQU87SUFDMUMsTUFBTWlCLFNBQVMsRUFBRTtJQUVqQixPQUFPQTtBQUNUO0FBRU8sU0FBU3JFLGdCQUFnQm1ELElBQUksRUFBRUMsT0FBTztJQUMzQyxNQUFNLEVBQUVrQixPQUFPLEVBQUUsR0FBR25CO0lBRXBCLE9BQU9tQjtBQUNUO0FBRU8sU0FBU2hGLGlCQUFpQjZELElBQUksRUFBRUMsT0FBTztJQUM1QyxJQUFJLEVBQUVtQixRQUFRLEVBQUUsR0FBR3BCO0lBRW5CLElBQUlvQixhQUFhLE1BQU07UUFDckJwQixPQUFPb0IsVUFBVyxHQUFHO1FBRXJCLE1BQU0sRUFBRVYsTUFBTSxFQUFFLEdBQUdWLE1BQ2JFLE9BQU9RLFFBQVMsR0FBRztRQUV6QlUsV0FBV0MsbUJBQW1CbkIsTUFBTUQ7SUFDdEM7SUFFQSxPQUFPbUI7QUFDVDtBQUVPLFNBQVM3QyxrQkFBa0J5QixJQUFJLEVBQUVDLE9BQU87SUFDN0MsSUFBSSxFQUFFcUIsWUFBWSxJQUFJLEVBQUUsR0FBR3RCO0lBRTNCLElBQUlzQixjQUFjLE1BQU07UUFDdEIsTUFBTSxFQUFFQyxTQUFTLEVBQUUsR0FBR2hCLGlCQUFRLEVBQ3hCaUIsZ0JBQWdCRixXQUFZLEdBQUc7UUFFckN0QixPQUFPd0IsZUFBZSxHQUFHO1FBRXpCRixZQUFZQyxVQUFVZixRQUFRLENBQUNSLE1BQU1DO0lBQ3ZDO0lBRUEsT0FBT3FCO0FBQ1Q7QUFFTyxTQUFTM0csa0JBQWtCcUYsSUFBSSxFQUFFQyxPQUFPO0lBQzdDLElBQUksRUFBRXdCLFNBQVMsRUFBRSxHQUFHekI7SUFFcEIsTUFBTSxFQUFFMEIsU0FBUyxFQUFFLEdBQUduQixpQkFBUSxFQUN4Qm9CLGdCQUFnQkYsV0FBWSxHQUFHO0lBRXJDekIsT0FBTzJCLGVBQWdCLEdBQUc7SUFFMUJGLFlBQVlDLFVBQVVsQixRQUFRLENBQUNSLE1BQU1DO0lBRXJDLE9BQU93QjtBQUNUO0FBRU8sU0FBU3BELGtCQUFrQjJCLElBQUksRUFBRUMsT0FBTztJQUM3QyxJQUFJLEVBQUUyQixZQUFZLElBQUksRUFBRSxHQUFHNUI7SUFFM0IsSUFBSTRCLGNBQWMsTUFBTTtRQUN0QixNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHdEIsaUJBQVEsRUFDeEJ1QixnQkFBZ0JGLFdBQVksR0FBRztRQUVyQzVCLE9BQU84QixlQUFlLEdBQUc7UUFFekJGLFlBQVlDLFVBQVVyQixRQUFRLENBQUNSLE1BQU1DO0lBQ3ZDO0lBRUEsT0FBTzJCO0FBQ1Q7QUFFTyxTQUFTN0Qsa0JBQWtCaUMsSUFBSSxFQUFFQyxPQUFPO0lBQzdDLElBQUksRUFBRThCLFNBQVMsRUFBRSxHQUFHL0I7SUFFcEIsTUFBTSxFQUFFZ0MsU0FBUyxFQUFFLEdBQUd6QixpQkFBUSxFQUN4QjBCLGdCQUFnQkYsV0FBWSxHQUFHO0lBRXJDL0IsT0FBT2lDLGVBQWUsR0FBRztJQUV6QkYsWUFBWUMsVUFBVXhCLFFBQVEsQ0FBQ1IsTUFBTUM7SUFFckMsT0FBTzhCO0FBQ1Q7QUFFTyxTQUFTeEcsbUJBQW1CeUUsSUFBSSxFQUFFQyxPQUFPO0lBQzlDLElBQUksRUFBRWlDLFVBQVUsRUFBRSxHQUFHbEM7SUFFckIsTUFBTW1DLGlCQUFpQkQsWUFBYSxHQUFHO0lBRXZDQSxhQUFhQyxnQkFBaUIsR0FBRztJQUVqQyxPQUFPRDtBQUNUO0FBRU8sU0FBU2xJLG1CQUFtQmdHLElBQUksRUFBRUMsT0FBTztJQUM5QyxJQUFJLEVBQUVtQyxVQUFVLEVBQUUsR0FBR3BDO0lBRXJCLE1BQU0sRUFBRXFDLFVBQVUsRUFBRSxHQUFHOUIsaUJBQVEsRUFDekIrQixpQkFBaUJGLFlBQWEsR0FBRztJQUV2Q3BDLE9BQU9zQyxnQkFBaUIsR0FBRztJQUUzQkYsYUFBYUMsV0FBVzdCLFFBQVEsQ0FBQ1IsTUFBTUM7SUFFdkMsT0FBT21DO0FBQ1Q7QUFFTyxTQUFTcEcsbUJBQW1CZ0UsSUFBSSxFQUFFQyxPQUFPO0lBQzlDLE1BQU1zQyxhQUFhLEVBQUU7SUFFckIsT0FBT0E7QUFDVDtBQUVPLFNBQVMxRSxvQkFBb0JtQyxJQUFJLEVBQUVDLE9BQU87SUFDL0MsTUFBTSxFQUFFdUMsV0FBVyxFQUFFLEdBQUd4QztJQUV4QixPQUFPd0M7QUFDVDtBQUVPLFNBQVNqRyxxQkFBcUJ5RCxJQUFJLEVBQUVDLE9BQU87SUFDaEQsSUFBSSxFQUFFd0MsWUFBWSxFQUFFLEdBQUd6QztJQUV2QixNQUFNLEVBQUUwQyxZQUFZLEVBQUUsR0FBR25DLGlCQUFRLEVBQzNCb0MsbUJBQW1CRixjQUFlLEdBQUc7SUFFM0N6QyxPQUFPMkMsa0JBQWtCLEdBQUc7SUFFNUJGLGVBQWVDLGFBQWFsQyxRQUFRLENBQUNSLE1BQU1DO0lBRTNDLE9BQU93QztBQUNUO0FBRU8sU0FBU3BGLHNCQUFzQjJDLElBQUksRUFBRUMsT0FBTztJQUNqRCxJQUFJLEVBQUUyQyxnQkFBZ0IsSUFBSSxFQUFFLEdBQUc1QztJQUUvQixJQUFJNEMsa0JBQWtCLE1BQU07UUFDMUIsTUFBTSxFQUFFQyxhQUFhLEVBQUUsR0FBR3RDLGlCQUFRLEVBQzVCdUMsb0JBQW9CRixlQUFnQixHQUFHO1FBRTdDNUMsT0FBTzhDLG1CQUFtQixHQUFHO1FBRTdCRixnQkFBZ0JDLGNBQWNyQyxRQUFRLENBQUNSLE1BQU1DO0lBQy9DO0lBRUEsT0FBTzJDO0FBQ1Q7QUFFTyxTQUFTN0Ysd0JBQXdCaUQsSUFBSSxFQUFFQyxPQUFPO0lBQ25ELE1BQU0sRUFBRThDLGVBQWUsRUFBRSxHQUFHL0M7SUFFNUIsT0FBTytDO0FBQ1Q7QUFFTyxTQUFTeEYsMkJBQTJCeUMsSUFBSSxFQUFFQyxPQUFPO0lBQ3RELElBQUksRUFBRStDLGtCQUFrQixFQUFFLEdBQUdoRDtJQUU3QixNQUFNLEVBQUVpRCxrQkFBa0IsRUFBRSxHQUFHMUMsaUJBQVEsRUFDakMyQyx5QkFBeUJGLG9CQUFxQixHQUFHO0lBRXZEaEQsT0FBT2tELHdCQUF5QixHQUFHO0lBRW5DRixxQkFBcUJDLG1CQUFtQnpDLFFBQVEsQ0FBQ1IsTUFBTUM7SUFFdkQsT0FBTytDO0FBQ1Q7QUFFTyxTQUFTcEQsY0FBY0ksSUFBSSxFQUFFbUQsS0FBSyxFQUFFbEQsT0FBTztJQUNoRCxNQUFNLEVBQUVrRCxPQUFPQyxTQUFTLEVBQUUsR0FBR3BEO0lBRTdCLE1BQU0sRUFBRXFELElBQUksRUFBRSxHQUFHOUMsaUJBQVE7SUFFekI2QyxVQUFVRSxPQUFPLENBQUMsQ0FBQ0M7UUFDakIsTUFBTXZELE9BQU91RCxVQUNQOUMsT0FBTzRDLEtBQUs3QyxRQUFRLENBQUNSLE1BQU1DO1FBRWpDa0QsTUFBTUssSUFBSSxDQUFDL0M7SUFDYjtBQUNGO0FBRU8sU0FBU3JCLGNBQWNZLElBQUksRUFBRUMsT0FBTztJQUN6QyxJQUFJLEVBQUV3RCxLQUFLLEVBQUUsR0FBR3pEO0lBRWhCLE1BQU0sRUFBRU0sSUFBSSxFQUFFLEdBQUdDLGlCQUFRLEVBQ25CbUQsWUFBWUQsT0FBTyxHQUFHO0lBRTVCQSxRQUFRQyxVQUFVQyxHQUFHLENBQUMsQ0FBQ3REO1FBQ3JCLE1BQU1MLE9BQU9LLFVBQ1BELE9BQU9FLEtBQUtFLFFBQVEsQ0FBQ1IsTUFBTUM7UUFFakMsT0FBT0c7SUFDVDtJQUVBLE9BQU9xRDtBQUNUO0FBRU8sU0FBU3RGLGNBQWM2QixJQUFJLEVBQUVDLE9BQU87SUFDekMsSUFBSSxFQUFFMkQsS0FBSyxFQUFFLEdBQUc1RDtJQUVoQixNQUFNLEVBQUU2RCxJQUFJLEVBQUUsR0FBR3RELGlCQUFRLEVBQ25CdUQsWUFBWUYsT0FBTyxHQUFHO0lBRTVCQSxRQUFRRSxVQUFVSCxHQUFHLENBQUMsQ0FBQ0k7UUFDckIsTUFBTS9ELE9BQU8rRCxVQUNQQyxPQUFPSCxLQUFLckQsUUFBUSxDQUFDUixNQUFNQztRQUVqQyxPQUFPK0Q7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTekksZUFBZTZFLElBQUksRUFBRUMsT0FBTztJQUMxQyxJQUFJLEVBQUVnRSxNQUFNLEVBQUUsR0FBR2pFO0lBRWpCLE1BQU0sRUFBRWlCLEtBQUssRUFBRSxHQUFHVixpQkFBUSxFQUN4QjJELGFBQWFELFFBQVEsR0FBRztJQUUxQkEsU0FBU0MsV0FBV1AsR0FBRyxDQUFDLENBQUMzQztRQUN2QixNQUFNaEIsT0FBT2dCLFdBQ1BELFFBQVFFLE1BQU1ULFFBQVEsQ0FBQ1IsTUFBTUM7UUFFbkMsT0FBT2M7SUFDVDtJQUVBLE9BQU9rRDtBQUNUO0FBRU8sU0FBU3BJLGVBQWVtRSxJQUFJLEVBQUVDLE9BQU87SUFDMUMsSUFBSSxFQUFFa0UsTUFBTSxFQUFFLEdBQUduRTtJQUVqQixNQUFNLEVBQUVhLEtBQUssRUFBRSxHQUFHTixpQkFBUSxFQUNwQjZELGFBQWFELFFBQVMsR0FBRztJQUUvQkEsU0FBU0MsV0FBV1QsR0FBRyxDQUFDLENBQUM3QztRQUN2QixNQUFNZCxPQUFPYyxXQUNQRixRQUFRQyxNQUFNTCxRQUFRLENBQUNSLE1BQU1DO1FBRW5DLE9BQU9XO0lBQ1Q7SUFFQSxPQUFPdUQ7QUFDVDtBQUVPLFNBQVN2SyxlQUFlb0csSUFBSSxFQUFFQyxPQUFPO0lBQzFDLElBQUksRUFBRW9FLE1BQU0sRUFBRSxHQUFHckU7SUFFakIsTUFBTSxFQUFFc0UsS0FBSyxFQUFFLEdBQUcvRCxpQkFBUSxFQUNwQmdFLGFBQWFGLFFBQVEsR0FBRztJQUU5QkEsU0FBU0UsV0FBV1osR0FBRyxDQUFDLENBQUNhO1FBQ3ZCLE1BQU14RSxPQUFPd0UsV0FDUEMsUUFBUUgsTUFBTTlELFFBQVEsQ0FBQ1IsTUFBTUM7UUFFbkMsT0FBT3dFO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU2xILGlCQUFpQjZDLElBQUksRUFBRUMsT0FBTztJQUM1QyxJQUFJLEVBQUV5RSxRQUFRLEVBQUUsR0FBRzFFO0lBRW5CLE1BQU0sRUFBRTJFLE9BQU8sRUFBRSxHQUFHcEUsaUJBQVEsRUFDdEJxRSxlQUFlRixVQUFXLEdBQUc7SUFFbkNBLFdBQVdFLGFBQWFqQixHQUFHLENBQUMsQ0FBQ2tCO1FBQzNCLE1BQU03RSxPQUFPNkUsYUFDUEMsVUFBVUgsUUFBUW5FLFFBQVEsQ0FBQ1IsTUFBTUM7UUFFdkMsT0FBTzZFO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU3BGLGlCQUFpQlUsSUFBSSxFQUFFQyxPQUFPO0lBQzVDLElBQUksRUFBRThFLFFBQVEsRUFBRSxHQUFHL0U7SUFFbkIsTUFBTSxFQUFFZ0YsT0FBTyxFQUFFLEdBQUd6RSxpQkFBUSxFQUN0QjBFLGVBQWVGLFVBQVUsR0FBRztJQUVsQ0EsV0FBV0UsYUFBYXRCLEdBQUcsQ0FBQyxDQUFDdUI7UUFDM0IsTUFBTWxGLE9BQU9rRixhQUNQQyxVQUFVSCxRQUFReEUsUUFBUSxDQUFDUixNQUFNQztRQUV2QyxPQUFPa0Y7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTakYsa0JBQWtCRSxJQUFJLEVBQUVDLE9BQU87SUFDN0MsSUFBSSxFQUFFbUYsU0FBUyxFQUFFLEdBQUdwRjtJQUVwQixNQUFNLEVBQUVxRixRQUFRLEVBQUUsR0FBRzlFLGlCQUFRLEVBQ3ZCK0UsZ0JBQWdCRixXQUFXLEdBQUc7SUFFcENBLFlBQVlFLGNBQWMzQixHQUFHLENBQUMsQ0FBQzRCO1FBQzdCLE1BQU12RixPQUFPdUYsY0FDUEMsV0FBV0gsU0FBUzdFLFFBQVEsQ0FBQ1IsTUFBTUM7UUFFekMsT0FBT3VGO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU3JLLG1CQUFtQmlGLElBQUksRUFBRUMsT0FBTztJQUM5QyxJQUFJLEVBQUV3RixVQUFVLEVBQUUsR0FBR3pGO0lBRXJCLE1BQU0sRUFBRTBGLFFBQVEsRUFBRSxHQUFHbkYsaUJBQVEsRUFDdkJvRixpQkFBaUJGLFlBQVksR0FBRztJQUV0Q0EsYUFBYUUsZUFBZWhDLEdBQUcsQ0FBQyxDQUFDaUM7UUFDL0IsTUFBTTVGLE9BQU80RixjQUNQQyxXQUFXSCxTQUFTbEYsUUFBUSxDQUFDUixNQUFNQztRQUV6QyxPQUFPNEY7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTaEksbUJBQW1CdUMsSUFBSSxFQUFFQyxPQUFPO0lBQzlDLElBQUksRUFBRTZGLFVBQVUsRUFBRSxHQUFHOUY7SUFFckIsTUFBTSxFQUFFK0YsUUFBUSxFQUFFLEdBQUd4RixpQkFBUSxFQUN2QnlGLGlCQUFpQkYsWUFBWSxHQUFHO0lBRXRDQSxhQUFhRSxlQUFlckMsR0FBRyxDQUFDLENBQUNzQztRQUMvQixNQUFNakcsT0FBT2lHLGNBQ1BDLFdBQVdILFNBQVN2RixRQUFRLENBQUNSLE1BQU1DO1FBRXpDLE9BQU9pRztJQUNUO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVNoSCxtQkFBbUJrQixJQUFJLEVBQUVDLE9BQU87SUFDOUMsTUFBTSxFQUFFa0csWUFBWUMsY0FBYyxFQUFFLEdBQUdwRztJQUV2QyxNQUFNbUcsYUFBYUMsZUFBZXpDLEdBQUcsQ0FBQyxDQUFDMEM7UUFDL0IsTUFBTXJHLE9BQU9xRyxlQUNQLEVBQUUzRixNQUFNLEVBQUUsR0FBR1YsTUFDYkUsT0FBT1EsUUFDUEQsT0FBT0UsZUFBZVQsTUFBTUQsVUFDNUJxRyxZQUFZN0YsTUFBTSxHQUFHO1FBRTNCLE9BQU82RjtJQUNUO0lBRU4sT0FBT0g7QUFDVDtBQUVPLFNBQVM5SyxtQkFBbUIyRSxJQUFJLEVBQUVDLE9BQU87SUFDOUMsSUFBSSxFQUFFc0csVUFBVSxFQUFFLEdBQUd2RztJQUVyQixNQUFNLEVBQUV3RyxVQUFVLEVBQUUsR0FBR2pHLGlCQUFRLEVBQ3pCa0csaUJBQWlCRixZQUFhLEdBQUc7SUFFdkNBLGFBQWFFLGVBQWU5QyxHQUFHLENBQUMsQ0FBQytDO1FBQy9CLE1BQU0xRyxPQUFPMEcsZ0JBQ1BDLGFBQWFILFdBQVdoRyxRQUFRLENBQUNSLE1BQU1DO1FBRTdDLE9BQU8wRztJQUNUO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVN0SixtQkFBbUIrQyxJQUFJLEVBQUVDLE9BQU87SUFDOUMsSUFBSSxFQUFFMkcsVUFBVSxFQUFFLEdBQUc1RztJQUVyQixNQUFNLEVBQUU2RyxTQUFTLEVBQUUsR0FBR3RHLGlCQUFRLEVBQ3hCdUcsaUJBQWlCRixZQUFZLEdBQUc7SUFFdENBLGFBQWFFLGVBQWVuRCxHQUFHLENBQUMsQ0FBQ29EO1FBQy9CLE1BQU0vRyxPQUFPK0csZUFDUEMsWUFBWUgsVUFBVXJHLFFBQVEsQ0FBQ1IsTUFBTUM7UUFFM0MsT0FBTytHO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU25MLG1CQUFtQnVFLElBQUksRUFBRUMsT0FBTztJQUM5QyxJQUFJLEVBQUVnSCxVQUFVLEVBQUUsR0FBR2pIO0lBRXJCLE1BQU0sRUFBRWtILFNBQVMsRUFBRSxHQUFHM0csaUJBQVEsRUFDeEI0RyxpQkFBaUJGLFlBQVksR0FBRztJQUV0Q0EsYUFBYUUsZUFBZXhELEdBQUcsQ0FBQyxDQUFDeUQ7UUFDL0IsTUFBTXBILE9BQU9vSCxlQUNQQyxZQUFZSCxVQUFVMUcsUUFBUSxDQUFDUixNQUFNQztRQUUzQyxPQUFPb0g7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTeEksbUJBQW1CdUIsSUFBSSxFQUFFQyxPQUFPO0lBQzlDLElBQUksRUFBRXFILFVBQVUsRUFBRSxHQUFHdEg7SUFFckIsTUFBTSxFQUFFdUIsU0FBUyxFQUFFLEdBQUdoQixpQkFBUSxFQUN4QmdILGlCQUFpQkQsWUFBWSxHQUFHO0lBRXRDQSxhQUFhQyxlQUFlNUQsR0FBRyxDQUFDLENBQUNuQztRQUMvQixNQUFNeEIsT0FBT3dCLGVBQ1BGLFlBQVlDLFVBQVVmLFFBQVEsQ0FBQ1IsTUFBTUM7UUFFM0MsT0FBT3FCO0lBQ1Q7SUFFQSxPQUFPZ0c7QUFDVDtBQUVPLFNBQVM5TixtQkFBbUJ3RyxJQUFJLEVBQUVDLE9BQU87SUFDOUMsSUFBSSxFQUFFdUgsVUFBVSxFQUFFLEdBQUd4SDtJQUVyQixNQUFNLEVBQUV5SCxhQUFhLEVBQUVDLGdCQUFnQixFQUFFQyxpQkFBaUIsRUFBRUMsaUJBQWlCLEVBQUVDLGtCQUFrQixFQUFFQyxrQkFBa0IsRUFBRSxHQUFHdkgsaUJBQVEsRUFDNUh3SCxpQkFBaUJQLFlBQVksR0FBRztJQUV0Q0EsYUFBYU8sZUFBZXBFLEdBQUcsQ0FBQyxDQUFDcUU7UUFDL0IsTUFBTWhJLE9BQU9nSSxlQUNQQyxZQUFZUixjQUFjakgsUUFBUSxDQUFDUixNQUFNQyxZQUM1QnlILGlCQUFpQmxILFFBQVEsQ0FBQ1IsTUFBTUMsWUFDaEMwSCxrQkFBa0JuSCxRQUFRLENBQUNSLE1BQU1DLFlBQ2pDMkgsa0JBQWtCcEgsUUFBUSxDQUFDUixNQUFNQyxZQUNqQzRILG1CQUFtQnJILFFBQVEsQ0FBQ1IsTUFBTUMsWUFDbEM2SCxtQkFBbUJ0SCxRQUFRLENBQUNSLE1BQU1DO1FBRXJELE9BQU9nSTtJQUNUO0lBRUEsT0FBT1Q7QUFDVDtBQUVPLFNBQVN2SixtQkFBbUIrQixJQUFJLEVBQUVDLE9BQU87SUFDOUMsSUFBSSxFQUFFaUksVUFBVSxFQUFFLEdBQUdsSTtJQUVyQixNQUFNLEVBQUVnQyxTQUFTLEVBQUUsR0FBR3pCLGlCQUFRLEVBQ3hCNEgsaUJBQWlCRCxZQUFZLEdBQUc7SUFFdENBLGFBQWFDLGVBQWV4RSxHQUFHLENBQUMsQ0FBQzFCO1FBQy9CLE1BQU1qQyxPQUFPaUMsZUFDUEYsWUFBWUMsVUFBVXhCLFFBQVEsQ0FBQ1IsTUFBTUM7UUFFM0MsT0FBTzhCO0lBQ1Q7SUFFQSxPQUFPbUc7QUFDVDtBQUVPLFNBQVNoTyxvQkFBb0I4RixJQUFJLEVBQUVDLE9BQU87SUFDL0MsSUFBSSxFQUFFbUksV0FBVyxFQUFFLEdBQUdwSTtJQUV0QixNQUFNLEVBQUVxSSxVQUFVLEVBQUUsR0FBRzlILGlCQUFRLEVBQ3pCK0gsa0JBQWtCRixhQUFhLEdBQUc7SUFFeENBLGNBQWNFLGdCQUFnQjNFLEdBQUcsQ0FBQyxDQUFDNEU7UUFDakMsTUFBTXZJLE9BQU91SSxnQkFDUEMsYUFBYUgsV0FBVzdILFFBQVEsQ0FBQ1IsTUFBTUM7UUFFN0MsT0FBT3VJO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBU3RPLG9CQUFvQmtHLElBQUksRUFBRUMsT0FBTztJQUMvQyxJQUFJLEVBQUV3SSxXQUFXLEVBQUUsR0FBR3pJO0lBRXRCLE1BQU0sRUFBRTBJLFVBQVUsRUFBRSxHQUFHbkksaUJBQVEsRUFDekJvSSxrQkFBa0JGLGFBQWEsR0FBRztJQUV4Q0EsY0FBY0UsZ0JBQWdCaEYsR0FBRyxDQUFDLENBQUNpRjtRQUNqQyxNQUFNNUksT0FBTzRJLGdCQUNQQyxhQUFhSCxXQUFXbEksUUFBUSxDQUFDUixNQUFNQztRQUU3QyxPQUFPNEk7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTL08sb0JBQW9Cc0csSUFBSSxFQUFFQyxPQUFPO0lBQy9DLElBQUksRUFBRTZJLFdBQVcsRUFBRSxHQUFHOUk7SUFFdEIsTUFBTSxFQUFFK0ksVUFBVSxFQUFFLEdBQUd4SSxpQkFBUSxFQUM3QnlJLGtCQUFrQkYsYUFBYSxHQUFHO0lBRXBDQSxjQUFjRSxnQkFBZ0JyRixHQUFHLENBQUMsQ0FBQ3NGO1FBQ2pDLE1BQU1qSixPQUFPaUosZ0JBQ1BDLGFBQWFILFdBQVd2SSxRQUFRLENBQUNSLE1BQU1DO1FBRTdDLE9BQU9pSjtJQUNUO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVNySixxQkFBcUJPLElBQUksRUFBRUMsT0FBTztJQUNoRCxJQUFJLEVBQUVrSixZQUFZLEVBQUUsR0FBR25KO0lBRXZCLE1BQU0sRUFBRW9KLFVBQVUsRUFBRSxHQUFHN0ksaUJBQVEsRUFDekI4SSxtQkFBbUJGLGNBQWMsR0FBRztJQUUxQ0EsZUFBZUUsaUJBQWlCMUYsR0FBRyxDQUFDLENBQUMyRjtRQUNuQyxNQUFNdEosT0FBT3NKLGdCQUNQQyxhQUFhSCxXQUFXNUksUUFBUSxDQUFDUixNQUFNQztRQUU3QyxPQUFPc0o7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTL08scUJBQXFCNEYsSUFBSSxFQUFFQyxPQUFPO0lBQ2hELElBQUksRUFBRXVKLFlBQVksRUFBRSxHQUFHeEo7SUFFdkIsTUFBTSxFQUFFeUosV0FBVyxFQUFFLEdBQUdsSixpQkFBUSxFQUMxQm1KLG1CQUFtQkYsY0FBYyxHQUFHO0lBRTFDQSxlQUFlRSxpQkFBaUIvRixHQUFHLENBQUMsQ0FBQ2dHO1FBQ25DLE1BQU0zSixPQUFPMkosaUJBQ1BDLGNBQWNILFlBQVlqSixRQUFRLENBQUNSLE1BQU1DO1FBRS9DLE9BQU8ySjtJQUNUO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVNuTixxQkFBcUIyRCxJQUFJLEVBQUVDLE9BQU87SUFDaEQsSUFBSSxFQUFFNEosWUFBWSxFQUFFLEdBQUc3SjtJQUV2QixNQUFNLEVBQUU4SixXQUFXLEVBQUUsR0FBR3ZKLGlCQUFRLEVBQzFCd0osbUJBQW1CRixjQUFjLEdBQUc7SUFFMUNBLGVBQWVFLGlCQUFpQnBHLEdBQUcsQ0FBQyxDQUFDcUc7UUFDbkMsTUFBTWhLLE9BQU9nSyxpQkFDUEMsY0FBY0gsWUFBWXRKLFFBQVEsQ0FBQ1IsTUFBTUM7UUFFL0MsT0FBT2dLO0lBQ1Q7SUFFQSxPQUFPSjtBQUNUO0FBRU8sU0FBUzdLLHFCQUFxQmdCLElBQUksRUFBRUMsT0FBTztJQUNoRCxJQUFJLEVBQUVpSyxZQUFZLEVBQUUsR0FBR2xLO0lBRXZCLE1BQU0sRUFBRW1LLFdBQVcsRUFBRSxHQUFHNUosaUJBQVEsRUFDMUI2SixtQkFBbUJGLGNBQWUsR0FBRztJQUUzQ0EsZUFBZUUsaUJBQWlCekcsR0FBRyxDQUFDLENBQUMwRztRQUNuQyxNQUFNckssT0FBT3FLLGlCQUNQQyxjQUFjSCxZQUFZM0osUUFBUSxDQUFDUixNQUFNQztRQUUvQyxPQUFPcUs7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTdEwsc0JBQXNCb0IsSUFBSSxFQUFFQyxPQUFPO0lBQ2pELElBQUksRUFBRXNLLGFBQWEsRUFBRSxHQUFHdkssTUFBTyxHQUFHO0lBRWxDLE1BQU13SyxvQkFBb0JELGVBQWUsR0FBRztJQUU1Q0EsZ0JBQWdCQyxrQkFBa0I3RyxHQUFHLENBQUMsQ0FBQzhHO1FBQ3JDLE1BQU16SyxPQUFPeUssa0JBQ1BDLGVBQWUvTCxpQ0FBaUNxQixNQUFNQztRQUU1RCxPQUFPeUs7SUFDVDtJQUVBLE9BQU9IO0FBQ1Q7QUFFTyxTQUFTOU4sc0JBQXNCdUQsSUFBSSxFQUFFQyxPQUFPO0lBQ2pELElBQUksRUFBRTBLLGFBQWEsRUFBRSxHQUFHM0s7SUFFeEIsTUFBTSxFQUFFMEMsWUFBWSxFQUFFLEdBQUduQyxpQkFBUSxFQUMzQnFLLG9CQUFvQkQsZUFBZSxHQUFHO0lBRTVDQSxnQkFBZ0JDLGtCQUFrQmpILEdBQUcsQ0FBQyxDQUFDaEI7UUFDckMsTUFBTTNDLE9BQU8yQyxrQkFDUEYsZUFBZUMsYUFBYWxDLFFBQVEsQ0FBQ1IsTUFBTUM7UUFFakQsT0FBT3dDO0lBQ1Q7SUFFQSxPQUFPa0k7QUFDVDtBQUVPLFNBQVM5UCx5QkFBeUJtRixJQUFJLEVBQUVDLE9BQU87SUFDcEQsTUFBTTRLLGlCQUFpQjVLO0lBRXRCLENBQUEsRUFBQ0EsT0FBTyxFQUFDLEdBQUdELElBQUc7SUFFaEJBLE9BQU9DLFNBQVMsR0FBRztJQUVuQkEsVUFBVTRLLGdCQUFnQixHQUFHO0lBRTdCLE1BQU1DLG9CQUFvQkMsa0JBQWdCLENBQUN2SyxRQUFRLENBQUNSLE1BQU1DO0lBRTFELE9BQU82SztBQUNUO0FBRU8sU0FBU3JRLDBCQUEwQnVGLElBQUksRUFBRUMsT0FBTztJQUNyRCxJQUFJLEVBQUUrSyxpQkFBaUIsRUFBRSxHQUFHaEw7SUFFNUIsTUFBTSxFQUFFcUYsUUFBUSxFQUFFLEdBQUc5RSxpQkFBUSxFQUN2QjBLLHdCQUF3QkQsbUJBQW1CLEdBQUc7SUFFcERBLG9CQUFvQkMsc0JBQXNCdEgsR0FBRyxDQUFDLENBQUN1SDtRQUM3QyxNQUFNbEwsT0FBT2tMLHNCQUNQMUYsV0FBV0gsU0FBUzdFLFFBQVEsQ0FBQ1IsTUFBTUMsVUFDbkNrTCxtQkFBbUIzRixVQUFXLEdBQUc7UUFFdkMsT0FBTzJGO0lBQ1Q7SUFFQSxPQUFPSDtBQUNUO0FBRU8sU0FBU3JOLDBCQUEwQnFDLElBQUksRUFBRUMsT0FBTztJQUNyRCxJQUFJLEVBQUVtTCxpQkFBaUIsRUFBRSxHQUFHcEw7SUFFNUIsTUFBTSxFQUFFcUwsZ0JBQWdCLEVBQUUsR0FBRzlLLGlCQUFRLEVBQy9CK0ssd0JBQXdCRixtQkFBbUIsR0FBRztJQUVwREEsb0JBQW9CRSxzQkFBc0IzSCxHQUFHLENBQUMsQ0FBQzRIO1FBQzdDLE1BQU12TCxPQUFPdUwsc0JBQ1BDLG1CQUFtQkgsaUJBQWlCN0ssUUFBUSxDQUFDUixNQUFNQztRQUV6RCxPQUFPdUw7SUFDVDtJQUVBLE9BQU9KO0FBQ1Q7QUFFTyxTQUFTblAsNkJBQTZCK0QsSUFBSSxFQUFFQyxPQUFPO0lBQ3hELElBQUksRUFBRXdMLG9CQUFvQixFQUFFLEdBQUd6TDtJQUUvQixNQUFNLEVBQUUwTCxtQkFBbUIsRUFBRSxHQUFHbkwsaUJBQVEsRUFDbENvTCwyQkFBMkJGLHNCQUFzQixHQUFHO0lBRTFEQSx1QkFBdUJFLHlCQUF5QmhJLEdBQUcsQ0FBQyxDQUFDaUk7UUFDbkQsTUFBTTVMLE9BQU80TCx5QkFDUEMsc0JBQXNCSCxvQkFBb0JsTCxRQUFRLENBQUNSLE1BQU1DO1FBRS9ELE9BQU80TDtJQUNUO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVNsUiw4QkFBOEJ5RixJQUFJLEVBQUVDLE9BQU87SUFDekQsSUFBSSxFQUFFNkwscUJBQXFCLEVBQUUsR0FBRzlMO0lBRWhDLE1BQU0sRUFBRTBDLFlBQVksRUFBRSxHQUFHbkMsaUJBQVEsRUFDM0J3TCw0QkFBNEJELHVCQUF1QixHQUFHO0lBRTVEQSx3QkFBd0JDLDBCQUEwQnBJLEdBQUcsQ0FBQyxDQUFDcUk7UUFDckQsTUFBTWhNLE9BQU9nTSwwQkFDUHZKLGVBQWVDLGFBQWFsQyxRQUFRLENBQUNSLE1BQU1DLFVBQzNDZ00sdUJBQXVCeEosY0FBZSxHQUFHO1FBRS9DLE9BQU93SjtJQUNUO0lBRUEsT0FBT0g7QUFDVDtBQUVPLFNBQVNsUCxlQUFlc0QsSUFBSTtJQUNqQyxNQUFNQyxXQUFXRCxNQUFPLEdBQUc7SUFFM0IsT0FBT0M7QUFDVDtBQUVPLFNBQVNoQixlQUFlaUIsSUFBSTtJQUNqQyxNQUFNQyxXQUFXLEFBQUNELFNBQVMsT0FDUkEsS0FBSzhMLE1BQU0sS0FDVDtJQUVyQixPQUFPN0w7QUFDVDtBQUVPLFNBQVNWLGVBQWVjLElBQUk7SUFDakMsTUFBTThDLFdBQVcsQUFBQzlDLFNBQVMsT0FDUkEsS0FBS3lMLE1BQU0sS0FDVDtJQUVyQixPQUFPM0k7QUFDVDtBQUVPLFNBQVNySSxpQkFBaUI2RixLQUFLO0lBQ3BDLE1BQU1DLFlBQVksQUFBQ0QsVUFBVSxPQUNUQSxNQUFNbUwsTUFBTSxLQUNWO0lBRXRCLE9BQU9sTDtBQUNUO0FBRU8sU0FBU3BGLGlCQUFpQmdGLEtBQUs7SUFDcEMsTUFBTUUsWUFBWUYsTUFBTXNMLE1BQU07SUFFOUIsT0FBT3BMO0FBQ1Q7QUFFTyxTQUFTaEUscUJBQXFCcUUsT0FBTztJQUMxQyxNQUFNZ0wsY0FBY2hMLFNBQVUsR0FBRztJQUVqQyxPQUFPZ0w7QUFDVDtBQUVPLFNBQVM1UyxzQkFBc0I2UyxPQUFPO0lBQzNDLE1BQU1DLGNBQWNELFFBQVFGLE1BQU07SUFFbEMsT0FBT0c7QUFDVDtBQUVPLFNBQVNqUSx1QkFBdUJnRixRQUFRO0lBQzdDLE1BQU1rTCxlQUFlLEFBQUNsTCxhQUFhLE9BQ1pBLFNBQVM4SyxNQUFNLEtBQ2I7SUFFekIsT0FBT0k7QUFDVDtBQUVPLFNBQVN0Tyx5QkFBeUIrRCxTQUFTO0lBQ2hELE1BQU1FLGdCQUFnQkYsVUFBVW1LLE1BQU07SUFFdEMsT0FBT2pLO0FBQ1Q7QUFFTyxTQUFTekQseUJBQXlCOEMsU0FBUztJQUNoRCxNQUFNRSxnQkFBZ0IsQUFBQ0YsY0FBYyxPQUNiQSxVQUFVNEssTUFBTSxLQUNkO0lBRTFCLE9BQU8xSztBQUNUO0FBRU8sU0FBUzVHLHlCQUF5QjZHLFNBQVM7SUFDaEQsTUFBTUUsZ0JBQWdCRixVQUFVeUssTUFBTTtJQUV0QyxPQUFPdks7QUFDVDtBQUVPLFNBQVNyRCx5QkFBeUJzRCxTQUFTO0lBQ2hELE1BQU1FLGdCQUFnQixBQUFDRixjQUFjLE9BQ2JBLFVBQVVzSyxNQUFNLEtBQ2Q7SUFFMUIsT0FBT3BLO0FBQ1Q7QUFFTyxTQUFTdEcsMkJBQTJCMEcsVUFBVTtJQUNuRCxNQUFNQyxpQkFBaUJELFlBQWEsR0FBRztJQUV2QyxPQUFPQztBQUNUO0FBRU8sU0FBU2xJLDJCQUEyQm1JLFVBQVU7SUFDbkQsTUFBTUUsaUJBQWlCRixXQUFXOEosTUFBTTtJQUV4QyxPQUFPNUo7QUFDVDtBQUVPLFNBQVN4RSw2QkFBNkIwRSxXQUFXO0lBQ3RELE1BQU0rSixrQkFBa0IvSixhQUFjLEdBQUc7SUFFekMsT0FBTytKO0FBQ1Q7QUFFTyxTQUFTL1AsK0JBQStCaUcsWUFBWTtJQUN6RCxNQUFNRSxtQkFBbUJGLGFBQWF5SixNQUFNO0lBRTVDLE9BQU92SjtBQUNUO0FBRU8sU0FBU3JGLGlDQUFpQ3NGLGFBQWE7SUFDNUQsTUFBTUUsb0JBQW9CLEFBQUNGLGtCQUFrQixPQUNqQkEsY0FBY3NKLE1BQU0sS0FDbEI7SUFFOUIsT0FBT3BKO0FBQ1Q7QUFFTyxTQUFTOUYscUNBQXFDK0YsZUFBZTtJQUNsRSxNQUFNeUosc0JBQXNCekosaUJBQWtCLEdBQUc7SUFFakQsT0FBT3lKO0FBQ1Q7QUFFTyxTQUFTMVIsdUNBQXVDMlIsZ0JBQWdCO0lBQ3JFLE1BQU1DLHVCQUF1QkQsaUJBQWlCUCxNQUFNO0lBRXBELE9BQU9RO0FBQ1Q7QUFFTyxTQUFTbFAsMkNBQTJDd0Ysa0JBQWtCO0lBQzNFLE1BQU1FLHlCQUF5QkYsbUJBQW1Ca0osTUFBTTtJQUV4RCxPQUFPaEo7QUFDVDtBQUVPLFNBQVM1SSwrQ0FBK0MyUixvQkFBb0I7SUFDakYsTUFBTUQsMkJBQTJCQyxxQkFBcUJDLE1BQU07SUFFNUQsT0FBT0Y7QUFDVDtBQUVPLFNBQVNyTixpQ0FBaUNxQixJQUFJLEVBQUVDLE9BQU87SUFDNUQsTUFBTSxFQUFFME0sZ0JBQWdCLEVBQUVDLGlCQUFpQixFQUFFQyxxQkFBcUIsRUFBRUMscUJBQXFCLEVBQUUsR0FBR3ZNLGlCQUFRLEVBQ2hHbUssZUFBZWlDLGlCQUFpQm5NLFFBQVEsQ0FBQ1IsTUFBTUMsWUFDaEMyTSxrQkFBa0JwTSxRQUFRLENBQUNSLE1BQU1DLFlBQ2pDNE0sc0JBQXNCck0sUUFBUSxDQUFDUixNQUFNQyxZQUNyQzZNLHNCQUFzQnRNLFFBQVEsQ0FBQ1IsTUFBTUM7SUFFMUQsT0FBT3lLO0FBQ1Q7QUFFTyxTQUFTckwsaUJBQWlCb0UsS0FBSztJQUNwQyxNQUFNQyxZQUFZRCxNQUFNRSxHQUFHLENBQUMsQ0FBQ3ZEO1FBQzNCLE1BQU1DLFdBQVdELEtBQUs4TCxNQUFNO1FBRTVCLE9BQU83TDtJQUNUO0lBRUEsT0FBT3FEO0FBQ1Q7QUFFTyxTQUFTN0QsaUJBQWlCc0QsS0FBSztJQUNwQyxNQUFNQyxZQUFZRCxNQUFNUSxHQUFHLENBQUMsQ0FBQ2xEO1FBQzNCLE1BQU04QyxXQUFXOUMsS0FBS3lMLE1BQU07UUFFNUIsT0FBTzNJO0lBQ1Q7SUFFQSxPQUFPSDtBQUNUO0FBRU8sU0FBU2hGLGlCQUFpQndGLEtBQUs7SUFDcEMsTUFBTUUsWUFBWUYsTUFBTUQsR0FBRyxDQUFDLENBQUNLO1FBQzNCLE1BQU1ELFdBQVdDLEtBQUtrSSxNQUFNO1FBRTVCLE9BQU9uSTtJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVNoSSxtQkFBbUJxSSxNQUFNO0lBQ3ZDLE1BQU1DLGFBQWFELE9BQU9SLEdBQUcsQ0FBQyxDQUFDL0M7UUFDN0IsTUFBTUUsWUFBWUYsTUFBTXNMLE1BQU07UUFFOUIsT0FBT3BMO0lBQ1Q7SUFFQSxPQUFPc0Q7QUFDVDtBQUVPLFNBQVNoSixtQkFBbUI2SSxNQUFNO0lBQ3ZDLE1BQU1DLGFBQWFELE9BQU9OLEdBQUcsQ0FBQyxDQUFDNUM7UUFDN0IsTUFBTUMsWUFBWUQsTUFBTW1MLE1BQU07UUFFOUIsT0FBT2xMO0lBQ1Q7SUFFQSxPQUFPa0Q7QUFDVDtBQUVPLFNBQVNySyxtQkFBbUJ3SyxNQUFNO0lBQ3ZDLE1BQU1FLGFBQWFGLE9BQU9WLEdBQUcsQ0FBQyxDQUFDYztRQUM3QixNQUFNRCxZQUFZQyxNQUFNeUgsTUFBTTtRQUU5QixPQUFPMUg7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTbkgsdUJBQXVCc0gsUUFBUTtJQUM3QyxNQUFNRSxlQUFlRixTQUFTZixHQUFHLENBQUMsQ0FBQ21CO1FBQ2pDLE1BQU1ELGNBQWNDLFFBQVFvSCxNQUFNO1FBRWxDLE9BQU9ySDtJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVNyRix1QkFBdUJ3RixRQUFRO0lBQzdDLE1BQU1FLGVBQWVGLFNBQVNwQixHQUFHLENBQUMsQ0FBQ3dCO1FBQ2pDLE1BQU1ELGNBQWNDLFFBQVErRyxNQUFNO1FBRWxDLE9BQU9oSDtJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVNsRix5QkFBeUJxRixTQUFTO0lBQ2hELE1BQU1FLGdCQUFnQkYsVUFBVXpCLEdBQUcsQ0FBQyxDQUFDNkI7UUFDbkMsTUFBTUQsZUFBZUMsU0FBUzBHLE1BQU07UUFFcEMsT0FBTzNHO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU2hLLDJCQUEyQmlMLFVBQVU7SUFDbkQsTUFBTUUsaUJBQWlCRixXQUFXNUMsR0FBRyxDQUFDLENBQUNnRDtRQUNyQyxNQUFNRCxpQkFBaUJDLFdBQVd1RixNQUFNO1FBRXhDLE9BQU94RjtJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVMxSCwyQkFBMkJvSCxVQUFVO0lBQ25ELE1BQU1DLGlCQUFpQkQsV0FBV3hDLEdBQUcsQ0FBQyxDQUFDMkM7UUFDckMsTUFBTUQsZ0JBQWdCQyxVQUFVNEYsTUFBTTtRQUV0QyxPQUFPN0Y7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTbEosMkJBQTJCMEosVUFBVTtJQUNuRCxNQUFNRSxpQkFBaUJGLFdBQVdqRCxHQUFHLENBQUMsQ0FBQ3FEO1FBQ3JDLE1BQU1ELGdCQUFnQkMsVUFBVWtGLE1BQU07UUFFdEMsT0FBT25GO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU3BKLDJCQUEyQm9JLFVBQVU7SUFDbkQsTUFBTUUsaUJBQWlCRixXQUFXbkMsR0FBRyxDQUFDLENBQUN1QztRQUNyQyxNQUFNRCxlQUFlQyxTQUFTZ0csTUFBTTtRQUVwQyxPQUFPakc7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTdEssMkJBQTJCdUwsVUFBVTtJQUNuRCxNQUFNRSxpQkFBaUJGLFdBQVd0RCxHQUFHLENBQUMsQ0FBQzBEO1FBQ3JDLE1BQU1ELGdCQUFnQkMsVUFBVTZFLE1BQU07UUFFdEMsT0FBTzlFO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU25NLDJCQUEyQnlLLFVBQVU7SUFDbkQsTUFBTUUsaUJBQWlCRixXQUFXOUIsR0FBRyxDQUFDLENBQUNrQztRQUNyQyxNQUFNRCxlQUFlQyxTQUFTcUcsTUFBTTtRQUVwQyxPQUFPdEc7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTakgsMkJBQTJCNEksVUFBVTtJQUNuRCxNQUFNQyxpQkFBaUJELFdBQVczRCxHQUFHLENBQUMsQ0FBQ3JDO1FBQ3JDLE1BQU1FLGdCQUFnQkYsVUFBVTRLLE1BQU07UUFFdEMsT0FBTzFLO0lBQ1Q7SUFFQSxPQUFPK0Y7QUFDVDtBQUVPLFNBQVM5TiwyQkFBMkIrTixVQUFVO0lBQ25ELE1BQU1PLGlCQUFpQlAsV0FBVzdELEdBQUcsQ0FBQyxDQUFDc0U7UUFDckMsTUFBTUQsZ0JBQWdCQyxVQUFVaUUsTUFBTTtRQUV0QyxPQUFPbEU7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTN0osMkJBQTJCZ0ssVUFBVTtJQUNuRCxNQUFNQyxpQkFBaUJELFdBQVd2RSxHQUFHLENBQUMsQ0FBQzVCO1FBQ3JDLE1BQU1FLGdCQUFnQkYsVUFBVW1LLE1BQU07UUFFdEMsT0FBT2pLO0lBQ1Q7SUFFQSxPQUFPa0c7QUFDVDtBQUVPLFNBQVNoTyw2QkFBNkJpTyxXQUFXO0lBQ3RELE1BQU1FLGtCQUFrQkYsWUFBWXpFLEdBQUcsQ0FBQyxDQUFDNkU7UUFDdkMsTUFBTUQsaUJBQWlCQyxXQUFXMEQsTUFBTTtRQUV4QyxPQUFPM0Q7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTdk8sNkJBQTZCME8sV0FBVztJQUN0RCxNQUFNRSxrQkFBa0JGLFlBQVk5RSxHQUFHLENBQUMsQ0FBQ2tGO1FBQ3ZDLE1BQU1ELGlCQUFpQkMsV0FBV3FELE1BQU07UUFFeEMsT0FBT3REO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU2hQLDZCQUE2Qm1QLFdBQVc7SUFDdEQsTUFBTUUsa0JBQWtCRixZQUFZbkYsR0FBRyxDQUFDLENBQUN1RjtRQUN2QyxNQUFNRCxpQkFBaUJDLFdBQVdnRCxNQUFNO1FBRXhDLE9BQU9qRDtJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVMvSiwrQkFBK0JpTCxZQUFZO0lBQ3pELE1BQU1FLG1CQUFtQkYsYUFBYXZHLEdBQUcsQ0FBQyxDQUFDMkc7UUFDekMsTUFBTUQsa0JBQWtCQyxZQUFZNEIsTUFBTTtRQUUxQyxPQUFPN0I7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTL1AsK0JBQStCbVAsWUFBWTtJQUN6RCxNQUFNRSxtQkFBbUJGLGFBQWE3RixHQUFHLENBQUMsQ0FBQ2lHO1FBQ3pDLE1BQU1ELGtCQUFrQkMsWUFBWXNDLE1BQU07UUFFMUMsT0FBT3ZDO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU3BOLCtCQUErQnVOLFlBQVk7SUFDekQsTUFBTUUsbUJBQW1CRixhQUFhbEcsR0FBRyxDQUFDLENBQUNzRztRQUN6QyxNQUFNRCxrQkFBa0JDLFlBQVlpQyxNQUFNO1FBRTFDLE9BQU9sQztJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVNySywrQkFBK0J5SixZQUFZO0lBQ3pELE1BQU1FLG1CQUFtQkYsYUFBYXhGLEdBQUcsQ0FBQyxDQUFDNEY7UUFDekMsTUFBTUQsaUJBQWlCQyxXQUFXMkMsTUFBTTtRQUV4QyxPQUFPNUM7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTeEssaUNBQWlDMEwsYUFBYTtJQUM1RCxNQUFNQyxvQkFBb0JELGNBQWM1RyxHQUFHLENBQUMsQ0FBQytHO1FBQzNDLE1BQU1ELG1CQUFtQkMsYUFBYXdCLE1BQU07UUFFNUMsT0FBT3pCO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBUzlOLGlDQUFpQ2lPLGFBQWE7SUFDNUQsTUFBTUMsb0JBQW9CRCxjQUFjaEgsR0FBRyxDQUFDLENBQUNsQjtRQUMzQyxNQUFNRSxtQkFBbUJGLGFBQWF5SixNQUFNO1FBRTVDLE9BQU92SjtJQUNUO0lBRUEsT0FBT2lJO0FBQ1Q7QUFFTyxTQUFTaE4seUNBQXlDd04saUJBQWlCO0lBQ3hFLE1BQU1FLHdCQUF3QkYsa0JBQWtCekgsR0FBRyxDQUFDLENBQUM2SDtRQUNuRCxNQUFNRCx1QkFBdUJDLGlCQUFpQlUsTUFBTTtRQUVwRCxPQUFPWDtJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVM1USx5Q0FBeUNzUSxpQkFBaUI7SUFDeEUsTUFBTUMsd0JBQXdCRCxrQkFBa0JySCxHQUFHLENBQUMsQ0FBQ3dIO1FBQ25ELE1BQU1ELHVCQUF1QkMsaUJBQWlCZSxNQUFNO1FBRXBELE9BQU9oQjtJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVMvTywrQ0FBK0N1UCxvQkFBb0I7SUFDakYsTUFBTUUsMkJBQTJCRixxQkFBcUI5SCxHQUFHLENBQUMsQ0FBQ2tJO1FBQ3pELE1BQU1ELDBCQUEwQkMsb0JBQW9CSyxNQUFNO1FBRTFELE9BQU9OO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU25SLGlEQUFpRHNSLHFCQUFxQjtJQUNwRixNQUFNQyw0QkFBNEJELHNCQUFzQm5JLEdBQUcsQ0FBQyxDQUFDc0k7UUFDM0QsTUFBTUQsMkJBQTJCQyxxQkFBcUJDLE1BQU07UUFFNUQsT0FBT0Y7SUFDVDtJQUVBLE9BQU9EO0FBQ1Q7QUFFQSxTQUFTcEwsZUFBZVQsSUFBSSxFQUFFRCxPQUFPO0lBQ25DLE1BQU04TSxXQUFXN00sTUFDWE8sT0FBT1IsUUFBUStNLGtCQUFrQixDQUFDRDtJQUV4QyxPQUFPdE07QUFDVDtBQUVBLFNBQVNZLG1CQUFtQm5CLElBQUksRUFBRUQsT0FBTztJQUN2QyxNQUFNZ04sZUFBZS9NLE1BQ2ZrQixXQUFXbkIsUUFBUWlOLDBCQUEwQixDQUFDRDtJQUVwRCxPQUFPN0w7QUFDVCJ9
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "1.0.824",
4
+ "version": "1.0.825",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -12,12 +12,12 @@
12
12
  "dependencies": {
13
13
  "argumentative": "^2.0.47",
14
14
  "necessary": "^17.1.7",
15
- "occam-furtle": "^3.0.178",
15
+ "occam-furtle": "^3.0.179",
16
16
  "occam-grammars": "^1.3.520",
17
- "occam-languages": "^0.0.172",
17
+ "occam-languages": "^0.0.175",
18
18
  "occam-lexers": "^23.1.44",
19
19
  "occam-model": "^1.0.505",
20
- "occam-nominal": "^1.0.89",
20
+ "occam-nominal": "^1.0.90",
21
21
  "occam-parsers": "^23.1.50",
22
22
  "occam-server": "^7.0.6"
23
23
  },
@@ -8,18 +8,25 @@ import NominalLexer from "../../nominal/lexer";
8
8
  import NominalParser from "../../nominal/parser";
9
9
 
10
10
  import { verifyFile } from "../../process/verify";
11
- import { initialiseFile } from "../../process/initialise";
12
11
  import { baseTypeFromNothing } from "../../utilities/type";
13
12
  import { findMetaTypeByMetaTypeName } from "../../metaTypes";
14
13
  import { typesFromJSON,
14
+ rulesFromJSON,
15
+ axiomsFromJSON,
15
16
  lemmasFromJSON,
16
17
  typesToTypesJSON,
18
+ theoremsFromJSON,
19
+ rulesToRulesJSON,
20
+ axiomsToAxiomsJSON,
17
21
  metaLemmasFromJSON,
22
+ conjecturesFromJSON,
18
23
  combinatorsFromJSON,
19
24
  typePrefixesFromJSON,
20
25
  constructorsFromJSON,
21
26
  metatheoremsFromJSON,
27
+ theoremsToTheoremsJSON,
22
28
  declaredVariablesFromJSON,
29
+ conjecturesToConjecturesJSON,
23
30
  combinatorsToCombinatorsJSON,
24
31
  declaredMetavariablesFromJSON,
25
32
  typePrefixesToTypePrefixesJSON,
@@ -798,42 +805,42 @@ export default class NominalFileContext extends FileContext {
798
805
  }
799
806
 
800
807
  initialise() {
801
- super.initialise();
802
-
803
808
  const json = this.getJSON();
804
809
 
805
- if (json !== null) {
806
- const fileContext = this; ///
810
+ if (json === null) {
811
+ super.initialise();
807
812
 
808
- this.types = [];
813
+ return;
814
+ }
809
815
 
810
- typesFromJSON(json, this.types, fileContext);
816
+ const fileContext = this; ///
811
817
 
812
- this.lemmas = lemmasFromJSON(json, fileContext);
813
- this.metaLemmas = metaLemmasFromJSON(json, fileContext);
818
+ this.types = [];
814
819
 
815
- this.declaredMetavariables = declaredMetavariablesFromJSON(json, fileContext);
816
- this.declaredVariables = declaredVariablesFromJSON(json, fileContext);
817
- this.typePrefixes = typePrefixesFromJSON(json, fileContext);
818
- this.combinators = combinatorsFromJSON(json, fileContext);
819
- this.constructors = constructorsFromJSON(json, fileContext);
820
- this.metatheorems = metatheoremsFromJSON(json, fileContext);
820
+ typesFromJSON(json, this.types, fileContext);
821
821
 
822
- const node = this.getNode(),
823
- context = this, ///
824
- fileNode = node; ///
822
+ this.lemmas = lemmasFromJSON(json, fileContext);
823
+ this.metaLemmas = metaLemmasFromJSON(json, fileContext);
825
824
 
826
- this.rules = [];
827
- this.axioms = [];
828
- this.theorems = [];
829
- this.conjectures = [];
825
+ this.declaredMetavariables = declaredMetavariablesFromJSON(json, fileContext);
826
+ this.declaredVariables = declaredVariablesFromJSON(json, fileContext);
827
+ this.typePrefixes = typePrefixesFromJSON(json, fileContext);
828
+ this.combinators = combinatorsFromJSON(json, fileContext);
829
+ this.constructors = constructorsFromJSON(json, fileContext);
830
830
 
831
- initialiseFile(fileNode, context);
832
- }
831
+ this.rules = rulesFromJSON(json, fileContext);
832
+ this.axioms = axiomsFromJSON(json, fileContext);
833
+ this.theorems = theoremsFromJSON(json, fileContext);
834
+ this.conjectures = [conjecturesFromJSON(json, fileContext)];
835
+ this.metatheorems = metatheoremsFromJSON(json, fileContext);
833
836
  }
834
837
 
835
838
  toJSON() {
836
839
  const typesJSON = typesToTypesJSON(this.types),
840
+ rulesJSON = rulesToRulesJSON(this.rules),
841
+ axiomsJSON = axiomsToAxiomsJSON(this.axioms),
842
+ theoremsJSON = theoremsToTheoremsJSON(this.theorems),
843
+ conjecturesJSON = conjecturesToConjecturesJSON(this.conjectures),
837
844
  combinatorsJSON = combinatorsToCombinatorsJSON(this.combinators),
838
845
  typePrefixesJSON = typePrefixesToTypePrefixesJSON(this.typePrefixes),
839
846
  constructorsJSON = constructorsToConstructorsJSON(this.constructors),
@@ -843,6 +850,10 @@ export default class NominalFileContext extends FileContext {
843
850
  fileContent = this.fileContent,
844
851
  filePath = this.filePath,
845
852
  types = typesJSON, ///
853
+ rules = rulesJSON, ///
854
+ axioms = axiomsJSON, ///
855
+ theorems = theoremsJSON, ///
856
+ conjectures = conjecturesJSON, ///
846
857
  combinators = combinatorsJSON, ///
847
858
  typePrefixes = typePrefixesJSON, ///
848
859
  constructors = constructorsJSON, ///
@@ -853,6 +864,10 @@ export default class NominalFileContext extends FileContext {
853
864
  fileContent,
854
865
  filePath,
855
866
  types,
867
+ rules,
868
+ axioms,
869
+ theorems,
870
+ conjectures,
856
871
  combinators,
857
872
  typePrefixes,
858
873
  constructors,