occam-verify-cli 1.0.662 → 1.0.664

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/.swcrc +3 -0
  2. package/lib/abbreviations.js +10 -10
  3. package/lib/action/help.js +27 -2
  4. package/lib/action/verify.js +33 -205
  5. package/lib/action/version.js +6 -6
  6. package/lib/commands.js +4 -4
  7. package/lib/constants.js +16 -16
  8. package/lib/context/ephemeral.js +337 -540
  9. package/lib/context/file/nominal.js +545 -1040
  10. package/lib/context/liminal.js +159 -325
  11. package/lib/context/literal.js +34 -138
  12. package/lib/context/nominal.js +29 -124
  13. package/lib/context/scoped.js +163 -325
  14. package/lib/context/synthetic.js +31 -126
  15. package/lib/context.js +230 -482
  16. package/lib/defaults.js +8 -8
  17. package/lib/element/assertion/contained.js +159 -299
  18. package/lib/element/assertion/defined.js +145 -279
  19. package/lib/element/assertion/property.js +132 -266
  20. package/lib/element/assertion/satisfies.js +108 -239
  21. package/lib/element/assertion/subproof.js +88 -207
  22. package/lib/element/assertion/type.js +132 -262
  23. package/lib/element/assertion.js +17 -156
  24. package/lib/element/assumption.js +187 -386
  25. package/lib/element/combinator/bracketed.js +19 -142
  26. package/lib/element/combinator.js +65 -228
  27. package/lib/element/conclusion.js +72 -370
  28. package/lib/element/constructor/bracketed.js +34 -157
  29. package/lib/element/constructor.js +81 -253
  30. package/lib/element/declaration/combinator.js +41 -286
  31. package/lib/element/declaration/complexType.js +184 -452
  32. package/lib/element/declaration/constructor.js +69 -323
  33. package/lib/element/declaration/metavariable.js +70 -317
  34. package/lib/element/declaration/simpleType.js +117 -378
  35. package/lib/element/declaration/typePrefix.js +54 -299
  36. package/lib/element/declaration/variable.js +74 -328
  37. package/lib/element/declaration.js +3 -114
  38. package/lib/element/deduction.js +76 -378
  39. package/lib/element/derivation.js +31 -340
  40. package/lib/element/equality.js +152 -347
  41. package/lib/element/equivalence.js +160 -385
  42. package/lib/element/equivalences.js +132 -356
  43. package/lib/element/error.js +16 -290
  44. package/lib/element/frame.js +210 -418
  45. package/lib/element/hypothesis.js +56 -354
  46. package/lib/element/judgement.js +120 -305
  47. package/lib/element/label.js +62 -236
  48. package/lib/element/metaType.js +35 -200
  49. package/lib/element/metavariable.js +249 -459
  50. package/lib/element/parameter.js +39 -202
  51. package/lib/element/procedureCall.js +74 -381
  52. package/lib/element/procedureReference.js +27 -186
  53. package/lib/element/proof.js +38 -349
  54. package/lib/element/proofAssertion/premise.js +174 -466
  55. package/lib/element/proofAssertion/step.js +144 -495
  56. package/lib/element/proofAssertion/supposition.js +170 -466
  57. package/lib/element/proofAssertion.js +47 -195
  58. package/lib/element/property.js +36 -201
  59. package/lib/element/propertyRelation.js +62 -223
  60. package/lib/element/reference.js +173 -378
  61. package/lib/element/rule.js +178 -673
  62. package/lib/element/section.js +47 -356
  63. package/lib/element/signature.js +96 -264
  64. package/lib/element/statement.js +195 -395
  65. package/lib/element/subDerivation.js +32 -341
  66. package/lib/element/subproof.js +73 -448
  67. package/lib/element/substitution/frame.js +114 -257
  68. package/lib/element/substitution/reference.js +108 -248
  69. package/lib/element/substitution/statement.js +223 -397
  70. package/lib/element/substitution/term.js +123 -266
  71. package/lib/element/substitution.js +97 -296
  72. package/lib/element/term.js +139 -339
  73. package/lib/element/topLevelAssertion/axiom.js +153 -459
  74. package/lib/element/topLevelAssertion/conjecture.js +24 -295
  75. package/lib/element/topLevelAssertion/lemma.js +22 -289
  76. package/lib/element/topLevelAssertion/theorem.js +24 -295
  77. package/lib/element/topLevelAssertion.js +218 -718
  78. package/lib/element/topLevelMetaAssertion/metaLemma.js +24 -290
  79. package/lib/element/topLevelMetaAssertion/metatheorem.js +24 -290
  80. package/lib/element/topLevelMetaAssertion.js +109 -509
  81. package/lib/element/type.js +198 -435
  82. package/lib/element/typePrefix.js +27 -186
  83. package/lib/element/variable.js +119 -308
  84. package/lib/elements.js +4 -4
  85. package/lib/index.js +4 -4
  86. package/lib/main.js +18 -18
  87. package/lib/messages.js +2 -2
  88. package/lib/metaTypeNames.js +4 -4
  89. package/lib/metaTypes.js +10 -10
  90. package/lib/node/argument.js +15 -109
  91. package/lib/node/assertion/contained.js +33 -130
  92. package/lib/node/assertion/defined.js +29 -123
  93. package/lib/node/assertion/property.js +18 -112
  94. package/lib/node/assertion/satisfies.js +14 -105
  95. package/lib/node/assertion/subproof.js +10 -98
  96. package/lib/node/assertion/type.js +14 -105
  97. package/lib/node/assertion.js +5 -89
  98. package/lib/node/assumption.js +12 -103
  99. package/lib/node/body/axiom.js +5 -89
  100. package/lib/node/body/conjecture.js +5 -89
  101. package/lib/node/body/lemma.js +5 -89
  102. package/lib/node/body/metaLemma.js +5 -89
  103. package/lib/node/body/metatheorem.js +5 -89
  104. package/lib/node/body/rule.js +26 -126
  105. package/lib/node/body/theorem.js +5 -89
  106. package/lib/node/body.js +15 -109
  107. package/lib/node/combinator.js +9 -97
  108. package/lib/node/conclusion.js +12 -103
  109. package/lib/node/constructor.js +9 -97
  110. package/lib/node/declaration/combinator.js +10 -98
  111. package/lib/node/declaration/complexType.js +53 -162
  112. package/lib/node/declaration/constructor.js +29 -123
  113. package/lib/node/declaration/metavariable.js +18 -112
  114. package/lib/node/declaration/property.js +26 -123
  115. package/lib/node/declaration/simpleType.js +52 -158
  116. package/lib/node/declaration/typePrefix.js +14 -105
  117. package/lib/node/declaration/variable.js +33 -130
  118. package/lib/node/declaration.js +5 -89
  119. package/lib/node/deduction.js +12 -103
  120. package/lib/node/derivation.js +12 -125
  121. package/lib/node/document.js +5 -89
  122. package/lib/node/equality.js +17 -111
  123. package/lib/node/equivalence.js +9 -97
  124. package/lib/node/equivalences.js +5 -89
  125. package/lib/node/error.js +5 -89
  126. package/lib/node/frame.js +26 -123
  127. package/lib/node/header/axiom.js +10 -98
  128. package/lib/node/header/conjecture.js +5 -89
  129. package/lib/node/header/lemma.js +5 -89
  130. package/lib/node/header/metaLemma.js +5 -89
  131. package/lib/node/header/metatheorem.js +5 -89
  132. package/lib/node/header/rule.js +5 -89
  133. package/lib/node/header/theorem.js +5 -89
  134. package/lib/node/header.js +30 -130
  135. package/lib/node/hypothesis.js +12 -103
  136. package/lib/node/judgement.js +15 -109
  137. package/lib/node/label.js +9 -97
  138. package/lib/node/labels.js +9 -97
  139. package/lib/node/metaArgument.js +9 -97
  140. package/lib/node/metaType.js +16 -104
  141. package/lib/node/metavariable.js +23 -117
  142. package/lib/node/parameter.js +32 -123
  143. package/lib/node/parenthesisedLabel.js +9 -97
  144. package/lib/node/parenthesisedLabels.js +12 -103
  145. package/lib/node/placeholder.js +5 -89
  146. package/lib/node/procedureCall.js +15 -109
  147. package/lib/node/procedureReference.js +16 -104
  148. package/lib/node/proof.js +9 -97
  149. package/lib/node/proofAssertion/premise.js +10 -98
  150. package/lib/node/proofAssertion/step.js +32 -132
  151. package/lib/node/proofAssertion/supposition.js +10 -98
  152. package/lib/node/proofAssertion.js +12 -103
  153. package/lib/node/property.js +15 -106
  154. package/lib/node/propertyRelation.js +15 -109
  155. package/lib/node/qualification.js +12 -103
  156. package/lib/node/reference.js +9 -97
  157. package/lib/node/rule.js +26 -129
  158. package/lib/node/section.js +22 -122
  159. package/lib/node/signature.js +9 -97
  160. package/lib/node/statement.js +93 -238
  161. package/lib/node/subDerivation.js +12 -125
  162. package/lib/node/subproof.js +18 -115
  163. package/lib/node/substitution/frame.js +22 -119
  164. package/lib/node/substitution/reference.js +22 -119
  165. package/lib/node/substitution/statement.js +42 -151
  166. package/lib/node/substitution/term.js +22 -119
  167. package/lib/node/substitution.js +5 -89
  168. package/lib/node/term.js +51 -160
  169. package/lib/node/topLevelAssertion/axiom.js +8 -105
  170. package/lib/node/topLevelAssertion/conjecture.js +8 -105
  171. package/lib/node/topLevelAssertion/lemma.js +8 -105
  172. package/lib/node/topLevelAssertion/theorem.js +8 -105
  173. package/lib/node/topLevelAssertion.js +29 -135
  174. package/lib/node/topLevelMetaAssertion/metaLemma.js +8 -105
  175. package/lib/node/topLevelMetaAssertion/metatheorem.js +8 -105
  176. package/lib/node/topLevelMetaAssertion.js +25 -128
  177. package/lib/node/type.js +43 -140
  178. package/lib/node/typePrefix.js +16 -104
  179. package/lib/node/types.js +9 -97
  180. package/lib/node/variable.js +16 -104
  181. package/lib/nominal/lexer.js +3 -68
  182. package/lib/nominal/parser.js +7 -85
  183. package/lib/nonTerminalNodeMap.js +171 -101
  184. package/lib/options.js +6 -6
  185. package/lib/preamble.js +62 -62
  186. package/lib/prepare.js +4 -4
  187. package/lib/process/assign.js +20 -20
  188. package/lib/process/equate.js +39 -117
  189. package/lib/process/instantiate.js +10 -9
  190. package/lib/process/unify.js +199 -325
  191. package/lib/process/validate.js +87 -195
  192. package/lib/process/verify.js +263 -786
  193. package/lib/ruleNames.js +84 -84
  194. package/lib/tokenTypes.js +3 -3
  195. package/lib/utilities/bnf.js +7 -7
  196. package/lib/utilities/brackets.js +18 -18
  197. package/lib/utilities/clock.js +8 -8
  198. package/lib/utilities/context.js +23 -191
  199. package/lib/utilities/element.js +276 -276
  200. package/lib/utilities/equivalence.js +7 -7
  201. package/lib/utilities/fileContext.js +9 -9
  202. package/lib/utilities/instance.js +14 -14
  203. package/lib/utilities/json.js +211 -211
  204. package/lib/utilities/releaseContext.js +19 -147
  205. package/lib/utilities/statement.js +10 -10
  206. package/lib/utilities/string.js +47 -47
  207. package/lib/utilities/substitutions.js +19 -19
  208. package/lib/utilities/type.js +5 -5
  209. package/lib/utilities/unification.js +196 -426
  210. package/lib/utilities/validation.js +72 -72
  211. package/package.json +1 -1
@@ -262,633 +262,633 @@ _export(exports, {
262
262
  return variablesToVariablesJSON;
263
263
  }
264
264
  });
265
- var _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
266
- var _ephemeral = /*#__PURE__*/ _interop_require_default(require("../context/ephemeral"));
265
+ const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
266
+ const _ephemeral = /*#__PURE__*/ _interop_require_default(require("../context/ephemeral"));
267
267
  function _interop_require_default(obj) {
268
268
  return obj && obj.__esModule ? obj : {
269
269
  default: obj
270
270
  };
271
271
  }
272
272
  function lemmasFromNothing() {
273
- var lemmas = [];
273
+ const lemmas = [];
274
274
  return lemmas;
275
275
  }
276
276
  function metaLemmasFromNothing() {
277
- var metaLemmas = [];
277
+ const metaLemmas = [];
278
278
  return metaLemmas;
279
279
  }
280
280
  function nameFromJSON(json, context) {
281
- var name = json.name;
282
- var nameJSON = name; ///
281
+ let { name } = json;
282
+ const nameJSON = name; ///
283
283
  name = nameJSON; ///
284
284
  return name;
285
285
  }
286
286
  function termFromJSON(json, context) {
287
- var term = json.term;
288
- var termJSON = term; ///
287
+ let { term } = json;
288
+ const termJSON = term; ///
289
289
  json = termJSON; ///
290
- var Term = _elements.default.Term;
290
+ const { Term } = _elements.default;
291
291
  term = Term.fromJSON(json, context);
292
292
  return term;
293
293
  }
294
294
  function typeFromJSON(json, context) {
295
- var type = json.type;
295
+ let { type } = json;
296
296
  if (type !== null) {
297
297
  json = type; ///
298
- var name = json.name, prefixName = json.prefixName, nominalTypeName = prefixName !== null ? "".concat(prefixName).concat(name) : name; ///
298
+ const { name, prefixName } = json, nominalTypeName = prefixName !== null ? `${prefixName}${name}` : name; ///
299
299
  type = context.findTypeByNominalTypeName(nominalTypeName);
300
300
  }
301
301
  return type;
302
302
  }
303
303
  function metaTypeFromJSON(json, context) {
304
- var metaType = json.metaType;
304
+ let { metaType } = json;
305
305
  if (metaType !== null) {
306
306
  json = metaType; ///
307
- var name = json.name, metaTypeName = name; ///
307
+ const { name } = json, metaTypeName = name; ///
308
308
  metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
309
309
  }
310
310
  return metaType;
311
311
  }
312
312
  function statementFromJSON(json, context) {
313
- var _json_statement = json.statement, statement = _json_statement === void 0 ? null : _json_statement;
313
+ let { statement = null } = json;
314
314
  if (statement !== null) {
315
- var Statement = _elements.default.Statement, statementJSON = statement; ///
315
+ const { Statement } = _elements.default, statementJSON = statement; ///
316
316
  json = statementJSON; ///
317
317
  statement = Statement.fromJSON(json, context);
318
318
  }
319
319
  return statement;
320
320
  }
321
321
  function deductionFromJSON(json, context) {
322
- var deduction = json.deduction;
323
- var Deduction = _elements.default.Deduction, deductionJSON = deduction; ///
322
+ let { deduction } = json;
323
+ const { Deduction } = _elements.default, deductionJSON = deduction; ///
324
324
  json = deductionJSON; ///
325
325
  deduction = Deduction.fromJSON(json, context);
326
326
  return deduction;
327
327
  }
328
328
  function signatureFromJSON(json, context) {
329
- var _json_signature = json.signature, signature = _json_signature === void 0 ? null : _json_signature;
329
+ let { signature = null } = json;
330
330
  if (signature !== null) {
331
- var Signature = _elements.default.Signature, signatureJSON = signature; ///
331
+ const { Signature } = _elements.default, signatureJSON = signature; ///
332
332
  json = signatureJSON; ///
333
333
  signature = Signature.fromJSON(json, context);
334
334
  }
335
335
  return signature;
336
336
  }
337
337
  function referenceFromJSON(json, context) {
338
- var reference = json.reference;
339
- var Reference = _elements.default.Reference, referenceJSON = reference; ///
338
+ let { reference } = json;
339
+ const { Reference } = _elements.default, referenceJSON = reference; ///
340
340
  json = referenceJSON; ///
341
341
  reference = Reference.fromJSON(json, context);
342
342
  return reference;
343
343
  }
344
344
  function conclusionFromJSON(json, context) {
345
- var conclusion = json.conclusion;
346
- var Conclusion = _elements.default.Conclusion, conclusionJSON = conclusion; ///
345
+ let { conclusion } = json;
346
+ const { Conclusion } = _elements.default, conclusionJSON = conclusion; ///
347
347
  json = conclusionJSON; ///
348
348
  conclusion = Conclusion.fromJSON(json, context);
349
349
  return conclusion;
350
350
  }
351
351
  function metavariableFromJSON(json, context) {
352
- var metavariable = json.metavariable;
353
- var Metavariable = _elements.default.Metavariable, metavariableJSON = metavariable; ///
352
+ let { metavariable } = json;
353
+ const { Metavariable } = _elements.default, metavariableJSON = metavariable; ///
354
354
  json = metavariableJSON; ///
355
355
  metavariable = Metavariable.fromJSON(json, context);
356
356
  return metavariable;
357
357
  }
358
358
  function procedureCallFromJSON(json, context) {
359
- var _json_procedureCall = json.procedureCall, procedureCall = _json_procedureCall === void 0 ? null : _json_procedureCall;
359
+ let { procedureCall = null } = json;
360
360
  if (procedureCall !== null) {
361
- var ProcedureCall = _elements.default.ProcedureCall, procedureCallJSON = procedureCall; ///
361
+ const { ProcedureCall } = _elements.default, procedureCallJSON = procedureCall; ///
362
362
  json = procedureCallJSON; ///
363
363
  procedureCall = ProcedureCall.fromJSON(json, context);
364
364
  }
365
365
  return procedureCall;
366
366
  }
367
367
  function procedureReferenceFromJSON(json, context) {
368
- var procedureReference = json.procedureReference;
369
- var ProcedureReference = _elements.default.ProcedureReference, procedureReferenceJSON = procedureReference; ///
368
+ let { procedureReference } = json;
369
+ const { ProcedureReference } = _elements.default, procedureReferenceJSON = procedureReference; ///
370
370
  json = procedureReferenceJSON; ///
371
371
  procedureReference = ProcedureReference.fromJSON(json, context);
372
372
  return procedureReference;
373
373
  }
374
374
  function typesFromJSON(json, types, context) {
375
- var typesJSON = json.types;
376
- var Type = _elements.default.Type;
377
- typesJSON.forEach(function(typeJSON) {
378
- var _$json = typeJSON, type = Type.fromJSON(_$json, context);
375
+ const { types: typesJSON } = json;
376
+ const { Type } = _elements.default;
377
+ typesJSON.forEach((typeJSON)=>{
378
+ const json = typeJSON, type = Type.fromJSON(json, context);
379
379
  types.push(type);
380
380
  });
381
381
  }
382
382
  function termsFromJSON(json, context) {
383
- var terms = json.terms;
384
- var Term = _elements.default.Term, termsJSON = terms; ///
385
- terms = termsJSON.map(function(termJSON) {
386
- var _$json = termJSON, term = Term.fromJSON(_$json, context);
383
+ let { terms } = json;
384
+ const { Term } = _elements.default, termsJSON = terms; ///
385
+ terms = termsJSON.map((termJSON)=>{
386
+ const json = termJSON, term = Term.fromJSON(json, context);
387
387
  return term;
388
388
  });
389
389
  return terms;
390
390
  }
391
391
  function rulesFromJSON(json, context) {
392
- var rules = json.rules;
393
- var Rule = _elements.default.Rule, rulesJSON = rules; ///
394
- rules = rulesJSON.map(function(ruleJSON) {
395
- var _$json = ruleJSON, rule = Rule.fromJSON(_$json, context);
392
+ let { rules } = json;
393
+ const { Rule } = _elements.default, rulesJSON = rules; ///
394
+ rules = rulesJSON.map((ruleJSON)=>{
395
+ const json = ruleJSON, rule = Rule.fromJSON(json, context);
396
396
  return rule;
397
397
  });
398
398
  return rules;
399
399
  }
400
400
  function labelFromJSON(json, context) {
401
- var label = json.label;
402
- var Label = _elements.default.Label, labelJSON = label; ///
401
+ let { label } = json;
402
+ const { Label } = _elements.default, labelJSON = label; ///
403
403
  json = labelJSON; ///
404
404
  label = Label.fromJSON(json, context);
405
405
  return label;
406
406
  }
407
407
  function framesFromJSON(json, context) {
408
- var frames = json.frames;
409
- var Frame = _elements.default.Frame, framesJSON = frames; ///
410
- frames = framesJSON.map(function(frameJSON) {
411
- var _$json = frameJSON, frame = Frame.fromJSON(_$json, context);
408
+ let { frames } = json;
409
+ const { Frame } = _elements.default, framesJSON = frames; ///
410
+ frames = framesJSON.map((frameJSON)=>{
411
+ const json = frameJSON, frame = Frame.fromJSON(json, context);
412
412
  return frame;
413
413
  });
414
414
  return frames;
415
415
  }
416
416
  function labelsFromJSON(json, context) {
417
- var labels = json.labels;
418
- var Label = _elements.default.Label, labelsJSON = labels; ///
419
- labels = labelsJSON.map(function(labelJSON) {
420
- var _$json = labelJSON, label = Label.fromJSON(_$json, context);
417
+ let { labels } = json;
418
+ const { Label } = _elements.default, labelsJSON = labels; ///
419
+ labels = labelsJSON.map((labelJSON)=>{
420
+ const json = labelJSON, label = Label.fromJSON(json, context);
421
421
  return label;
422
422
  });
423
423
  return labels;
424
424
  }
425
425
  function axiomsFromJSON(json, context) {
426
- var axioms = json.axioms;
427
- var Axiom = _elements.default.Axiom, axiomsJSON = axioms; ///
428
- axioms = axiomsJSON.map(function(axiomJSON) {
429
- var _$json = axiomJSON, axiom = Axiom.fromJSON(_$json, context);
426
+ let { axioms } = json;
427
+ const { Axiom } = _elements.default, axiomsJSON = axioms; ///
428
+ axioms = axiomsJSON.map((axiomJSON)=>{
429
+ const json = axiomJSON, axiom = Axiom.fromJSON(json, context);
430
430
  return axiom;
431
431
  });
432
432
  return axioms;
433
433
  }
434
434
  function premisesFromJSON(json, context) {
435
- var premises = json.premises;
436
- var Premise = _elements.default.Premise, premisesJSON = premises; ///
437
- premises = premisesJSON.map(function(premiseJSON) {
438
- var _$json = premiseJSON, premise = Premise.fromJSON(_$json, context);
435
+ let { premises } = json;
436
+ const { Premise } = _elements.default, premisesJSON = premises; ///
437
+ premises = premisesJSON.map((premiseJSON)=>{
438
+ const json = premiseJSON, premise = Premise.fromJSON(json, context);
439
439
  return premise;
440
440
  });
441
441
  return premises;
442
442
  }
443
443
  function theoremsFromJSON(json, context) {
444
- var theorems = json.theorems;
445
- var Theorem = _elements.default.Theorem, theoremsJSON = theorems; ///
446
- theorems = theoremsJSON.map(function(theoremJSON) {
447
- var _$json = theoremJSON, theorem = Theorem.fromJSON(_$json, context);
444
+ let { theorems } = json;
445
+ const { Theorem } = _elements.default, theoremsJSON = theorems; ///
446
+ theorems = theoremsJSON.map((theoremJSON)=>{
447
+ const json = theoremJSON, theorem = Theorem.fromJSON(json, context);
448
448
  return theorem;
449
449
  });
450
450
  return theorems;
451
451
  }
452
452
  function variablesFromJSON(json, context) {
453
- var variables = json.variables;
454
- var Variable = _elements.default.Variable, variablesJSON = variables; ///
455
- variables = variablesJSON.map(function(variableJSON) {
456
- var _$json = variableJSON, variable = Variable.fromJSON(_$json, context);
453
+ let { variables } = json;
454
+ const { Variable } = _elements.default, variablesJSON = variables; ///
455
+ variables = variablesJSON.map((variableJSON)=>{
456
+ const json = variableJSON, variable = Variable.fromJSON(json, context);
457
457
  return variable;
458
458
  });
459
459
  return variables;
460
460
  }
461
461
  function equalitiesFromJSON(json, context) {
462
- var equalities = json.equalities;
463
- var Equality = _elements.default.Equality, equalitiesJSON = equalities; ///
464
- equalities = equalitiesJSON.map(function(equalityJSON) {
465
- var _$json = equalityJSON, equality = Equality.fromJSON(_$json, context);
462
+ let { equalities } = json;
463
+ const { Equality } = _elements.default, equalitiesJSON = equalities; ///
464
+ equalities = equalitiesJSON.map((equalityJSON)=>{
465
+ const json = equalityJSON, equality = Equality.fromJSON(json, context);
466
466
  return equality;
467
467
  });
468
468
  return equalities;
469
469
  }
470
470
  function propertiesFromJSON(json, context) {
471
- var properties = json.properties;
472
- var Property = _elements.default.Property, propertiesJSON = properties; ///
473
- properties = propertiesJSON.map(function(propertyJSON) {
474
- var _$json = propertyJSON, property = Property.fromJSON(_$json, context);
471
+ let { properties } = json;
472
+ const { Property } = _elements.default, propertiesJSON = properties; ///
473
+ properties = propertiesJSON.map((propertyJSON)=>{
474
+ const json = propertyJSON, property = Property.fromJSON(json, context);
475
475
  return property;
476
476
  });
477
477
  return properties;
478
478
  }
479
479
  function superTypesFromJSON(json, context) {
480
- var superTypesJSON = json.superTypes;
481
- var superTypes = superTypesJSON.map(function(superTypeJSON) {
482
- var _$json = superTypeJSON, name = _$json.name, prefixName = _$json.prefixName, nominalSuperTypeName = prefixName !== null ? "".concat(prefixName).concat(name) : name, superType = context.findTypeByNominalTypeName(nominalSuperTypeName);
480
+ const { superTypes: superTypesJSON } = json;
481
+ const superTypes = superTypesJSON.map((superTypeJSON)=>{
482
+ const json = superTypeJSON, { name, prefixName } = json, nominalSuperTypeName = prefixName !== null ? `${prefixName}${name}` : name, superType = context.findTypeByNominalTypeName(nominalSuperTypeName);
483
483
  return superType;
484
484
  });
485
485
  return superTypes;
486
486
  }
487
487
  function hypothesesFromJSON(json, context) {
488
- var hypotheses = json.hypotheses;
489
- var Hypothesis = _elements.default.Hypothesis, hypothesesJSON = hypotheses; ///
490
- hypotheses = hypothesesJSON.map(function(hypothesisJSON) {
491
- var _$json = hypothesisJSON, hypothesis = Hypothesis.fromJSON(_$json, context);
488
+ let { hypotheses } = json;
489
+ const { Hypothesis } = _elements.default, hypothesesJSON = hypotheses; ///
490
+ hypotheses = hypothesesJSON.map((hypothesisJSON)=>{
491
+ const json = hypothesisJSON, hypothesis = Hypothesis.fromJSON(json, context);
492
492
  return hypothesis;
493
493
  });
494
494
  return hypotheses;
495
495
  }
496
496
  function parametersFromJSON(json, context) {
497
- var parameters = json.parameters;
498
- var Parameter = _elements.default.Parameter, parametersJSON = parameters; ///
499
- parameters = parametersJSON.map(function(parameterJSON) {
500
- var _$json = parameterJSON, parameter = Parameter.fromJSON(_$json, context);
497
+ let { parameters } = json;
498
+ const { Parameter } = _elements.default, parametersJSON = parameters; ///
499
+ parameters = parametersJSON.map((parameterJSON)=>{
500
+ const json = parameterJSON, parameter = Parameter.fromJSON(json, context);
501
501
  return parameter;
502
502
  });
503
503
  return parameters;
504
504
  }
505
505
  function judgementsFromJSON(json, context) {
506
- var judgements = json.judgements;
507
- var Judgement = _elements.default.Judgement, judgementsJSON = judgements; ///
508
- judgements = judgementsJSON.map(function(judgementJSON) {
509
- var _$json = judgementJSON, judgement = Judgement.fromJSON(_$json, context);
506
+ let { judgements } = json;
507
+ const { Judgement } = _elements.default, judgementsJSON = judgements; ///
508
+ judgements = judgementsJSON.map((judgementJSON)=>{
509
+ const json = judgementJSON, judgement = Judgement.fromJSON(json, context);
510
510
  return judgement;
511
511
  });
512
512
  return judgements;
513
513
  }
514
514
  function statementsFromJSON(json, context) {
515
- var statements = json.statements;
516
- var Statement = _elements.default.Statement, statementsJSON = statements; ///
517
- statements = statementsJSON.map(function(statementJSON) {
518
- var _$json = statementJSON, statement = Statement.fromJSON(_$json, context);
515
+ let { statements } = json;
516
+ const { Statement } = _elements.default, statementsJSON = statements; ///
517
+ statements = statementsJSON.map((statementJSON)=>{
518
+ const json = statementJSON, statement = Statement.fromJSON(json, context);
519
519
  return statement;
520
520
  });
521
521
  return statements;
522
522
  }
523
523
  function assertionsFromJSON(json, context) {
524
- var assertions = json.assertions;
525
- var TypeAssertion = _elements.default.TypeAssertion, DefinedAssertion = _elements.default.DefinedAssertion, PropertyAssertion = _elements.default.PropertyAssertion, SubproofAssertion = _elements.default.SubproofAssertion, SatisfiesAssertion = _elements.default.SatisfiesAssertion, ContainedAssertion = _elements.default.ContainedAssertion, assertionsJSON = assertions; ///
526
- assertions = assertionsJSON.map(function(assertionJSON) {
527
- var _$json = assertionJSON, assertion = TypeAssertion.fromJSON(_$json, context) || DefinedAssertion.fromJSON(_$json, context) || PropertyAssertion.fromJSON(_$json, context) || SubproofAssertion.fromJSON(_$json, context) || SatisfiesAssertion.fromJSON(_$json, context) || ContainedAssertion.fromJSON(_$json, context);
524
+ let { assertions } = json;
525
+ const { TypeAssertion, DefinedAssertion, PropertyAssertion, SubproofAssertion, SatisfiesAssertion, ContainedAssertion } = _elements.default, assertionsJSON = assertions; ///
526
+ assertions = assertionsJSON.map((assertionJSON)=>{
527
+ const json = assertionJSON, assertion = TypeAssertion.fromJSON(json, context) || DefinedAssertion.fromJSON(json, context) || PropertyAssertion.fromJSON(json, context) || SubproofAssertion.fromJSON(json, context) || SatisfiesAssertion.fromJSON(json, context) || ContainedAssertion.fromJSON(json, context);
528
528
  return assertion;
529
529
  });
530
530
  return assertions;
531
531
  }
532
532
  function referencesFromJSON(json, context) {
533
- var references = json.references;
534
- var Reference = _elements.default.Reference, referencesJSON = references; ///
535
- references = referencesJSON.map(function(referenceJSON) {
536
- var _$json = referenceJSON, reference = Reference.fromJSON(_$json, context);
533
+ let { references } = json;
534
+ const { Reference } = _elements.default, referencesJSON = references; ///
535
+ references = referencesJSON.map((referenceJSON)=>{
536
+ const json = referenceJSON, reference = Reference.fromJSON(json, context);
537
537
  return reference;
538
538
  });
539
539
  return references;
540
540
  }
541
541
  function conjecturesFromJSON(json, context) {
542
- var conjectures = json.conjectures;
543
- var Conjecture = _elements.default.Conjecture, conjecturesJSON = conjectures; ///
544
- conjectures = conjecturesJSON.map(function(conjectureJSON) {
545
- var _$json = conjectureJSON, conjecture = Conjecture.fromJSON(_$json, context);
542
+ let { conjectures } = json;
543
+ const { Conjecture } = _elements.default, conjecturesJSON = conjectures; ///
544
+ conjectures = conjecturesJSON.map((conjectureJSON)=>{
545
+ const json = conjectureJSON, conjecture = Conjecture.fromJSON(json, context);
546
546
  return conjecture;
547
547
  });
548
548
  return conjectures;
549
549
  }
550
550
  function combinatorsFromJSON(json, context) {
551
- var combinators = json.combinators;
552
- var Combinator = _elements.default.Combinator, combinatorsJSON = combinators; ///
553
- combinators = combinatorsJSON.map(function(combinatorJSON) {
554
- var _$json = combinatorJSON, combinator = Combinator.fromJSON(_$json, context);
551
+ let { combinators } = json;
552
+ const { Combinator } = _elements.default, combinatorsJSON = combinators; ///
553
+ combinators = combinatorsJSON.map((combinatorJSON)=>{
554
+ const json = combinatorJSON, combinator = Combinator.fromJSON(json, context);
555
555
  return combinator;
556
556
  });
557
557
  return combinators;
558
558
  }
559
559
  function assumptionsFromJSON(json, context) {
560
- var assumptions = json.assumptions;
561
- var Assumption = _elements.default.Assumption, assumptionsJSON = assumptions; ///
562
- assumptions = assumptionsJSON.map(function(assumptionJSON) {
563
- var _$json = assumptionJSON, assumption = Assumption.fromJSON(_$json, context);
560
+ let { assumptions } = json;
561
+ const { Assumption } = _elements.default, assumptionsJSON = assumptions; ///
562
+ assumptions = assumptionsJSON.map((assumptionJSON)=>{
563
+ const json = assumptionJSON, assumption = Assumption.fromJSON(json, context);
564
564
  return assumption;
565
565
  });
566
566
  return assumptions;
567
567
  }
568
568
  function typePrefixesFromJSON(json, context) {
569
- var typePrefixes = json.typePrefixes;
570
- var TypePrefix = _elements.default.TypePrefix, typePrefixesJSON = typePrefixes; ///
571
- typePrefixes = typePrefixesJSON.map(function(typePrefixJSON) {
572
- var _$json = typePrefixJSON, typePrefix = TypePrefix.fromJSON(_$json, context);
569
+ let { typePrefixes } = json;
570
+ const { TypePrefix } = _elements.default, typePrefixesJSON = typePrefixes; ///
571
+ typePrefixes = typePrefixesJSON.map((typePrefixJSON)=>{
572
+ const json = typePrefixJSON, typePrefix = TypePrefix.fromJSON(json, context);
573
573
  return typePrefix;
574
574
  });
575
575
  return typePrefixes;
576
576
  }
577
577
  function constructorsFromJSON(json, context) {
578
- var constructors = json.constructors;
579
- var Constructor = _elements.default.Constructor, constructorsJSON = constructors; ///
580
- constructors = constructorsJSON.map(function(constructorJSON) {
581
- var _$json = constructorJSON, constructor = Constructor.fromJSON(_$json, context);
578
+ let { constructors } = json;
579
+ const { Constructor } = _elements.default, constructorsJSON = constructors; ///
580
+ constructors = constructorsJSON.map((constructorJSON)=>{
581
+ const json = constructorJSON, constructor = Constructor.fromJSON(json, context);
582
582
  return constructor;
583
583
  });
584
584
  return constructors;
585
585
  }
586
586
  function metatheoremsFromJSON(json, context) {
587
- var metatheorems = json.metatheorems;
588
- var Metatheorem = _elements.default.Metatheorem, metatheoremsJSON = metatheorems; ///
589
- metatheorems = metatheoremsJSON.map(function(metatheoremJSON) {
590
- var _$json = metatheoremJSON, metatheorem = Metatheorem.fromJSON(_$json, context);
587
+ let { metatheorems } = json;
588
+ const { Metatheorem } = _elements.default, metatheoremsJSON = metatheorems; ///
589
+ metatheorems = metatheoremsJSON.map((metatheoremJSON)=>{
590
+ const json = metatheoremJSON, metatheorem = Metatheorem.fromJSON(json, context);
591
591
  return metatheorem;
592
592
  });
593
593
  return metatheorems;
594
594
  }
595
595
  function suppositionsFromJSON(json, context) {
596
- var suppositions = json.suppositions;
597
- var Supposition = _elements.default.Supposition, suppositionsJSON = suppositions; ///
598
- suppositions = suppositionsJSON.map(function(suppositionJSON) {
599
- var _$json = suppositionJSON, supposition = Supposition.fromJSON(_$json, context);
596
+ let { suppositions } = json;
597
+ const { Supposition } = _elements.default, suppositionsJSON = suppositions; ///
598
+ suppositions = suppositionsJSON.map((suppositionJSON)=>{
599
+ const json = suppositionJSON, supposition = Supposition.fromJSON(json, context);
600
600
  return supposition;
601
601
  });
602
602
  return suppositions;
603
603
  }
604
604
  function substitutionsFromJSON(json, context) {
605
- var _json_substitutions = json.substitutions, substitutions = _json_substitutions === void 0 ? [] : _json_substitutions; ///
606
- var StatementSubstitution = _elements.default.StatementSubstitution, substitutionsJSON = substitutions, Substitution = StatementSubstitution; ///
607
- substitutions = substitutionsJSON.map(function(substitutionJSON) {
608
- var _$json = substitutionJSON, substitution = Substitution.fromJSON(_$json, context);
605
+ let { substitutions = [] } = json; ///
606
+ const { StatementSubstitution } = _elements.default, substitutionsJSON = substitutions, Substitution = StatementSubstitution; ///
607
+ substitutions = substitutionsJSON.map((substitutionJSON)=>{
608
+ const json = substitutionJSON, substitution = Substitution.fromJSON(json, context);
609
609
  return substitution;
610
610
  });
611
611
  return substitutions;
612
612
  }
613
613
  function metavariablesFromJSON(json, context) {
614
- var metavariables = json.metavariables;
615
- var Metavariable = _elements.default.Metavariable, metavariablesJSON = metavariables; ///
616
- metavariables = metavariablesJSON.map(function(metavariableJSON) {
617
- var _$json = metavariableJSON, metavariable = Metavariable.fromJSON(_$json, context);
614
+ let { metavariables } = json;
615
+ const { Metavariable } = _elements.default, metavariablesJSON = metavariables; ///
616
+ metavariables = metavariablesJSON.map((metavariableJSON)=>{
617
+ const json = metavariableJSON, metavariable = Metavariable.fromJSON(json, context);
618
618
  return metavariable;
619
619
  });
620
620
  return metavariables;
621
621
  }
622
622
  function ephemeralContextFromJSON(json, context) {
623
- var releaseContext = context;
624
- context = json.context;
623
+ const releaseContext = context;
624
+ ({ context } = json);
625
625
  json = context; ///
626
626
  context = releaseContext; ///
627
- var emphemeralContext = _ephemeral.default.fromJSON(json, context);
627
+ const emphemeralContext = _ephemeral.default.fromJSON(json, context);
628
628
  return emphemeralContext;
629
629
  }
630
630
  function nameToNameJSON(name) {
631
- var nameJSON = name; ///
631
+ const nameJSON = name; ///
632
632
  return nameJSON;
633
633
  }
634
634
  function termToTermJSON(term) {
635
- var termJSON = term.toJSON();
635
+ const termJSON = term.toJSON();
636
636
  return termJSON;
637
637
  }
638
638
  function typeToTypeJSON(type) {
639
- var typeJSON = type !== null ? type.toJSON() : null;
639
+ const typeJSON = type !== null ? type.toJSON() : null;
640
640
  return typeJSON;
641
641
  }
642
642
  function labelToLabelJSON(label) {
643
- var labelJSON = label.toJSON();
643
+ const labelJSON = label.toJSON();
644
644
  return labelJSON;
645
645
  }
646
646
  function metaTypeToMetaTypeJSON(metaType) {
647
- var metaTypeJSON = metaType !== null ? metaType.toJSON() : null;
647
+ const metaTypeJSON = metaType !== null ? metaType.toJSON() : null;
648
648
  return metaTypeJSON;
649
649
  }
650
650
  function referenceToReferenceJSON(reference) {
651
- var referenceJSON = reference.toJSON();
651
+ const referenceJSON = reference.toJSON();
652
652
  return referenceJSON;
653
653
  }
654
654
  function statementToStatementJSON(statement) {
655
- var statementJSON = statement !== null ? statement.toJSON() : null;
655
+ const statementJSON = statement !== null ? statement.toJSON() : null;
656
656
  return statementJSON;
657
657
  }
658
658
  function deductionToDeductionJSON(deduction) {
659
- var deductionJSON = deduction.toJSON();
659
+ const deductionJSON = deduction.toJSON();
660
660
  return deductionJSON;
661
661
  }
662
662
  function signatureToSignatureJSON(signature) {
663
- var signatureJSON = signature !== null ? signature.toJSON() : null;
663
+ const signatureJSON = signature !== null ? signature.toJSON() : null;
664
664
  return signatureJSON;
665
665
  }
666
666
  function conclusionToConclusionJSON(conclusion) {
667
- var conclusionJSON = conclusion.toJSON();
667
+ const conclusionJSON = conclusion.toJSON();
668
668
  return conclusionJSON;
669
669
  }
670
670
  function metavariableToMetavariableJSON(metavariable) {
671
- var metavariableJSON = metavariable.toJSON();
671
+ const metavariableJSON = metavariable.toJSON();
672
672
  return metavariableJSON;
673
673
  }
674
674
  function procedureCallToProcedureCallJSON(procedureCall) {
675
- var procedureCallJSON = procedureCall !== null ? procedureCall.toJSON() : null;
675
+ const procedureCallJSON = procedureCall !== null ? procedureCall.toJSON() : null;
676
676
  return procedureCallJSON;
677
677
  }
678
678
  function procedureReferenceToProcedureReferenceJSON(procedureReference) {
679
- var procedureReferenceJSON = procedureReference.toJSON();
679
+ const procedureReferenceJSON = procedureReference.toJSON();
680
680
  return procedureReferenceJSON;
681
681
  }
682
682
  function termsToTermsJSON(terms) {
683
- var termsJSON = terms.map(function(term) {
684
- var termJSON = term.toJSON();
683
+ const termsJSON = terms.map((term)=>{
684
+ const termJSON = term.toJSON();
685
685
  return termJSON;
686
686
  });
687
687
  return termsJSON;
688
688
  }
689
689
  function typesToTypesJSON(types) {
690
- var typesJSON = types.map(function(type) {
691
- var typeJSON = type.toJSON();
690
+ const typesJSON = types.map((type)=>{
691
+ const typeJSON = type.toJSON();
692
692
  type = typeJSON; ///
693
693
  return type;
694
694
  });
695
695
  return typesJSON;
696
696
  }
697
697
  function rulesToRulesJSON(rules) {
698
- var rulesJSON = rules.map(function(rule) {
699
- var ruleJSON = rule.toJSON();
698
+ const rulesJSON = rules.map((rule)=>{
699
+ const ruleJSON = rule.toJSON();
700
700
  rule = ruleJSON; ///
701
701
  return rule;
702
702
  });
703
703
  return rulesJSON;
704
704
  }
705
705
  function labelsToLabelsJSON(labels) {
706
- var labelsJSON = labels.map(function(label) {
707
- var labelJSON = label.toJSON();
706
+ const labelsJSON = labels.map((label)=>{
707
+ const labelJSON = label.toJSON();
708
708
  return labelJSON;
709
709
  });
710
710
  return labelsJSON;
711
711
  }
712
712
  function framesToFramesJSON(frames) {
713
- var framesJSON = frames.map(function(frame) {
714
- var frameJSON = frame.toJSON();
713
+ const framesJSON = frames.map((frame)=>{
714
+ const frameJSON = frame.toJSON();
715
715
  return frameJSON;
716
716
  });
717
717
  return framesJSON;
718
718
  }
719
719
  function axiomsToAxiomsJSON(axioms) {
720
- var axiomsJSON = axioms.map(function(axiom) {
721
- var axiomJSON = axiom.toJSON();
720
+ const axiomsJSON = axioms.map((axiom)=>{
721
+ const axiomJSON = axiom.toJSON();
722
722
  axiom = axiomJSON; ///
723
723
  return axiom;
724
724
  });
725
725
  return axiomsJSON;
726
726
  }
727
727
  function premisesToPremisesJSON(premises) {
728
- var premisesJSON = premises.map(function(premise) {
729
- var premiseJSON = premise.toJSON();
728
+ const premisesJSON = premises.map((premise)=>{
729
+ const premiseJSON = premise.toJSON();
730
730
  return premiseJSON;
731
731
  });
732
732
  return premisesJSON;
733
733
  }
734
734
  function theoremsToTheoremsJSON(theorems) {
735
- var theoremsJSON = theorems.map(function(theorem) {
736
- var theoremJSON = theorem.toJSON();
735
+ const theoremsJSON = theorems.map((theorem)=>{
736
+ const theoremJSON = theorem.toJSON();
737
737
  theorem = theoremJSON; ///
738
738
  return theorem;
739
739
  });
740
740
  return theoremsJSON;
741
741
  }
742
742
  function variablesToVariablesJSON(variables) {
743
- var variablesJSON = variables.map(function(variable) {
744
- var variableJSON = variable.toJSON();
743
+ const variablesJSON = variables.map((variable)=>{
744
+ const variableJSON = variable.toJSON();
745
745
  variable = variableJSON; ///
746
746
  return variable;
747
747
  });
748
748
  return variablesJSON;
749
749
  }
750
750
  function hypothesesToHypothesesJSON(hypotheses) {
751
- var hypothesesJSON = hypotheses.map(function(hypothesis) {
752
- var hypothesisJSON = hypothesis.toJSON();
751
+ const hypothesesJSON = hypotheses.map((hypothesis)=>{
752
+ const hypothesisJSON = hypothesis.toJSON();
753
753
  hypothesis = hypothesisJSON; ///
754
754
  return hypothesis;
755
755
  });
756
756
  return hypothesesJSON;
757
757
  }
758
758
  function superTypesToSuperTypesJSON(superTypes) {
759
- var superTypesJSON = superTypes.map(function(superType) {
760
- var superTypeJSON = superType.toJSON();
759
+ const superTypesJSON = superTypes.map((superType)=>{
760
+ const superTypeJSON = superType.toJSON();
761
761
  superType = superTypeJSON; ///
762
762
  return superType;
763
763
  });
764
764
  return superTypesJSON;
765
765
  }
766
766
  function parametersToParametersJSON(parameters) {
767
- var parametersJSON = parameters.map(function(parameter) {
768
- var parameterJSON = parameter.toJSON();
767
+ const parametersJSON = parameters.map((parameter)=>{
768
+ const parameterJSON = parameter.toJSON();
769
769
  parameter = parameterJSON; ///
770
770
  return parameter;
771
771
  });
772
772
  return parametersJSON;
773
773
  }
774
774
  function propertiesToPropertiesJSON(properties) {
775
- var propertiesJSON = properties.map(function(property) {
776
- var propertyJSON = property.toJSON();
775
+ const propertiesJSON = properties.map((property)=>{
776
+ const propertyJSON = property.toJSON();
777
777
  property = propertyJSON; ///
778
778
  return property;
779
779
  });
780
780
  return propertiesJSON;
781
781
  }
782
782
  function judgementsToJudgementsJSON(judgements) {
783
- var judgementsJSON = judgements.map(function(judgement) {
784
- var judgementJSON = judgement.toJSON();
783
+ const judgementsJSON = judgements.map((judgement)=>{
784
+ const judgementJSON = judgement.toJSON();
785
785
  return judgementJSON;
786
786
  });
787
787
  return judgementsJSON;
788
788
  }
789
789
  function equalitiesToEqualitiesJSON(equalities) {
790
- var equalitiesJSON = equalities.map(function(equality) {
791
- var equalityJSON = equality.toJSON();
790
+ const equalitiesJSON = equalities.map((equality)=>{
791
+ const equalityJSON = equality.toJSON();
792
792
  return equalityJSON;
793
793
  });
794
794
  return equalitiesJSON;
795
795
  }
796
796
  function statementsToStatementsJSON(statements) {
797
- var statementsJSON = statements.map(function(statement) {
798
- var statementJSON = statement.toJSON();
797
+ const statementsJSON = statements.map((statement)=>{
798
+ const statementJSON = statement.toJSON();
799
799
  return statementJSON;
800
800
  });
801
801
  return statementsJSON;
802
802
  }
803
803
  function assertionsToAssertionsJSON(assertions) {
804
- var assertionsJSON = assertions.map(function(assertion) {
805
- var assertionJSON = assertion.toJSON();
804
+ const assertionsJSON = assertions.map((assertion)=>{
805
+ const assertionJSON = assertion.toJSON();
806
806
  return assertionJSON;
807
807
  });
808
808
  return assertionsJSON;
809
809
  }
810
810
  function referencesToReferencesJSON(references) {
811
- var referencesJSON = references.map(function(reference) {
812
- var referenceJSON = reference.toJSON();
811
+ const referencesJSON = references.map((reference)=>{
812
+ const referenceJSON = reference.toJSON();
813
813
  return referenceJSON;
814
814
  });
815
815
  return referencesJSON;
816
816
  }
817
817
  function conjecturesToConjecturesJSON(conjectures) {
818
- var conjecturesJSON = conjectures.map(function(conjecture) {
819
- var conjectureJSON = conjecture.toJSON();
818
+ const conjecturesJSON = conjectures.map((conjecture)=>{
819
+ const conjectureJSON = conjecture.toJSON();
820
820
  conjecture = conjectureJSON; ///
821
821
  return conjecture;
822
822
  });
823
823
  return conjecturesJSON;
824
824
  }
825
825
  function combinatorsToCombinatorsJSON(combinators) {
826
- var combinatorsJSON = combinators.map(function(combinator) {
827
- var combinatorJSON = combinator.toJSON();
826
+ const combinatorsJSON = combinators.map((combinator)=>{
827
+ const combinatorJSON = combinator.toJSON();
828
828
  combinator = combinatorJSON; ///
829
829
  return combinator;
830
830
  });
831
831
  return combinatorsJSON;
832
832
  }
833
833
  function assumptionsToAssumptionsJSON(assumptions) {
834
- var assumptionsJSON = assumptions.map(function(assumption) {
835
- var assumptionJSON = assumption.toJSON();
834
+ const assumptionsJSON = assumptions.map((assumption)=>{
835
+ const assumptionJSON = assumption.toJSON();
836
836
  return assumptionJSON;
837
837
  });
838
838
  return assumptionsJSON;
839
839
  }
840
840
  function suppositionsToSuppositionsJSON(suppositions) {
841
- var suppositionsJSON = suppositions.map(function(supposition) {
842
- var suppositionJSON = supposition.toJSON();
841
+ const suppositionsJSON = suppositions.map((supposition)=>{
842
+ const suppositionJSON = supposition.toJSON();
843
843
  return suppositionJSON;
844
844
  });
845
845
  return suppositionsJSON;
846
846
  }
847
847
  function constructorsToConstructorsJSON(constructors) {
848
- var constructorsJSON = constructors.map(function(constructor) {
849
- var constructorJSON = constructor.toJSON();
848
+ const constructorsJSON = constructors.map((constructor)=>{
849
+ const constructorJSON = constructor.toJSON();
850
850
  constructor = constructorJSON; ///
851
851
  return constructor;
852
852
  });
853
853
  return constructorsJSON;
854
854
  }
855
855
  function metatheoremsToMetatheoremsJSON(metatheorems) {
856
- var metatheoremsJSON = metatheorems.map(function(metatheorem) {
857
- var metatheoremJSON = metatheorem.toJSON();
856
+ const metatheoremsJSON = metatheorems.map((metatheorem)=>{
857
+ const metatheoremJSON = metatheorem.toJSON();
858
858
  metatheorem = metatheoremJSON; ///
859
859
  return metatheorem;
860
860
  });
861
861
  return metatheoremsJSON;
862
862
  }
863
863
  function typePrefixesToTypePrefixesJSON(typePrefixes) {
864
- var typePrefixesJSON = typePrefixes.map(function(typePrefix) {
865
- var typePrefixJSON = typePrefix.toJSON();
864
+ const typePrefixesJSON = typePrefixes.map((typePrefix)=>{
865
+ const typePrefixJSON = typePrefix.toJSON();
866
866
  typePrefix = typePrefixJSON; ///
867
867
  return typePrefix;
868
868
  });
869
869
  return typePrefixesJSON;
870
870
  }
871
871
  function substitutionsToSubstitutionsJSON(substitutions) {
872
- var substitutionsJSON = substitutions.mapSubstitution(function(substitution) {
873
- var substitutionJSON = substitution.toJSON();
872
+ const substitutionsJSON = substitutions.mapSubstitution((substitution)=>{
873
+ const substitutionJSON = substitution.toJSON();
874
874
  return substitutionJSON;
875
875
  });
876
876
  return substitutionsJSON;
877
877
  }
878
878
  function metavariablesToMetavariablesJSON(metavariables) {
879
- var metavariablesJSON = metavariables.map(function(metavariable) {
880
- var metavariableJSON = metavariable.toJSON();
879
+ const metavariablesJSON = metavariables.map((metavariable)=>{
880
+ const metavariableJSON = metavariable.toJSON();
881
881
  metavariable = metavariableJSON; ///
882
882
  return metavariable;
883
883
  });
884
884
  return metavariablesJSON;
885
885
  }
886
886
  function substitutionsToCSubstitutionsJSON(substitutiions) {
887
- var substitutionsJSON = substitutiions.map(function(substitution) {
888
- var substitutionJSON = substitution.toJSON();
887
+ const substitutionsJSON = substitutiions.map((substitution)=>{
888
+ const substitutionJSON = substitution.toJSON();
889
889
  return substitutionJSON;
890
890
  });
891
891
  return substitutionsJSON;
892
892
  }
893
893
 
894
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IEVwaGVtZXJhbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvZXBoZW1lcmFsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYXNGcm9tTm90aGluZygpIHtcbiAgY29uc3QgbGVtbWFzID0gW107XG5cbiAgcmV0dXJuIGxlbW1hcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYXNGcm9tTm90aGluZygpIHtcbiAgY29uc3QgbWV0YUxlbW1hcyA9IFtdO1xuXG4gIHJldHVybiBtZXRhTGVtbWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbmFtZSB9ID0ganNvbjtcblxuICBjb25zdCBuYW1lSlNPTiA9IG5hbWU7ICAvLy9cblxuICBuYW1lID0gbmFtZUpTT047ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm0gfSA9IGpzb247XG5cbiAgY29uc3QgdGVybUpTT04gPSB0ZXJtOyAgLy8vXG5cbiAganNvbiA9IHRlcm1KU09OOyAgLy8vXG5cbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cztcblxuICB0ZXJtID0gVGVybS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHR5cGUgfSA9IGpzb247XG5cbiAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gdHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBuYW1lLCBwcmVmaXhOYW1lIH0gPSBqc29uLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IChwcmVmaXhOYW1lICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlZml4TmFtZX0ke25hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsgLy8vXG5cbiAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhVHlwZSB9ID0ganNvbjtcblxuICBpZiAobWV0YVR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gbWV0YVR5cGU7ICAvLy9cblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbixcbiAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBuYW1lOyAgLy8vXG5cbiAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3RhdGVtZW50ID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGpzb24gPSBzdGF0ZW1lbnRKU09OOyAvLy9cblxuICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGRlZHVjdGlvbiB9ID0ganNvbjtcblxuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb247ICAvLy9cblxuICBqc29uID0gZGVkdWN0aW9uSlNPTjsgIC8vL1xuXG4gIGRlZHVjdGlvbiA9IERlZHVjdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzaWduYXR1cmUgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzaWduYXR1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZTsgIC8vL1xuXG4gICAganNvbiA9IHNpZ25hdHVyZUpTT047IC8vL1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcmVmZXJlbmNlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlSlNPTiA9IHJlZmVyZW5jZTsgIC8vL1xuXG4gIGpzb24gPSByZWZlcmVuY2VKU09OOyAvLy9cblxuICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmNsdXNpb24gfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uOyAgLy8vXG5cbiAganNvbiA9IGNvbmNsdXNpb25KU09OOyAgLy8vXG5cbiAgY29uY2x1c2lvbiA9IENvbmNsdXNpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF2YXJpYWJsZSB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICBqc29uID0gbWV0YXZhcmlhYmxlSlNPTjsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9jZWR1cmVDYWxsID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbEpTT04gPSBwcm9jZWR1cmVDYWxsOyAgLy8vXG5cbiAgICBqc29uID0gcHJvY2VkdXJlQ2FsbEpTT047IC8vL1xuXG4gICAgcHJvY2VkdXJlQ2FsbCA9IFByb2NlZHVyZUNhbGwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZTsgIC8vL1xuXG4gIGpzb24gPSBwcm9jZWR1cmVSZWZlcmVuY2VKU09OOyAgLy8vXG5cbiAgcHJvY2VkdXJlUmVmZXJlbmNlID0gUHJvY2VkdXJlUmVmZXJlbmNlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21KU09OKGpzb24sIHR5cGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdHlwZXM6IHR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gIHR5cGVzSlNPTi5mb3JFYWNoKCh0eXBlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGUgPSBUeXBlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdHlwZXMucHVzaCh0eXBlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdGVybXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGVybXNKU09OID0gdGVybXM7IC8vL1xuXG4gIHRlcm1zID0gdGVybXNKU09OLm1hcCgodGVybUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdGVybUpTT04sICAvLy9cbiAgICAgICAgICB0ZXJtID0gVGVybS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcnVsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcnVsZXNKU09OID0gcnVsZXM7IC8vL1xuXG4gIHJ1bGVzID0gcnVsZXNKU09OLm1hcCgocnVsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcnVsZUpTT04sICAvLy9cbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWwgfSA9IGpzb247XG5cbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsSlNPTiA9IGxhYmVsOyAgLy8vXG5cbiAganNvbiA9IGxhYmVsSlNPTjsgLy8vXG5cbiAgbGFiZWwgPSBMYWJlbC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGZyYW1lcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZnJhbWVzSlNPTiA9IGZyYW1lczsgLy8vXG5cbiAgZnJhbWVzID0gZnJhbWVzSlNPTi5tYXAoKGZyYW1lSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBmcmFtZUpTT04sICAvLy9cbiAgICAgICAgICBmcmFtZSA9IEZyYW1lLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9KTtcblxuICByZXR1cm4gZnJhbWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBsYWJlbHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsc0pTT04gPSBsYWJlbHM7ICAvLy9cblxuICBsYWJlbHMgPSBsYWJlbHNKU09OLm1hcCgobGFiZWxKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGxhYmVsSlNPTiwgLy8vXG4gICAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgYXhpb21zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbXNKU09OID0gYXhpb21zOyAvLy9cblxuICBheGlvbXMgPSBheGlvbXNKU09OLm1hcCgoYXhpb21KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGF4aW9tSlNPTiwgIC8vL1xuICAgICAgICAgIGF4aW9tID0gQXhpb20uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH0pO1xuXG4gIHJldHVybiBheGlvbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJlbWlzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJlbWlzZXNKU09OID0gcHJlbWlzZXM7ICAvLy9cblxuICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTi5tYXAoKHByZW1pc2VKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByZW1pc2VKU09OLCAvLy9cbiAgICAgICAgICBwcmVtaXNlID0gUHJlbWlzZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdGhlb3JlbXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGhlb3JlbXNKU09OID0gdGhlb3JlbXM7IC8vL1xuXG4gIHRoZW9yZW1zID0gdGhlb3JlbXNKU09OLm1hcCgodGhlb3JlbUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdGhlb3JlbUpTT04sICAvLy9cbiAgICAgICAgICB0aGVvcmVtID0gVGhlb3JlbS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gdGhlb3JlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlczsgLy8vXG5cbiAgdmFyaWFibGVzID0gdmFyaWFibGVzSlNPTi5tYXAoKHZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZXF1YWxpdGllcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgZXF1YWxpdGllc0pTT04gPSBlcXVhbGl0aWVzOyAvLy9cblxuICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT04ubWFwKChlcXVhbGl0eUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZXF1YWxpdHlKU09OLCAgLy8vXG4gICAgICAgICAgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9wZXJ0aWVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9wZXJ0aWVzSlNPTiA9IHByb3BlcnRpZXM7IC8vL1xuXG4gIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzSlNPTi5tYXAoKHByb3BlcnR5SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwcm9wZXJ0eUpTT04sICAvLy9cbiAgICAgICAgICBwcm9wZXJ0eSA9IFByb3BlcnR5LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgc3VwZXJUeXBlczogc3VwZXJUeXBlc0pTT04gfSA9IGpzb247XG5cbiAgY29uc3Qgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNKU09OLm1hcCgoc3VwZXJUeXBlSlNPTikgPT4ge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBzdXBlclR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgICAgICAgeyBuYW1lLCBwcmVmaXhOYW1lIH0gPSBqc29uLFxuICAgICAgICAgICAgICAgIG5vbWluYWxTdXBlclR5cGVOYW1lID0gKHByZWZpeE5hbWUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlZml4TmFtZX0ke25hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIC8vL1xuICAgICAgICAgICAgICAgIHN1cGVyVHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsU3VwZXJUeXBlTmFtZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGh5cG90aGVzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzOyAgLy8vXG5cbiAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLm1hcCgoaHlwb3RoZXNpc0pTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gaHlwb3RoZXNpc0pTT04sIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXMgPSBIeXBvdGhlc2lzLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcGFyYW1ldGVycyB9ID0ganNvbjtcblxuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnNKU09OID0gcGFyYW1ldGVyczsgLy8vXG5cbiAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNKU09OLm1hcCgocGFyYW1ldGVySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwYXJhbWV0ZXJKU09OLCAgLy8vXG4gICAgICAgICAgcGFyYW1ldGVyID0gUGFyYW1ldGVyLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBqdWRnZW1lbnRzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAganVkZ2VtZW50c0pTT04gPSBqdWRnZW1lbnRzOyAvLy9cblxuICBqdWRnZW1lbnRzID0ganVkZ2VtZW50c0pTT04ubWFwKChqdWRnZW1lbnRKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGp1ZGdlbWVudEpTT04sICAvLy9cbiAgICAgICAgICBqdWRnZW1lbnQgPSBKdWRnZW1lbnQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9KTtcblxuICByZXR1cm4ganVkZ2VtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN0YXRlbWVudHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHM7IC8vL1xuXG4gIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzSlNPTi5tYXAoKHN0YXRlbWVudEpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3RhdGVtZW50SlNPTiwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgYXNzZXJ0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGVBc3NlcnRpb24sIERlZmluZWRBc3NlcnRpb24sIFByb3BlcnR5QXNzZXJ0aW9uLCBTdWJwcm9vZkFzc2VydGlvbiwgU2F0aXNmaWVzQXNzZXJ0aW9uLCBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnM7IC8vL1xuXG4gIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTi5tYXAoKGFzc2VydGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gYXNzZXJ0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGFzc2VydGlvbiA9IFR5cGVBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgRGVmaW5lZEFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eUFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9vZkFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBTYXRpc2ZpZXNBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVkQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc2VydGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyByZWZlcmVuY2VzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlc0pTT04gPSByZWZlcmVuY2VzOyAvLy9cblxuICByZWZlcmVuY2VzID0gcmVmZXJlbmNlc0pTT04ubWFwKChyZWZlcmVuY2VKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHJlZmVyZW5jZUpTT04sICAvLy9cbiAgICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9KTtcblxuICByZXR1cm4gcmVmZXJlbmNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25qZWN0dXJlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlczsgLy8vXG5cbiAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04ubWFwKChjb25qZWN0dXJlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25qZWN0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmplY3R1cmUgPSBDb25qZWN0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb21iaW5hdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9yczsgLy8vXG5cbiAgY29tYmluYXRvcnMgPSBjb21iaW5hdG9yc0pTT04ubWFwKChjb21iaW5hdG9ySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb21iaW5hdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3IgPSBDb21iaW5hdG9yLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBhc3N1bXB0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBhc3N1bXB0aW9uc0pTT04gPSBhc3N1bXB0aW9uczsgLy8vXG5cbiAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0pTT04ubWFwKChhc3N1bXB0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBhc3N1bXB0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb24gPSBBc3N1bXB0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdHlwZVByZWZpeGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXM7IC8vL1xuXG4gIHR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0pTT04ubWFwKCh0eXBlUHJlZml4SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0eXBlUHJlZml4SlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGVQcmVmaXggPSBUeXBlUHJlZml4LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXg7XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlUHJlZml4ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbnN0cnVjdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29uc3RydWN0b3JzSlNPTiA9IGNvbnN0cnVjdG9yczsgLy8vXG5cbiAgY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzSlNPTi5tYXAoKGNvbnN0cnVjdG9ySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25zdHJ1Y3RvckpTT04sICAvLy9cbiAgICAgICAgICBjb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICB9KTtcblxuICByZXR1cm4gY29uc3RydWN0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXRoZW9yZW1zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhdGhlb3JlbXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF0aGVvcmVtc0pTT04gPSBtZXRhdGhlb3JlbXM7IC8vL1xuXG4gIG1ldGF0aGVvcmVtcyA9IG1ldGF0aGVvcmVtc0pTT04ubWFwKChtZXRhdGhlb3JlbUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbWV0YXRoZW9yZW1KU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXRoZW9yZW0gPSBNZXRhdGhlb3JlbS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3VwcG9zaXRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zOyAgLy8vXG5cbiAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTi5tYXAoKHN1cHBvc2l0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdXBwb3NpdGlvbkpTT04sIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uID0gU3VwcG9zaXRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdWJzdGl0dXRpb25zID0gW10gfSA9IGpzb247ICAvLy9cblxuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9ucywgIC8vL1xuICAgICAgICBTdWJzdGl0dXRpb24gPSBTdGF0ZW1lbnRTdWJzdGl0dXRpb247IC8vL1xuXG4gIHN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zSlNPTi5tYXAoKHN1YnN0aXR1dGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3Vic3RpdHV0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlczsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OLm1hcCgobWV0YXZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBtZXRhdmFyaWFibGVKU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcGhlbWVyYWxDb250ZXh0RnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dCA9IGNvbnRleHQ7XG5cbiAgKHtjb250ZXh0fSA9IGpzb24pO1xuXG4gIGpzb24gPSBjb250ZXh0OyAvLy9cblxuICBjb250ZXh0ID0gcmVsZWFzZUNvbnRleHQ7IC8vL1xuXG4gIGNvbnN0IGVtcGhlbWVyYWxDb250ZXh0ID0gRXBoZW1lcmFsQ29udGV4dC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZW1waGVtZXJhbENvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lVG9OYW1lSlNPTihuYW1lKSB7XG4gIGNvbnN0IG5hbWVKU09OID0gbmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Ub1Rlcm1KU09OKHRlcm0pIHtcbiAgY29uc3QgdGVybUpTT04gPSB0ZXJtLnRvSlNPTigpO1xuXG4gIHJldHVybiB0ZXJtSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVUb1R5cGVKU09OKHR5cGUpIHtcbiAgY29uc3QgdHlwZUpTT04gPSAodHlwZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gdHlwZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbFRvTGFiZWxKU09OKGxhYmVsKSB7XG4gIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gIHJldHVybiBsYWJlbEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZVRvTWV0YVR5cGVKU09OKG1ldGFUeXBlKSB7XG4gIGNvbnN0IG1ldGFUeXBlSlNPTiA9IChtZXRhVHlwZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFUeXBlLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIG1ldGFUeXBlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVRvUmVmZXJlbmNlSlNPTihyZWZlcmVuY2UpIHtcbiAgY29uc3QgcmVmZXJlbmNlSlNPTiA9IHJlZmVyZW5jZS50b0pTT04oKTtcblxuICByZXR1cm4gcmVmZXJlbmNlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTihzdGF0ZW1lbnQpIHtcbiAgY29uc3Qgc3RhdGVtZW50SlNPTiA9IChzdGF0ZW1lbnQgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKGRlZHVjdGlvbikge1xuICBjb25zdCBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb25KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHNpZ25hdHVyZSkge1xuICBjb25zdCBzaWduYXR1cmVKU09OID0gKHNpZ25hdHVyZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTihjb25jbHVzaW9uKSB7XG4gIGNvbnN0IGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvbi50b0pTT04oKTtcblxuICByZXR1cm4gY29uY2x1c2lvbkpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04obWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsVG9Qcm9jZWR1cmVDYWxsSlNPTihwcm9jZWR1cmVDYWxsKSB7XG4gIGNvbnN0IHByb2NlZHVyZUNhbGxKU09OID0gKHByb2NlZHVyZUNhbGwgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NlZHVyZUNhbGwudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZVRvUHJvY2VkdXJlUmVmZXJlbmNlSlNPTihwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZS50b0pTT04oKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zVG9UZXJtc0pTT04odGVybXMpIHtcbiAgY29uc3QgdGVybXNKU09OID0gdGVybXMubWFwKCh0ZXJtKSA9PiB7XG4gICAgY29uc3QgdGVybUpTT04gPSB0ZXJtLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHRlcm1KU09OO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNUb1R5cGVzSlNPTih0eXBlcykge1xuICBjb25zdCB0eXBlc0pTT04gPSB0eXBlcy5tYXAoKHR5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGUudG9KU09OKCk7XG5cbiAgICB0eXBlID0gdHlwZUpTT047IC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc1RvUnVsZXNKU09OKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVzSlNPTiA9IHJ1bGVzLm1hcCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVKU09OID0gcnVsZS50b0pTT04oKTtcblxuICAgIHJ1bGUgPSBydWxlSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1RvTGFiZWxzSlNPTihsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVscy5tYXAoKGxhYmVsKSA9PiB7XG4gICAgY29uc3QgbGFiZWxKU09OID0gbGFiZWwudG9KU09OKCk7XG5cbiAgICByZXR1cm4gbGFiZWxKU09OO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lc1RvRnJhbWVzSlNPTihmcmFtZXMpIHtcbiAgY29uc3QgZnJhbWVzSlNPTiA9IGZyYW1lcy5tYXAoKGZyYW1lKSA9PiB7XG4gICAgY29uc3QgZnJhbWVKU09OID0gZnJhbWUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gZnJhbWVKU09OO1xuICB9KTtcblxuICByZXR1cm4gZnJhbWVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tc1RvQXhpb21zSlNPTihheGlvbXMpIHtcbiAgY29uc3QgYXhpb21zSlNPTiA9IGF4aW9tcy5tYXAoKGF4aW9tKSA9PiB7XG4gICAgY29uc3QgYXhpb21KU09OID0gYXhpb20udG9KU09OKCk7XG5cbiAgICBheGlvbSA9IGF4aW9tSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gYXhpb207XG4gIH0pO1xuXG4gIHJldHVybiBheGlvbXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNUb1ByZW1pc2VzSlNPTihwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc0pTT04gPSBwcmVtaXNlcy5tYXAoKHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlSlNPTiA9IHByZW1pc2UudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtc1RvVGhlb3JlbXNKU09OKHRoZW9yZW1zKSB7XG4gIGNvbnN0IHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zLm1hcCgodGhlb3JlbSkgPT4ge1xuICAgIGNvbnN0IHRoZW9yZW1KU09OID0gdGhlb3JlbS50b0pTT04oKTtcblxuICAgIHRoZW9yZW0gPSB0aGVvcmVtSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoZW9yZW1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlc1RvVmFyaWFibGVzSlNPTih2YXJpYWJsZXMpIHtcbiAgY29uc3QgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVKU09OID0gdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlSlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzLm1hcCgoaHlwb3RoZXNpcykgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXNKU09OID0gaHlwb3RoZXNpcy50b0pTT04oKTtcblxuICAgIGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04oc3VwZXJUeXBlcykge1xuICBjb25zdCBzdXBlclR5cGVzSlNPTiA9IHN1cGVyVHlwZXMubWFwKChzdXBlclR5cGUpID0+IHtcbiAgICBjb25zdCBzdXBlclR5cGVKU09OID0gc3VwZXJUeXBlLnRvSlNPTigpO1xuXG4gICAgc3VwZXJUeXBlID0gc3VwZXJUeXBlSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gc3VwZXJUeXBlO1xuICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzVG9QYXJhbWV0ZXJzSlNPTihwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNKU09OID0gcGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckpTT04gPSBwYXJhbWV0ZXIudG9KU09OKCk7XG5cbiAgICBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllcy5tYXAoKHByb3BlcnR5KSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlKU09OID0gcHJvcGVydHkudG9KU09OKCk7XG5cbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5SlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTihqdWRnZW1lbnRzKSB7XG4gIGNvbnN0IGp1ZGdlbWVudHNKU09OID0ganVkZ2VtZW50cy5tYXAoKGp1ZGdlbWVudCkgPT4ge1xuICAgIGNvbnN0IGp1ZGdlbWVudEpTT04gPSBqdWRnZW1lbnQudG9KU09OKCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudHNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04oZXF1YWxpdGllcykge1xuICBjb25zdCBlcXVhbGl0aWVzSlNPTiA9IGVxdWFsaXRpZXMubWFwKChlcXVhbGl0eSkgPT4ge1xuICAgIGNvbnN0IGVxdWFsaXR5SlNPTiA9IGVxdWFsaXR5LnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04oc3RhdGVtZW50cykge1xuICBjb25zdCBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHMubWFwKChzdGF0ZW1lbnQpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnRKU09OID0gc3RhdGVtZW50LnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudEpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OKGFzc2VydGlvbnMpIHtcbiAgY29uc3QgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zLm1hcCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0aW9uSlNPTiA9IGFzc2VydGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gYXNzZXJ0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTihyZWZlcmVuY2VzKSB7XG4gIGNvbnN0IHJlZmVyZW5jZXNKU09OID0gcmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4ge1xuICAgIGNvbnN0IHJlZmVyZW5jZUpTT04gPSByZWZlcmVuY2UudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTihjb25qZWN0dXJlcykge1xuICBjb25zdCBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlcy5tYXAoKGNvbmplY3R1cmUpID0+IHtcbiAgICBjb25zdCBjb25qZWN0dXJlSlNPTiA9IGNvbmplY3R1cmUudG9KU09OKCk7XG5cbiAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUpTT047IC8vL1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OKGNvbWJpbmF0b3JzKSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JzSlNPTiA9IGNvbWJpbmF0b3JzLm1hcCgoY29tYmluYXRvcikgPT4ge1xuICAgIGNvbnN0IGNvbWJpbmF0b3JKU09OID0gY29tYmluYXRvci50b0pTT04oKTtcblxuICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9ySlNPTjsgLy8vXG5cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04oYXNzdW1wdGlvbnMpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnMubWFwKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbkpTT04gPSBhc3N1bXB0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHN1cHBvc2l0aW9ucykge1xuICBjb25zdCBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zLm1hcCgoc3VwcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbkpTT04gPSBzdXBwb3NpdGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OKGNvbnN0cnVjdG9ycykge1xuICBjb25zdCBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzLm1hcCgoY29uc3RydWN0b3IpID0+IHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvckpTT04gPSBjb25zdHJ1Y3Rvci50b0pTT04oKTtcblxuICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvcnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXRoZW9yZW1zVG9NZXRhdGhlb3JlbXNKU09OKG1ldGF0aGVvcmVtcykge1xuICBjb25zdCBtZXRhdGhlb3JlbXNKU09OID0gbWV0YXRoZW9yZW1zLm1hcCgobWV0YXRoZW9yZW0pID0+IHtcbiAgICBjb25zdCBtZXRhdGhlb3JlbUpTT04gPSBtZXRhdGhlb3JlbS50b0pTT04oKTtcblxuICAgIG1ldGF0aGVvcmVtID0gbWV0YXRoZW9yZW1KU09OOyAvLy9cblxuICAgIHJldHVybiBtZXRhdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04odHlwZVByZWZpeGVzKSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXMubWFwKCh0eXBlUHJlZml4KSA9PiB7XG4gICAgY29uc3QgdHlwZVByZWZpeEpTT04gPSB0eXBlUHJlZml4LnRvSlNPTigpO1xuXG4gICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhKU09OOyAvLy9cblxuICAgIHJldHVybiB0eXBlUHJlZml4O1xuICB9KTtcblxuICByZXR1cm4gdHlwZVByZWZpeGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpIHtcbiAgY29uc3Qgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zLm1hcFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uSlNPTiA9IHN1YnN0aXR1dGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlcy5tYXAoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25zVG9DU3Vic3RpdHV0aW9uc0pTT04oc3Vic3RpdHV0aWlvbnMpIHtcbiAgY29uc3Qgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpaW9ucy5tYXAoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkpTT04gPSBzdWJzdGl0dXRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbnNKU09OO1xufVxuIl0sIm5hbWVzIjpbImFzc2VydGlvbnNGcm9tSlNPTiIsImFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OIiwiYXNzdW1wdGlvbnNGcm9tSlNPTiIsImFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04iLCJheGlvbXNGcm9tSlNPTiIsImF4aW9tc1RvQXhpb21zSlNPTiIsImNvbWJpbmF0b3JzRnJvbUpTT04iLCJjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OIiwiY29uY2x1c2lvbkZyb21KU09OIiwiY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04iLCJjb25qZWN0dXJlc0Zyb21KU09OIiwiY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTiIsImNvbnN0cnVjdG9yc0Zyb21KU09OIiwiY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJlcGhlbWVyYWxDb250ZXh0RnJvbUpTT04iLCJlcXVhbGl0aWVzRnJvbUpTT04iLCJlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTiIsImZyYW1lc0Zyb21KU09OIiwiZnJhbWVzVG9GcmFtZXNKU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJqdWRnZW1lbnRzRnJvbUpTT04iLCJqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTiIsImxhYmVsRnJvbUpTT04iLCJsYWJlbFRvTGFiZWxKU09OIiwibGFiZWxzRnJvbUpTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJsZW1tYXNGcm9tTm90aGluZyIsIm1ldGFMZW1tYXNGcm9tTm90aGluZyIsIm1ldGFUeXBlRnJvbUpTT04iLCJtZXRhVHlwZVRvTWV0YVR5cGVKU09OIiwibWV0YXRoZW9yZW1zRnJvbUpTT04iLCJtZXRhdGhlb3JlbXNUb01ldGF0aGVvcmVtc0pTT04iLCJtZXRhdmFyaWFibGVGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwibmFtZUZyb21KU09OIiwibmFtZVRvTmFtZUpTT04iLCJwYXJhbWV0ZXJzRnJvbUpTT04iLCJwYXJhbWV0ZXJzVG9QYXJhbWV0ZXJzSlNPTiIsInByZW1pc2VzRnJvbUpTT04iLCJwcmVtaXNlc1RvUHJlbWlzZXNKU09OIiwicHJvY2VkdXJlQ2FsbEZyb21KU09OIiwicHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSlNPTiIsInByb2NlZHVyZVJlZmVyZW5jZVRvUHJvY2VkdXJlUmVmZXJlbmNlSlNPTiIsInByb3BlcnRpZXNGcm9tSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicmVmZXJlbmNlRnJvbUpTT04iLCJyZWZlcmVuY2VUb1JlZmVyZW5jZUpTT04iLCJyZWZlcmVuY2VzRnJvbUpTT04iLCJyZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTiIsInJ1bGVzRnJvbUpTT04iLCJydWxlc1RvUnVsZXNKU09OIiwic2lnbmF0dXJlRnJvbUpTT04iLCJzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04iLCJzdGF0ZW1lbnRGcm9tSlNPTiIsInN0YXRlbWVudFRvU3RhdGVtZW50SlNPTiIsInN0YXRlbWVudHNGcm9tSlNPTiIsInN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OIiwic3Vic3RpdHV0aW9uc0Zyb21KU09OIiwic3Vic3RpdHV0aW9uc1RvQ1N1YnN0aXR1dGlvbnNKU09OIiwic3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04iLCJzdXBlclR5cGVzRnJvbUpTT04iLCJzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTiIsInN1cHBvc2l0aW9uc0Zyb21KU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwidGVybUZyb21KU09OIiwidGVybVRvVGVybUpTT04iLCJ0ZXJtc0Zyb21KU09OIiwidGVybXNUb1Rlcm1zSlNPTiIsInRoZW9yZW1zRnJvbUpTT04iLCJ0aGVvcmVtc1RvVGhlb3JlbXNKU09OIiwidHlwZUZyb21KU09OIiwidHlwZVByZWZpeGVzRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04iLCJ0eXBlVG9UeXBlSlNPTiIsInR5cGVzRnJvbUpTT04iLCJ0eXBlc1RvVHlwZXNKU09OIiwidmFyaWFibGVzRnJvbUpTT04iLCJ2YXJpYWJsZXNUb1ZhcmlhYmxlc0pTT04iLCJsZW1tYXMiLCJtZXRhTGVtbWFzIiwianNvbiIsImNvbnRleHQiLCJuYW1lIiwibmFtZUpTT04iLCJ0ZXJtIiwidGVybUpTT04iLCJUZXJtIiwiZWxlbWVudHMiLCJmcm9tSlNPTiIsInR5cGUiLCJwcmVmaXhOYW1lIiwibm9taW5hbFR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm1ldGFUeXBlIiwibWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJzdGF0ZW1lbnQiLCJTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRKU09OIiwiZGVkdWN0aW9uIiwiRGVkdWN0aW9uIiwiZGVkdWN0aW9uSlNPTiIsInNpZ25hdHVyZSIsIlNpZ25hdHVyZSIsInNpZ25hdHVyZUpTT04iLCJyZWZlcmVuY2UiLCJSZWZlcmVuY2UiLCJyZWZlcmVuY2VKU09OIiwiY29uY2x1c2lvbiIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW9uSlNPTiIsIm1ldGF2YXJpYWJsZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUpTT04iLCJwcm9jZWR1cmVDYWxsIiwiUHJvY2VkdXJlQ2FsbCIsInByb2NlZHVyZUNhbGxKU09OIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlSlNPTiIsInR5cGVzIiwidHlwZXNKU09OIiwiVHlwZSIsImZvckVhY2giLCJ0eXBlSlNPTiIsInB1c2giLCJ0ZXJtcyIsInRlcm1zSlNPTiIsIm1hcCIsInJ1bGVzIiwiUnVsZSIsInJ1bGVzSlNPTiIsInJ1bGVKU09OIiwicnVsZSIsImxhYmVsIiwiTGFiZWwiLCJsYWJlbEpTT04iLCJmcmFtZXMiLCJGcmFtZSIsImZyYW1lc0pTT04iLCJmcmFtZUpTT04iLCJmcmFtZSIsImxhYmVscyIsImxhYmVsc0pTT04iLCJheGlvbXMiLCJBeGlvbSIsImF4aW9tc0pTT04iLCJheGlvbUpTT04iLCJheGlvbSIsInByZW1pc2VzIiwiUHJlbWlzZSIsInByZW1pc2VzSlNPTiIsInByZW1pc2VKU09OIiwicHJlbWlzZSIsInRoZW9yZW1zIiwiVGhlb3JlbSIsInRoZW9yZW1zSlNPTiIsInRoZW9yZW1KU09OIiwidGhlb3JlbSIsInZhcmlhYmxlcyIsIlZhcmlhYmxlIiwidmFyaWFibGVzSlNPTiIsInZhcmlhYmxlSlNPTiIsInZhcmlhYmxlIiwiZXF1YWxpdGllcyIsIkVxdWFsaXR5IiwiZXF1YWxpdGllc0pTT04iLCJlcXVhbGl0eUpTT04iLCJlcXVhbGl0eSIsInByb3BlcnRpZXMiLCJQcm9wZXJ0eSIsInByb3BlcnRpZXNKU09OIiwicHJvcGVydHlKU09OIiwicHJvcGVydHkiLCJzdXBlclR5cGVzIiwic3VwZXJUeXBlc0pTT04iLCJzdXBlclR5cGVKU09OIiwibm9taW5hbFN1cGVyVHlwZU5hbWUiLCJzdXBlclR5cGUiLCJoeXBvdGhlc2VzIiwiSHlwb3RoZXNpcyIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNpc0pTT04iLCJoeXBvdGhlc2lzIiwicGFyYW1ldGVycyIsIlBhcmFtZXRlciIsInBhcmFtZXRlcnNKU09OIiwicGFyYW1ldGVySlNPTiIsInBhcmFtZXRlciIsImp1ZGdlbWVudHMiLCJKdWRnZW1lbnQiLCJqdWRnZW1lbnRzSlNPTiIsImp1ZGdlbWVudEpTT04iLCJqdWRnZW1lbnQiLCJzdGF0ZW1lbnRzIiwic3RhdGVtZW50c0pTT04iLCJhc3NlcnRpb25zIiwiVHlwZUFzc2VydGlvbiIsIkRlZmluZWRBc3NlcnRpb24iLCJQcm9wZXJ0eUFzc2VydGlvbiIsIlN1YnByb29mQXNzZXJ0aW9uIiwiU2F0aXNmaWVzQXNzZXJ0aW9uIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiYXNzZXJ0aW9uc0pTT04iLCJhc3NlcnRpb25KU09OIiwiYXNzZXJ0aW9uIiwicmVmZXJlbmNlcyIsInJlZmVyZW5jZXNKU09OIiwiY29uamVjdHVyZXMiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZXNKU09OIiwiY29uamVjdHVyZUpTT04iLCJjb25qZWN0dXJlIiwiY29tYmluYXRvcnMiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvcnNKU09OIiwiY29tYmluYXRvckpTT04iLCJjb21iaW5hdG9yIiwiYXNzdW1wdGlvbnMiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbkpTT04iLCJhc3N1bXB0aW9uIiwidHlwZVByZWZpeGVzIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0pTT04iLCJ0eXBlUHJlZml4SlNPTiIsInR5cGVQcmVmaXgiLCJjb25zdHJ1Y3RvcnMiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvckpTT04iLCJjb25zdHJ1Y3RvciIsIm1ldGF0aGVvcmVtcyIsIk1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW1zSlNPTiIsIm1ldGF0aGVvcmVtSlNPTiIsIm1ldGF0aGVvcmVtIiwic3VwcG9zaXRpb25zIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25KU09OIiwic3VwcG9zaXRpb24iLCJzdWJzdGl0dXRpb25zIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uc0pTT04iLCJTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25KU09OIiwic3Vic3RpdHV0aW9uIiwibWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXNKU09OIiwicmVsZWFzZUNvbnRleHQiLCJlbXBoZW1lcmFsQ29udGV4dCIsIkVwaGVtZXJhbENvbnRleHQiLCJ0b0pTT04iLCJtZXRhVHlwZUpTT04iLCJtYXBTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpaW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBa2NnQkE7ZUFBQUE7O1FBOGNBQztlQUFBQTs7UUF6WUFDO2VBQUFBOztRQXFiQUM7ZUFBQUE7O1FBM3FCQUM7ZUFBQUE7O1FBbWdC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
894
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IEVwaGVtZXJhbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvZXBoZW1lcmFsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYXNGcm9tTm90aGluZygpIHtcbiAgY29uc3QgbGVtbWFzID0gW107XG5cbiAgcmV0dXJuIGxlbW1hcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYXNGcm9tTm90aGluZygpIHtcbiAgY29uc3QgbWV0YUxlbW1hcyA9IFtdO1xuXG4gIHJldHVybiBtZXRhTGVtbWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbmFtZSB9ID0ganNvbjtcblxuICBjb25zdCBuYW1lSlNPTiA9IG5hbWU7ICAvLy9cblxuICBuYW1lID0gbmFtZUpTT047ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm0gfSA9IGpzb247XG5cbiAgY29uc3QgdGVybUpTT04gPSB0ZXJtOyAgLy8vXG5cbiAganNvbiA9IHRlcm1KU09OOyAgLy8vXG5cbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cztcblxuICB0ZXJtID0gVGVybS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHR5cGUgfSA9IGpzb247XG5cbiAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gdHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBuYW1lLCBwcmVmaXhOYW1lIH0gPSBqc29uLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IChwcmVmaXhOYW1lICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlZml4TmFtZX0ke25hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsgLy8vXG5cbiAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhVHlwZSB9ID0ganNvbjtcblxuICBpZiAobWV0YVR5cGUgIT09IG51bGwpIHtcbiAgICBqc29uID0gbWV0YVR5cGU7ICAvLy9cblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbixcbiAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBuYW1lOyAgLy8vXG5cbiAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3RhdGVtZW50ID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGpzb24gPSBzdGF0ZW1lbnRKU09OOyAvLy9cblxuICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGRlZHVjdGlvbiB9ID0ganNvbjtcblxuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb247ICAvLy9cblxuICBqc29uID0gZGVkdWN0aW9uSlNPTjsgIC8vL1xuXG4gIGRlZHVjdGlvbiA9IERlZHVjdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzaWduYXR1cmUgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzaWduYXR1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZTsgIC8vL1xuXG4gICAganNvbiA9IHNpZ25hdHVyZUpTT047IC8vL1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcmVmZXJlbmNlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlSlNPTiA9IHJlZmVyZW5jZTsgIC8vL1xuXG4gIGpzb24gPSByZWZlcmVuY2VKU09OOyAvLy9cblxuICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmNsdXNpb24gfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uOyAgLy8vXG5cbiAganNvbiA9IGNvbmNsdXNpb25KU09OOyAgLy8vXG5cbiAgY29uY2x1c2lvbiA9IENvbmNsdXNpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF2YXJpYWJsZSB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICBqc29uID0gbWV0YXZhcmlhYmxlSlNPTjsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9jZWR1cmVDYWxsID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbEpTT04gPSBwcm9jZWR1cmVDYWxsOyAgLy8vXG5cbiAgICBqc29uID0gcHJvY2VkdXJlQ2FsbEpTT047IC8vL1xuXG4gICAgcHJvY2VkdXJlQ2FsbCA9IFByb2NlZHVyZUNhbGwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZTsgIC8vL1xuXG4gIGpzb24gPSBwcm9jZWR1cmVSZWZlcmVuY2VKU09OOyAgLy8vXG5cbiAgcHJvY2VkdXJlUmVmZXJlbmNlID0gUHJvY2VkdXJlUmVmZXJlbmNlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21KU09OKGpzb24sIHR5cGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdHlwZXM6IHR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gIHR5cGVzSlNPTi5mb3JFYWNoKCh0eXBlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGUgPSBUeXBlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdHlwZXMucHVzaCh0eXBlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdGVybXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGVybXNKU09OID0gdGVybXM7IC8vL1xuXG4gIHRlcm1zID0gdGVybXNKU09OLm1hcCgodGVybUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdGVybUpTT04sICAvLy9cbiAgICAgICAgICB0ZXJtID0gVGVybS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcnVsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcnVsZXNKU09OID0gcnVsZXM7IC8vL1xuXG4gIHJ1bGVzID0gcnVsZXNKU09OLm1hcCgocnVsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcnVsZUpTT04sICAvLy9cbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWwgfSA9IGpzb247XG5cbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsSlNPTiA9IGxhYmVsOyAgLy8vXG5cbiAganNvbiA9IGxhYmVsSlNPTjsgLy8vXG5cbiAgbGFiZWwgPSBMYWJlbC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGZyYW1lcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZnJhbWVzSlNPTiA9IGZyYW1lczsgLy8vXG5cbiAgZnJhbWVzID0gZnJhbWVzSlNPTi5tYXAoKGZyYW1lSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBmcmFtZUpTT04sICAvLy9cbiAgICAgICAgICBmcmFtZSA9IEZyYW1lLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9KTtcblxuICByZXR1cm4gZnJhbWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBsYWJlbHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsc0pTT04gPSBsYWJlbHM7ICAvLy9cblxuICBsYWJlbHMgPSBsYWJlbHNKU09OLm1hcCgobGFiZWxKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGxhYmVsSlNPTiwgLy8vXG4gICAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgYXhpb21zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbXNKU09OID0gYXhpb21zOyAvLy9cblxuICBheGlvbXMgPSBheGlvbXNKU09OLm1hcCgoYXhpb21KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGF4aW9tSlNPTiwgIC8vL1xuICAgICAgICAgIGF4aW9tID0gQXhpb20uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH0pO1xuXG4gIHJldHVybiBheGlvbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJlbWlzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJlbWlzZXNKU09OID0gcHJlbWlzZXM7ICAvLy9cblxuICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTi5tYXAoKHByZW1pc2VKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByZW1pc2VKU09OLCAvLy9cbiAgICAgICAgICBwcmVtaXNlID0gUHJlbWlzZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdGhlb3JlbXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdGhlb3JlbXNKU09OID0gdGhlb3JlbXM7IC8vL1xuXG4gIHRoZW9yZW1zID0gdGhlb3JlbXNKU09OLm1hcCgodGhlb3JlbUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdGhlb3JlbUpTT04sICAvLy9cbiAgICAgICAgICB0aGVvcmVtID0gVGhlb3JlbS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gdGhlb3JlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlczsgLy8vXG5cbiAgdmFyaWFibGVzID0gdmFyaWFibGVzSlNPTi5tYXAoKHZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZXF1YWxpdGllcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgZXF1YWxpdGllc0pTT04gPSBlcXVhbGl0aWVzOyAvLy9cblxuICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT04ubWFwKChlcXVhbGl0eUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZXF1YWxpdHlKU09OLCAgLy8vXG4gICAgICAgICAgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9wZXJ0aWVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9wZXJ0aWVzSlNPTiA9IHByb3BlcnRpZXM7IC8vL1xuXG4gIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzSlNPTi5tYXAoKHByb3BlcnR5SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwcm9wZXJ0eUpTT04sICAvLy9cbiAgICAgICAgICBwcm9wZXJ0eSA9IFByb3BlcnR5LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgc3VwZXJUeXBlczogc3VwZXJUeXBlc0pTT04gfSA9IGpzb247XG5cbiAgY29uc3Qgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNKU09OLm1hcCgoc3VwZXJUeXBlSlNPTikgPT4ge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBzdXBlclR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgICAgICAgeyBuYW1lLCBwcmVmaXhOYW1lIH0gPSBqc29uLFxuICAgICAgICAgICAgICAgIG5vbWluYWxTdXBlclR5cGVOYW1lID0gKHByZWZpeE5hbWUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlZml4TmFtZX0ke25hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIC8vL1xuICAgICAgICAgICAgICAgIHN1cGVyVHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsU3VwZXJUeXBlTmFtZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGh5cG90aGVzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzOyAgLy8vXG5cbiAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLm1hcCgoaHlwb3RoZXNpc0pTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gaHlwb3RoZXNpc0pTT04sIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXMgPSBIeXBvdGhlc2lzLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcGFyYW1ldGVycyB9ID0ganNvbjtcblxuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnNKU09OID0gcGFyYW1ldGVyczsgLy8vXG5cbiAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNKU09OLm1hcCgocGFyYW1ldGVySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwYXJhbWV0ZXJKU09OLCAgLy8vXG4gICAgICAgICAgcGFyYW1ldGVyID0gUGFyYW1ldGVyLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBqdWRnZW1lbnRzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAganVkZ2VtZW50c0pTT04gPSBqdWRnZW1lbnRzOyAvLy9cblxuICBqdWRnZW1lbnRzID0ganVkZ2VtZW50c0pTT04ubWFwKChqdWRnZW1lbnRKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGp1ZGdlbWVudEpTT04sICAvLy9cbiAgICAgICAgICBqdWRnZW1lbnQgPSBKdWRnZW1lbnQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9KTtcblxuICByZXR1cm4ganVkZ2VtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN0YXRlbWVudHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHM7IC8vL1xuXG4gIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzSlNPTi5tYXAoKHN0YXRlbWVudEpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3RhdGVtZW50SlNPTiwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgYXNzZXJ0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGVBc3NlcnRpb24sIERlZmluZWRBc3NlcnRpb24sIFByb3BlcnR5QXNzZXJ0aW9uLCBTdWJwcm9vZkFzc2VydGlvbiwgU2F0aXNmaWVzQXNzZXJ0aW9uLCBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnM7IC8vL1xuXG4gIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTi5tYXAoKGFzc2VydGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gYXNzZXJ0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGFzc2VydGlvbiA9IFR5cGVBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgRGVmaW5lZEFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eUFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9vZkFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICBTYXRpc2ZpZXNBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVkQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc2VydGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyByZWZlcmVuY2VzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVmZXJlbmNlc0pTT04gPSByZWZlcmVuY2VzOyAvLy9cblxuICByZWZlcmVuY2VzID0gcmVmZXJlbmNlc0pTT04ubWFwKChyZWZlcmVuY2VKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHJlZmVyZW5jZUpTT04sICAvLy9cbiAgICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9KTtcblxuICByZXR1cm4gcmVmZXJlbmNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25qZWN0dXJlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlczsgLy8vXG5cbiAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04ubWFwKChjb25qZWN0dXJlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25qZWN0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmplY3R1cmUgPSBDb25qZWN0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb21iaW5hdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9yczsgLy8vXG5cbiAgY29tYmluYXRvcnMgPSBjb21iaW5hdG9yc0pTT04ubWFwKChjb21iaW5hdG9ySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb21iaW5hdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3IgPSBDb21iaW5hdG9yLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBhc3N1bXB0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBhc3N1bXB0aW9uc0pTT04gPSBhc3N1bXB0aW9uczsgLy8vXG5cbiAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0pTT04ubWFwKChhc3N1bXB0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBhc3N1bXB0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb24gPSBBc3N1bXB0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdHlwZVByZWZpeGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXM7IC8vL1xuXG4gIHR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0pTT04ubWFwKCh0eXBlUHJlZml4SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0eXBlUHJlZml4SlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGVQcmVmaXggPSBUeXBlUHJlZml4LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXg7XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlUHJlZml4ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbnN0cnVjdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29uc3RydWN0b3JzSlNPTiA9IGNvbnN0cnVjdG9yczsgLy8vXG5cbiAgY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzSlNPTi5tYXAoKGNvbnN0cnVjdG9ySlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25zdHJ1Y3RvckpTT04sICAvLy9cbiAgICAgICAgICBjb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICB9KTtcblxuICByZXR1cm4gY29uc3RydWN0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXRoZW9yZW1zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhdGhlb3JlbXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF0aGVvcmVtc0pTT04gPSBtZXRhdGhlb3JlbXM7IC8vL1xuXG4gIG1ldGF0aGVvcmVtcyA9IG1ldGF0aGVvcmVtc0pTT04ubWFwKChtZXRhdGhlb3JlbUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbWV0YXRoZW9yZW1KU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXRoZW9yZW0gPSBNZXRhdGhlb3JlbS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3VwcG9zaXRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zOyAgLy8vXG5cbiAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTi5tYXAoKHN1cHBvc2l0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdXBwb3NpdGlvbkpTT04sIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uID0gU3VwcG9zaXRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdWJzdGl0dXRpb25zID0gW10gfSA9IGpzb247ICAvLy9cblxuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9ucywgIC8vL1xuICAgICAgICBTdWJzdGl0dXRpb24gPSBTdGF0ZW1lbnRTdWJzdGl0dXRpb247IC8vL1xuXG4gIHN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zSlNPTi5tYXAoKHN1YnN0aXR1dGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3Vic3RpdHV0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlczsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OLm1hcCgobWV0YXZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBtZXRhdmFyaWFibGVKU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcGhlbWVyYWxDb250ZXh0RnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dCA9IGNvbnRleHQ7XG5cbiAgKHtjb250ZXh0fSA9IGpzb24pO1xuXG4gIGpzb24gPSBjb250ZXh0OyAvLy9cblxuICBjb250ZXh0ID0gcmVsZWFzZUNvbnRleHQ7IC8vL1xuXG4gIGNvbnN0IGVtcGhlbWVyYWxDb250ZXh0ID0gRXBoZW1lcmFsQ29udGV4dC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZW1waGVtZXJhbENvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lVG9OYW1lSlNPTihuYW1lKSB7XG4gIGNvbnN0IG5hbWVKU09OID0gbmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Ub1Rlcm1KU09OKHRlcm0pIHtcbiAgY29uc3QgdGVybUpTT04gPSB0ZXJtLnRvSlNPTigpO1xuXG4gIHJldHVybiB0ZXJtSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVUb1R5cGVKU09OKHR5cGUpIHtcbiAgY29uc3QgdHlwZUpTT04gPSAodHlwZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gdHlwZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbFRvTGFiZWxKU09OKGxhYmVsKSB7XG4gIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gIHJldHVybiBsYWJlbEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZVRvTWV0YVR5cGVKU09OKG1ldGFUeXBlKSB7XG4gIGNvbnN0IG1ldGFUeXBlSlNPTiA9IChtZXRhVHlwZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFUeXBlLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIG1ldGFUeXBlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVRvUmVmZXJlbmNlSlNPTihyZWZlcmVuY2UpIHtcbiAgY29uc3QgcmVmZXJlbmNlSlNPTiA9IHJlZmVyZW5jZS50b0pTT04oKTtcblxuICByZXR1cm4gcmVmZXJlbmNlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTihzdGF0ZW1lbnQpIHtcbiAgY29uc3Qgc3RhdGVtZW50SlNPTiA9IChzdGF0ZW1lbnQgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKGRlZHVjdGlvbikge1xuICBjb25zdCBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb25KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHNpZ25hdHVyZSkge1xuICBjb25zdCBzaWduYXR1cmVKU09OID0gKHNpZ25hdHVyZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTihjb25jbHVzaW9uKSB7XG4gIGNvbnN0IGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvbi50b0pTT04oKTtcblxuICByZXR1cm4gY29uY2x1c2lvbkpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04obWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsVG9Qcm9jZWR1cmVDYWxsSlNPTihwcm9jZWR1cmVDYWxsKSB7XG4gIGNvbnN0IHByb2NlZHVyZUNhbGxKU09OID0gKHByb2NlZHVyZUNhbGwgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NlZHVyZUNhbGwudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZVRvUHJvY2VkdXJlUmVmZXJlbmNlSlNPTihwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlSlNPTiA9IHByb2NlZHVyZVJlZmVyZW5jZS50b0pTT04oKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zVG9UZXJtc0pTT04odGVybXMpIHtcbiAgY29uc3QgdGVybXNKU09OID0gdGVybXMubWFwKCh0ZXJtKSA9PiB7XG4gICAgY29uc3QgdGVybUpTT04gPSB0ZXJtLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHRlcm1KU09OO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNUb1R5cGVzSlNPTih0eXBlcykge1xuICBjb25zdCB0eXBlc0pTT04gPSB0eXBlcy5tYXAoKHR5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGUudG9KU09OKCk7XG5cbiAgICB0eXBlID0gdHlwZUpTT047IC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc1RvUnVsZXNKU09OKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVzSlNPTiA9IHJ1bGVzLm1hcCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVKU09OID0gcnVsZS50b0pTT04oKTtcblxuICAgIHJ1bGUgPSBydWxlSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1RvTGFiZWxzSlNPTihsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVscy5tYXAoKGxhYmVsKSA9PiB7XG4gICAgY29uc3QgbGFiZWxKU09OID0gbGFiZWwudG9KU09OKCk7XG5cbiAgICByZXR1cm4gbGFiZWxKU09OO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lc1RvRnJhbWVzSlNPTihmcmFtZXMpIHtcbiAgY29uc3QgZnJhbWVzSlNPTiA9IGZyYW1lcy5tYXAoKGZyYW1lKSA9PiB7XG4gICAgY29uc3QgZnJhbWVKU09OID0gZnJhbWUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gZnJhbWVKU09OO1xuICB9KTtcblxuICByZXR1cm4gZnJhbWVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tc1RvQXhpb21zSlNPTihheGlvbXMpIHtcbiAgY29uc3QgYXhpb21zSlNPTiA9IGF4aW9tcy5tYXAoKGF4aW9tKSA9PiB7XG4gICAgY29uc3QgYXhpb21KU09OID0gYXhpb20udG9KU09OKCk7XG5cbiAgICBheGlvbSA9IGF4aW9tSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gYXhpb207XG4gIH0pO1xuXG4gIHJldHVybiBheGlvbXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNUb1ByZW1pc2VzSlNPTihwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc0pTT04gPSBwcmVtaXNlcy5tYXAoKHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlSlNPTiA9IHByZW1pc2UudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtc1RvVGhlb3JlbXNKU09OKHRoZW9yZW1zKSB7XG4gIGNvbnN0IHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zLm1hcCgodGhlb3JlbSkgPT4ge1xuICAgIGNvbnN0IHRoZW9yZW1KU09OID0gdGhlb3JlbS50b0pTT04oKTtcblxuICAgIHRoZW9yZW0gPSB0aGVvcmVtSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoZW9yZW1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlc1RvVmFyaWFibGVzSlNPTih2YXJpYWJsZXMpIHtcbiAgY29uc3QgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVKU09OID0gdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlSlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzLm1hcCgoaHlwb3RoZXNpcykgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXNKU09OID0gaHlwb3RoZXNpcy50b0pTT04oKTtcblxuICAgIGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04oc3VwZXJUeXBlcykge1xuICBjb25zdCBzdXBlclR5cGVzSlNPTiA9IHN1cGVyVHlwZXMubWFwKChzdXBlclR5cGUpID0+IHtcbiAgICBjb25zdCBzdXBlclR5cGVKU09OID0gc3VwZXJUeXBlLnRvSlNPTigpO1xuXG4gICAgc3VwZXJUeXBlID0gc3VwZXJUeXBlSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gc3VwZXJUeXBlO1xuICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzVG9QYXJhbWV0ZXJzSlNPTihwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNKU09OID0gcGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckpTT04gPSBwYXJhbWV0ZXIudG9KU09OKCk7XG5cbiAgICBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllcy5tYXAoKHByb3BlcnR5KSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlKU09OID0gcHJvcGVydHkudG9KU09OKCk7XG5cbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5SlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTihqdWRnZW1lbnRzKSB7XG4gIGNvbnN0IGp1ZGdlbWVudHNKU09OID0ganVkZ2VtZW50cy5tYXAoKGp1ZGdlbWVudCkgPT4ge1xuICAgIGNvbnN0IGp1ZGdlbWVudEpTT04gPSBqdWRnZW1lbnQudG9KU09OKCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudHNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04oZXF1YWxpdGllcykge1xuICBjb25zdCBlcXVhbGl0aWVzSlNPTiA9IGVxdWFsaXRpZXMubWFwKChlcXVhbGl0eSkgPT4ge1xuICAgIGNvbnN0IGVxdWFsaXR5SlNPTiA9IGVxdWFsaXR5LnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04oc3RhdGVtZW50cykge1xuICBjb25zdCBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHMubWFwKChzdGF0ZW1lbnQpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnRKU09OID0gc3RhdGVtZW50LnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudEpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OKGFzc2VydGlvbnMpIHtcbiAgY29uc3QgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zLm1hcCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0aW9uSlNPTiA9IGFzc2VydGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gYXNzZXJ0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTihyZWZlcmVuY2VzKSB7XG4gIGNvbnN0IHJlZmVyZW5jZXNKU09OID0gcmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4ge1xuICAgIGNvbnN0IHJlZmVyZW5jZUpTT04gPSByZWZlcmVuY2UudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTihjb25qZWN0dXJlcykge1xuICBjb25zdCBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlcy5tYXAoKGNvbmplY3R1cmUpID0+IHtcbiAgICBjb25zdCBjb25qZWN0dXJlSlNPTiA9IGNvbmplY3R1cmUudG9KU09OKCk7XG5cbiAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUpTT047IC8vL1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OKGNvbWJpbmF0b3JzKSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JzSlNPTiA9IGNvbWJpbmF0b3JzLm1hcCgoY29tYmluYXRvcikgPT4ge1xuICAgIGNvbnN0IGNvbWJpbmF0b3JKU09OID0gY29tYmluYXRvci50b0pTT04oKTtcblxuICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9ySlNPTjsgLy8vXG5cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04oYXNzdW1wdGlvbnMpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnMubWFwKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbkpTT04gPSBhc3N1bXB0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHN1cHBvc2l0aW9ucykge1xuICBjb25zdCBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zLm1hcCgoc3VwcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbkpTT04gPSBzdXBwb3NpdGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OKGNvbnN0cnVjdG9ycykge1xuICBjb25zdCBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzLm1hcCgoY29uc3RydWN0b3IpID0+IHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvckpTT04gPSBjb25zdHJ1Y3Rvci50b0pTT04oKTtcblxuICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvcnNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXRoZW9yZW1zVG9NZXRhdGhlb3JlbXNKU09OKG1ldGF0aGVvcmVtcykge1xuICBjb25zdCBtZXRhdGhlb3JlbXNKU09OID0gbWV0YXRoZW9yZW1zLm1hcCgobWV0YXRoZW9yZW0pID0+IHtcbiAgICBjb25zdCBtZXRhdGhlb3JlbUpTT04gPSBtZXRhdGhlb3JlbS50b0pTT04oKTtcblxuICAgIG1ldGF0aGVvcmVtID0gbWV0YXRoZW9yZW1KU09OOyAvLy9cblxuICAgIHJldHVybiBtZXRhdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04odHlwZVByZWZpeGVzKSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXMubWFwKCh0eXBlUHJlZml4KSA9PiB7XG4gICAgY29uc3QgdHlwZVByZWZpeEpTT04gPSB0eXBlUHJlZml4LnRvSlNPTigpO1xuXG4gICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhKU09OOyAvLy9cblxuICAgIHJldHVybiB0eXBlUHJlZml4O1xuICB9KTtcblxuICByZXR1cm4gdHlwZVByZWZpeGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpIHtcbiAgY29uc3Qgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zLm1hcFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uSlNPTiA9IHN1YnN0aXR1dGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlcy5tYXAoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25zVG9DU3Vic3RpdHV0aW9uc0pTT04oc3Vic3RpdHV0aWlvbnMpIHtcbiAgY29uc3Qgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpaW9ucy5tYXAoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkpTT04gPSBzdWJzdGl0dXRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbnNKU09OO1xufVxuIl0sIm5hbWVzIjpbImFzc2VydGlvbnNGcm9tSlNPTiIsImFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OIiwiYXNzdW1wdGlvbnNGcm9tSlNPTiIsImFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04iLCJheGlvbXNGcm9tSlNPTiIsImF4aW9tc1RvQXhpb21zSlNPTiIsImNvbWJpbmF0b3JzRnJvbUpTT04iLCJjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OIiwiY29uY2x1c2lvbkZyb21KU09OIiwiY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04iLCJjb25qZWN0dXJlc0Zyb21KU09OIiwiY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTiIsImNvbnN0cnVjdG9yc0Zyb21KU09OIiwiY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJlcGhlbWVyYWxDb250ZXh0RnJvbUpTT04iLCJlcXVhbGl0aWVzRnJvbUpTT04iLCJlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTiIsImZyYW1lc0Zyb21KU09OIiwiZnJhbWVzVG9GcmFtZXNKU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJqdWRnZW1lbnRzRnJvbUpTT04iLCJqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTiIsImxhYmVsRnJvbUpTT04iLCJsYWJlbFRvTGFiZWxKU09OIiwibGFiZWxzRnJvbUpTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJsZW1tYXNGcm9tTm90aGluZyIsIm1ldGFMZW1tYXNGcm9tTm90aGluZyIsIm1ldGFUeXBlRnJvbUpTT04iLCJtZXRhVHlwZVRvTWV0YVR5cGVKU09OIiwibWV0YXRoZW9yZW1zRnJvbUpTT04iLCJtZXRhdGhlb3JlbXNUb01ldGF0aGVvcmVtc0pTT04iLCJtZXRhdmFyaWFibGVGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwibmFtZUZyb21KU09OIiwibmFtZVRvTmFtZUpTT04iLCJwYXJhbWV0ZXJzRnJvbUpTT04iLCJwYXJhbWV0ZXJzVG9QYXJhbWV0ZXJzSlNPTiIsInByZW1pc2VzRnJvbUpTT04iLCJwcmVtaXNlc1RvUHJlbWlzZXNKU09OIiwicHJvY2VkdXJlQ2FsbEZyb21KU09OIiwicHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04iLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSlNPTiIsInByb2NlZHVyZVJlZmVyZW5jZVRvUHJvY2VkdXJlUmVmZXJlbmNlSlNPTiIsInByb3BlcnRpZXNGcm9tSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicmVmZXJlbmNlRnJvbUpTT04iLCJyZWZlcmVuY2VUb1JlZmVyZW5jZUpTT04iLCJyZWZlcmVuY2VzRnJvbUpTT04iLCJyZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTiIsInJ1bGVzRnJvbUpTT04iLCJydWxlc1RvUnVsZXNKU09OIiwic2lnbmF0dXJlRnJvbUpTT04iLCJzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04iLCJzdGF0ZW1lbnRGcm9tSlNPTiIsInN0YXRlbWVudFRvU3RhdGVtZW50SlNPTiIsInN0YXRlbWVudHNGcm9tSlNPTiIsInN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OIiwic3Vic3RpdHV0aW9uc0Zyb21KU09OIiwic3Vic3RpdHV0aW9uc1RvQ1N1YnN0aXR1dGlvbnNKU09OIiwic3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04iLCJzdXBlclR5cGVzRnJvbUpTT04iLCJzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTiIsInN1cHBvc2l0aW9uc0Zyb21KU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwidGVybUZyb21KU09OIiwidGVybVRvVGVybUpTT04iLCJ0ZXJtc0Zyb21KU09OIiwidGVybXNUb1Rlcm1zSlNPTiIsInRoZW9yZW1zRnJvbUpTT04iLCJ0aGVvcmVtc1RvVGhlb3JlbXNKU09OIiwidHlwZUZyb21KU09OIiwidHlwZVByZWZpeGVzRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04iLCJ0eXBlVG9UeXBlSlNPTiIsInR5cGVzRnJvbUpTT04iLCJ0eXBlc1RvVHlwZXNKU09OIiwidmFyaWFibGVzRnJvbUpTT04iLCJ2YXJpYWJsZXNUb1ZhcmlhYmxlc0pTT04iLCJsZW1tYXMiLCJtZXRhTGVtbWFzIiwianNvbiIsImNvbnRleHQiLCJuYW1lIiwibmFtZUpTT04iLCJ0ZXJtIiwidGVybUpTT04iLCJUZXJtIiwiZWxlbWVudHMiLCJmcm9tSlNPTiIsInR5cGUiLCJwcmVmaXhOYW1lIiwibm9taW5hbFR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm1ldGFUeXBlIiwibWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJzdGF0ZW1lbnQiLCJTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRKU09OIiwiZGVkdWN0aW9uIiwiRGVkdWN0aW9uIiwiZGVkdWN0aW9uSlNPTiIsInNpZ25hdHVyZSIsIlNpZ25hdHVyZSIsInNpZ25hdHVyZUpTT04iLCJyZWZlcmVuY2UiLCJSZWZlcmVuY2UiLCJyZWZlcmVuY2VKU09OIiwiY29uY2x1c2lvbiIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW9uSlNPTiIsIm1ldGF2YXJpYWJsZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUpTT04iLCJwcm9jZWR1cmVDYWxsIiwiUHJvY2VkdXJlQ2FsbCIsInByb2NlZHVyZUNhbGxKU09OIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlSlNPTiIsInR5cGVzIiwidHlwZXNKU09OIiwiVHlwZSIsImZvckVhY2giLCJ0eXBlSlNPTiIsInB1c2giLCJ0ZXJtcyIsInRlcm1zSlNPTiIsIm1hcCIsInJ1bGVzIiwiUnVsZSIsInJ1bGVzSlNPTiIsInJ1bGVKU09OIiwicnVsZSIsImxhYmVsIiwiTGFiZWwiLCJsYWJlbEpTT04iLCJmcmFtZXMiLCJGcmFtZSIsImZyYW1lc0pTT04iLCJmcmFtZUpTT04iLCJmcmFtZSIsImxhYmVscyIsImxhYmVsc0pTT04iLCJheGlvbXMiLCJBeGlvbSIsImF4aW9tc0pTT04iLCJheGlvbUpTT04iLCJheGlvbSIsInByZW1pc2VzIiwiUHJlbWlzZSIsInByZW1pc2VzSlNPTiIsInByZW1pc2VKU09OIiwicHJlbWlzZSIsInRoZW9yZW1zIiwiVGhlb3JlbSIsInRoZW9yZW1zSlNPTiIsInRoZW9yZW1KU09OIiwidGhlb3JlbSIsInZhcmlhYmxlcyIsIlZhcmlhYmxlIiwidmFyaWFibGVzSlNPTiIsInZhcmlhYmxlSlNPTiIsInZhcmlhYmxlIiwiZXF1YWxpdGllcyIsIkVxdWFsaXR5IiwiZXF1YWxpdGllc0pTT04iLCJlcXVhbGl0eUpTT04iLCJlcXVhbGl0eSIsInByb3BlcnRpZXMiLCJQcm9wZXJ0eSIsInByb3BlcnRpZXNKU09OIiwicHJvcGVydHlKU09OIiwicHJvcGVydHkiLCJzdXBlclR5cGVzIiwic3VwZXJUeXBlc0pTT04iLCJzdXBlclR5cGVKU09OIiwibm9taW5hbFN1cGVyVHlwZU5hbWUiLCJzdXBlclR5cGUiLCJoeXBvdGhlc2VzIiwiSHlwb3RoZXNpcyIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNpc0pTT04iLCJoeXBvdGhlc2lzIiwicGFyYW1ldGVycyIsIlBhcmFtZXRlciIsInBhcmFtZXRlcnNKU09OIiwicGFyYW1ldGVySlNPTiIsInBhcmFtZXRlciIsImp1ZGdlbWVudHMiLCJKdWRnZW1lbnQiLCJqdWRnZW1lbnRzSlNPTiIsImp1ZGdlbWVudEpTT04iLCJqdWRnZW1lbnQiLCJzdGF0ZW1lbnRzIiwic3RhdGVtZW50c0pTT04iLCJhc3NlcnRpb25zIiwiVHlwZUFzc2VydGlvbiIsIkRlZmluZWRBc3NlcnRpb24iLCJQcm9wZXJ0eUFzc2VydGlvbiIsIlN1YnByb29mQXNzZXJ0aW9uIiwiU2F0aXNmaWVzQXNzZXJ0aW9uIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiYXNzZXJ0aW9uc0pTT04iLCJhc3NlcnRpb25KU09OIiwiYXNzZXJ0aW9uIiwicmVmZXJlbmNlcyIsInJlZmVyZW5jZXNKU09OIiwiY29uamVjdHVyZXMiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZXNKU09OIiwiY29uamVjdHVyZUpTT04iLCJjb25qZWN0dXJlIiwiY29tYmluYXRvcnMiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvcnNKU09OIiwiY29tYmluYXRvckpTT04iLCJjb21iaW5hdG9yIiwiYXNzdW1wdGlvbnMiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbkpTT04iLCJhc3N1bXB0aW9uIiwidHlwZVByZWZpeGVzIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0pTT04iLCJ0eXBlUHJlZml4SlNPTiIsInR5cGVQcmVmaXgiLCJjb25zdHJ1Y3RvcnMiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvckpTT04iLCJjb25zdHJ1Y3RvciIsIm1ldGF0aGVvcmVtcyIsIk1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW1zSlNPTiIsIm1ldGF0aGVvcmVtSlNPTiIsIm1ldGF0aGVvcmVtIiwic3VwcG9zaXRpb25zIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25KU09OIiwic3VwcG9zaXRpb24iLCJzdWJzdGl0dXRpb25zIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uc0pTT04iLCJTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25KU09OIiwic3Vic3RpdHV0aW9uIiwibWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXNKU09OIiwicmVsZWFzZUNvbnRleHQiLCJlbXBoZW1lcmFsQ29udGV4dCIsIkVwaGVtZXJhbENvbnRleHQiLCJ0b0pTT04iLCJtZXRhVHlwZUpTT04iLCJtYXBTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpaW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBa2NnQkE7ZUFBQUE7O1FBOGNBQztlQUFBQTs7UUF6WUFDO2VBQUFBOztRQXFiQUM7ZUFBQUE7O1FBM3FCQUM7ZUFBQUE7O1FBbWdC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