@inkeep/agents-api 0.0.0-dev-20260302154535 → 0.0.0-dev-20260302164201

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.
@@ -54508,44 +54508,6 @@ var require_ms = __commonJS({
54508
54508
  }
54509
54509
  });
54510
54510
 
54511
- // src/domains/evals/workflow/functions/evaluateConversation.ts
54512
- var getConversationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getConversationStep");
54513
- var getEvaluatorsStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getEvaluatorsStep");
54514
- var executeEvaluatorStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep");
54515
- var logStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//logStep");
54516
- async function _evaluateConversationWorkflow(payload) {
54517
- const { conversationId, evaluatorIds } = payload;
54518
- await logStep("Starting conversation evaluation", payload);
54519
- const conversation = await getConversationStep(payload);
54520
- const evaluators = await getEvaluatorsStep(payload);
54521
- if (evaluators.length === 0) {
54522
- await logStep("No valid evaluators found", {
54523
- conversationId,
54524
- evaluatorIds
54525
- });
54526
- return {
54527
- success: false,
54528
- reason: "No valid evaluators"
54529
- };
54530
- }
54531
- const results = [];
54532
- for (const evaluator of evaluators) {
54533
- const result = await executeEvaluatorStep(payload, evaluator.id, conversation);
54534
- results.push(result);
54535
- }
54536
- return {
54537
- success: true,
54538
- conversationId,
54539
- resultCount: results.length
54540
- };
54541
- }
54542
- __name(_evaluateConversationWorkflow, "_evaluateConversationWorkflow");
54543
- _evaluateConversationWorkflow.workflowId = "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow";
54544
- globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow", _evaluateConversationWorkflow);
54545
- var evaluateConversationWorkflow = Object.assign(_evaluateConversationWorkflow, {
54546
- workflowId: "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow"
54547
- });
54548
-
54549
54511
  // ../node_modules/.pnpm/@workflow+utils@4.1.0-beta.11/node_modules/@workflow/utils/dist/time.js
54550
54512
  var import_ms = __toESM(require_ms(), 1);
54551
54513
 
@@ -54587,7 +54549,7 @@ __name(getWorkflowMetadata, "getWorkflowMetadata");
54587
54549
  var fetch = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//workflow@4.1.0-beta.54//fetch");
54588
54550
 
54589
54551
  // src/domains/run/workflow/steps/scheduledTriggerSteps.ts
54590
- var logStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//logStep");
54552
+ var logStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//logStep");
54591
54553
  var calculateNextExecutionStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//calculateNextExecutionStep");
54592
54554
  var computeSleepDurationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//computeSleepDurationStep");
54593
54555
  var getNextPendingInvocationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//getNextPendingInvocationStep");
@@ -54611,7 +54573,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54611
54573
  const { tenantId, projectId, agentId, scheduledTriggerId } = payload;
54612
54574
  const metadata = getWorkflowMetadata();
54613
54575
  const runnerId = metadata.workflowRunId;
54614
- await logStep2("Starting scheduled trigger runner workflow", {
54576
+ await logStep("Starting scheduled trigger runner workflow", {
54615
54577
  tenantId,
54616
54578
  projectId,
54617
54579
  agentId,
@@ -54628,7 +54590,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54628
54590
  runnerId
54629
54591
  });
54630
54592
  if (!enabledCheck.shouldContinue || !enabledCheck.trigger) {
54631
- await logStep2("Scheduled trigger workflow stopping", {
54593
+ await logStep("Scheduled trigger workflow stopping", {
54632
54594
  scheduledTriggerId,
54633
54595
  reason: enabledCheck.reason
54634
54596
  });
@@ -54649,7 +54611,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54649
54611
  let scheduledFor;
54650
54612
  if (isOneTime) {
54651
54613
  if (!trigger.runAt) {
54652
- await logStep2("One-time trigger missing runAt", {
54614
+ await logStep("One-time trigger missing runAt", {
54653
54615
  scheduledTriggerId
54654
54616
  });
54655
54617
  return {
@@ -54666,7 +54628,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54666
54628
  });
54667
54629
  scheduledFor = nextExecutionTime;
54668
54630
  } else {
54669
- await logStep2("Trigger missing both cronExpression and runAt", {
54631
+ await logStep("Trigger missing both cronExpression and runAt", {
54670
54632
  scheduledTriggerId
54671
54633
  });
54672
54634
  return {
@@ -54686,7 +54648,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54686
54648
  });
54687
54649
  invocation = result.invocation;
54688
54650
  if (isOneTime && result.alreadyExists && invocation.status !== "pending") {
54689
- await logStep2("One-time trigger already executed", {
54651
+ await logStep("One-time trigger already executed", {
54690
54652
  scheduledTriggerId,
54691
54653
  invocationId: invocation.id,
54692
54654
  status: invocation.status
@@ -54697,13 +54659,13 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54697
54659
  };
54698
54660
  }
54699
54661
  }
54700
- await logStep2("Got next pending invocation", {
54662
+ await logStep("Got next pending invocation", {
54701
54663
  scheduledTriggerId,
54702
54664
  invocationId: invocation.id,
54703
54665
  scheduledFor: invocation.scheduledFor
54704
54666
  });
54705
54667
  const sleepMs = await computeSleepDurationStep(invocation.scheduledFor);
54706
- await logStep2("Sleeping until scheduled time", {
54668
+ await logStep("Sleeping until scheduled time", {
54707
54669
  scheduledTriggerId,
54708
54670
  invocationId: invocation.id,
54709
54671
  scheduledFor: invocation.scheduledFor,
@@ -54718,7 +54680,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54718
54680
  runnerId
54719
54681
  });
54720
54682
  if (!postSleepCheck.shouldContinue || !postSleepCheck.trigger) {
54721
- await logStep2("Trigger disabled/deleted during sleep, stopping", {
54683
+ await logStep("Trigger disabled/deleted during sleep, stopping", {
54722
54684
  scheduledTriggerId,
54723
54685
  reason: postSleepCheck.reason
54724
54686
  });
@@ -54736,7 +54698,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54736
54698
  invocationId: invocation.id
54737
54699
  });
54738
54700
  if (cancelCheck.cancelled) {
54739
- await logStep2("Invocation was cancelled, skipping to next", {
54701
+ await logStep("Invocation was cancelled, skipping to next", {
54740
54702
  scheduledTriggerId,
54741
54703
  invocationId: invocation.id
54742
54704
  });
@@ -54754,7 +54716,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54754
54716
  invocationId: invocation.id
54755
54717
  });
54756
54718
  if (retryCancel.cancelled) {
54757
- await logStep2("Invocation cancelled during retry loop", {
54719
+ await logStep("Invocation cancelled during retry loop", {
54758
54720
  scheduledTriggerId,
54759
54721
  invocationId: invocation.id
54760
54722
  });
@@ -54796,7 +54758,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54796
54758
  scheduledTriggerId,
54797
54759
  invocationId: invocation.id
54798
54760
  });
54799
- await logStep2("Scheduled trigger execution completed", {
54761
+ await logStep("Scheduled trigger execution completed", {
54800
54762
  scheduledTriggerId,
54801
54763
  invocationId: invocation.id,
54802
54764
  conversationId: result.conversationId
@@ -54805,7 +54767,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54805
54767
  break;
54806
54768
  }
54807
54769
  lastError = result.error || "Unknown error";
54808
- await logStep2("Scheduled trigger execution failed", {
54770
+ await logStep("Scheduled trigger execution failed", {
54809
54771
  scheduledTriggerId,
54810
54772
  invocationId: invocation.id,
54811
54773
  attemptNumber,
@@ -54852,6 +54814,44 @@ var scheduledTriggerRunnerWorkflow = Object.assign(_scheduledTriggerRunnerWorkfl
54852
54814
  workflowId: "workflow//./src/domains/run/workflow/functions/scheduledTriggerRunner//_scheduledTriggerRunnerWorkflow"
54853
54815
  });
54854
54816
 
54817
+ // src/domains/evals/workflow/functions/evaluateConversation.ts
54818
+ var getConversationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getConversationStep");
54819
+ var getEvaluatorsStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getEvaluatorsStep");
54820
+ var executeEvaluatorStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep");
54821
+ var logStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//logStep");
54822
+ async function _evaluateConversationWorkflow(payload) {
54823
+ const { conversationId, evaluatorIds } = payload;
54824
+ await logStep2("Starting conversation evaluation", payload);
54825
+ const conversation = await getConversationStep(payload);
54826
+ const evaluators = await getEvaluatorsStep(payload);
54827
+ if (evaluators.length === 0) {
54828
+ await logStep2("No valid evaluators found", {
54829
+ conversationId,
54830
+ evaluatorIds
54831
+ });
54832
+ return {
54833
+ success: false,
54834
+ reason: "No valid evaluators"
54835
+ };
54836
+ }
54837
+ const results = [];
54838
+ for (const evaluator of evaluators) {
54839
+ const result = await executeEvaluatorStep(payload, evaluator.id, conversation);
54840
+ results.push(result);
54841
+ }
54842
+ return {
54843
+ success: true,
54844
+ conversationId,
54845
+ resultCount: results.length
54846
+ };
54847
+ }
54848
+ __name(_evaluateConversationWorkflow, "_evaluateConversationWorkflow");
54849
+ _evaluateConversationWorkflow.workflowId = "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow";
54850
+ globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow", _evaluateConversationWorkflow);
54851
+ var evaluateConversationWorkflow = Object.assign(_evaluateConversationWorkflow, {
54852
+ workflowId: "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow"
54853
+ });
54854
+
54855
54855
  // src/domains/evals/workflow/functions/runDatasetItem.ts
54856
54856
  var callChatApiStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//callChatApiStep");
54857
54857
  var createRelationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//createRelationStep");
@@ -54894,7 +54894,7 @@ globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/funct
54894
54894
  var runDatasetItemWorkflow = Object.assign(_runDatasetItemWorkflow, {
54895
54895
  workflowId: "workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow"
54896
54896
  });
54897
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21zQDIuMS4zL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdyt1dGlsc0A0LjEuMC1iZXRhLjExL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvdXRpbHMvc3JjL3RpbWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdytjb3JlQDQuMS4wLWJldGEuNTRfQGF3cy1zZGsrY2xpZW50LXN0c0AzLjk3MC4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUvc3JjL3N5bWJvbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdytjb3JlQDQuMS4wLWJldGEuNTRfQGF3cy1zZGsrY2xpZW50LXN0c0AzLjk3MC4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUvc3JjL3NsZWVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ad29ya2Zsb3crY29yZUA0LjEuMC1iZXRhLjU0X0Bhd3Mtc2RrK2NsaWVudC1zdHNAMy45NzAuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL3NyYy93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dvcmtmbG93QDQuMS4wLWJldGEuNTRfQGF3cy1zZGsrY2xpZW50LXN0c0AzLjk3MC4wX0BuZXN0anMrY29tbW9uQDExLjEuMTNfcmVmbGVjdC1tZXRhZF9mODUyODFmMjU4MGQ3MDY1ZmM1MTRlNjM3ZjVmNWUxZi9ub2RlX21vZHVsZXMvd29ya2Zsb3cvc3JjL3N0ZGxpYi50cyIsICJzcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLnRzIiwgInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci50cyIsICJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogSGVscGVycy5cbiAqLyB2YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgKyBKU09OLnN0cmluZ2lmeSh2YWwpKTtcbn07XG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqLyBmdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5cnMnOlxuICAgICAgICBjYXNlICd5cic6XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiB5O1xuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIHJldHVybiBuICogdztcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBkO1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdocnMnOlxuICAgICAgICBjYXNlICdocic6XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBoO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWlucyc6XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBtO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBzO1xuICAgICAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgIGNhc2UgJ21zZWNzJzpcbiAgICAgICAgY2FzZSAnbXNlYyc6XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovIGZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gICAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICAgIGlmIChtc0FicyA+PSBkKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBtKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gICAgfVxuICAgIHJldHVybiBtcyArICdtcyc7XG59XG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi8gZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICAgIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgICBpZiAobXNBYnMgPj0gZCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gaCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IG0pIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IHMpIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovIGZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwgIi8qKl9faW50ZXJuYWxfd29ya2Zsb3dze1wid29ya2Zsb3dzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLnRzXCI6e1wiX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24vL19ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93XCJ9fX0sXCJzdGVwc1wiOntcInNyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi50c1wiOntcImV4ZWN1dGVFdmFsdWF0b3JTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIn0sXCJnZXRDb252ZXJzYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwifSxcImdldEV2YWx1YXRvcnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0RXZhbHVhdG9yc1N0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwifX19fSovO1xudmFyIGdldENvbnZlcnNhdGlvblN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwiKTtcbnZhciBnZXRFdmFsdWF0b3JzU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9nZXRFdmFsdWF0b3JzU3RlcFwiKTtcbnZhciBleGVjdXRlRXZhbHVhdG9yU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTG9nIHdvcmtmbG93IHByb2dyZXNzXG4gKi8gdmFyIGxvZ1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwiKTtcbi8qKlxuICogTWFpbiB3b3JrZmxvdyBmdW5jdGlvbiAtIG9yY2hlc3RyYXRlcyB0aGUgZXZhbHVhdGlvbiBzdGVwcy5cbiAqXG4gKiBJTVBPUlRBTlQ6IFRoaXMgcnVucyBpbiBhIGRldGVybWluaXN0aWMgc2FuZGJveC5cbiAqIC0gRG8gTk9UIGNhbGwgTm9kZS5qcyBBUElzIGRpcmVjdGx5IGhlcmUgKG5vIERCLCBubyBmcywgZXRjLilcbiAqIC0gQWxsIHNpZGUgZWZmZWN0cyBtdXN0IGhhcHBlbiBpbiBzdGVwIGZ1bmN0aW9uc1xuICovIGFzeW5jIGZ1bmN0aW9uIF9ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGNvbnZlcnNhdGlvbklkLCBldmFsdWF0b3JJZHMgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgY29udmVyc2F0aW9uIGV2YWx1YXRpb24nLCBwYXlsb2FkKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25TdGVwKHBheWxvYWQpO1xuICAgIGNvbnN0IGV2YWx1YXRvcnMgPSBhd2FpdCBnZXRFdmFsdWF0b3JzU3RlcChwYXlsb2FkKTtcbiAgICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXdhaXQgbG9nU3RlcCgnTm8gdmFsaWQgZXZhbHVhdG9ycyBmb3VuZCcsIHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgZXZhbHVhdG9ySWRzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICByZWFzb246ICdObyB2YWxpZCBldmFsdWF0b3JzJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCBldmFsdWF0b3Igb2YgZXZhbHVhdG9ycyl7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVFdmFsdWF0b3JTdGVwKHBheWxvYWQsIGV2YWx1YXRvci5pZCwgY29udmVyc2F0aW9uKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICByZXN1bHRDb3VudDogcmVzdWx0cy5sZW5ndGhcbiAgICB9O1xufVxuX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIiwgX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdydcbn0pO1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIi8qKlxuICogU3RlcCBmdW5jdGlvbnMgZm9yIHNjaGVkdWxlZCB0cmlnZ2VyIHdvcmtmbG93LlxuICpcbiAqIFRoZXNlIHN0ZXAgZnVuY3Rpb25zIGhhdmUgZnVsbCBOb2RlLmpzIGFjY2VzcyBhbmQgaGFuZGxlIGFsbCBkYXRhYmFzZVxuICogb3BlcmF0aW9ucyBhbmQgZXh0ZXJuYWwgc2VydmljZSBjYWxscy5cbiAqLyAvKipfX2ludGVybmFsX3dvcmtmbG93c3tcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy50c1wiOntcImFkZENvbnZlcnNhdGlvbklkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIn0sXCJjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwifSxcImNoZWNrSW52b2NhdGlvbkNhbmNlbGxlZFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwifSxcImNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCJ9LFwiY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NvbXB1dGVTbGVlcER1cmF0aW9uU3RlcFwifSxcImNyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXBcIn0sXCJkZWxldGVQZW5kaW5nSW52b2NhdGlvbnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIn0sXCJleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCJ9LFwiZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9nZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwXCJ9LFwiaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2xvZ1N0ZXBcIn0sXCJtYXJrQ29tcGxldGVkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwifSxcIm1hcmtGYWlsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCJ9LFwibWFya1J1bm5pbmdTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtSdW5uaW5nU3RlcFwifX19fSovO1xuLyoqXG4gKiBTdGVwOiBMb2cgYSBtZXNzYWdlIChhbGxvd3MgbG9nZ2luZyBmcm9tIHdvcmtmbG93IGNvbnRleHQpXG4gKi8gZXhwb3J0IHZhciBsb2dTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDYWxjdWxhdGUgdGhlIG5leHQgZXhlY3V0aW9uIHRpbWUgcmVsYXRpdmUgdG8gYSBiYXNlIHRpbWUuXG4gKi8gZXhwb3J0IHZhciBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2FsY3VsYXRlTmV4dEV4ZWN1dGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENvbXB1dGUgc2xlZXAgZHVyYXRpb25cbiAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHRvIHNsZWVwLlxuICovIGV4cG9ydCB2YXIgY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jb21wdXRlU2xlZXBEdXJhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEdldCB0aGUgbmV4dCBwZW5kaW5nIGludm9jYXRpb24gdG8gZXhlY3V0ZSAoZWFybGllc3Qgc2NoZWR1bGVkRm9yKS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBwZW5kaW5nIGludm9jYXRpb25zIGV4aXN0LlxuICovIGV4cG9ydCB2YXIgZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiKTtcbi8qKlxuICogU3RlcDogRGVsZXRlIGFsbCBwZW5kaW5nIGludm9jYXRpb25zIGZvciBhIHRyaWdnZXIuXG4gKiBVc2VkIHdoZW4gY3JvbiBleHByZXNzaW9uIGNoYW5nZXMgb3IgdHJpZ2dlciBpcyBkaXNhYmxlZC5cbiAqLyBleHBvcnQgdmFyIGRlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENoZWNrIGlmIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZCBhbmQgdGhpcyBydW5uZXIgaXMgYXV0aG9yaXRhdGl2ZS5cbiAqLyBleHBvcnQgdmFyIGNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jaGVja1RyaWdnZXJFbmFibGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogVHJ5IHRvIGNyZWF0ZSBpbnZvY2F0aW9uIGlkZW1wb3RlbnRseS5cbiAqIFJldHVybnMgZXhpc3RpbmcgaW52b2NhdGlvbiBpZiBhbHJlYWR5IGNyZWF0ZWQuXG4gKi8gZXhwb3J0IHZhciBjcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiKTtcbi8qKlxuICogU3RlcDogQ2hlY2sgaWYgaW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBleGVjdXRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiBjYW5jZWxsZWQgKHNob3VsZCBza2lwIGV4ZWN1dGlvbiksIGZhbHNlIG90aGVyd2lzZVxuICovIGV4cG9ydCB2YXIgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIHJ1bm5pbmdcbiAqLyBleHBvcnQgdmFyIG1hcmtSdW5uaW5nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vbWFya1J1bm5pbmdTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBBZGQgYSBjb252ZXJzYXRpb24gSUQgdG8gdGhlIGludm9jYXRpb24ncyBjb252ZXJzYXRpb25JZHMgYXJyYXlcbiAqIENhbGxlZCBhZnRlciBlYWNoIGF0dGVtcHQgdG8gdHJhY2sgYWxsIGNvbnZlcnNhdGlvbnMgY3JlYXRlZCBkdXJpbmcgcmV0cmllc1xuICovIGV4cG9ydCB2YXIgYWRkQ29udmVyc2F0aW9uSWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IE1hcmsgaW52b2NhdGlvbiBhcyBjb21wbGV0ZWRcbiAqLyBleHBvcnQgdmFyIG1hcmtDb21wbGV0ZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIGZhaWxlZFxuICovIGV4cG9ydCB2YXIgbWFya0ZhaWxlZFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBJbmNyZW1lbnQgYXR0ZW1wdCBudW1iZXIgZm9yIHJldHJ5XG4gKi8gZXhwb3J0IHZhciBpbmNyZW1lbnRBdHRlbXB0U3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgdGhlIHNjaGVkdWxlZCB0cmlnZ2VyIHVzaW5nIGV4ZWN1dGVBZ2VudEFzeW5jLlxuICpcbiAqIFVzZXMgdGhlIHNoYXJlZCBleGVjdXRlQWdlbnRBc3luYyBmcm9tIFRyaWdnZXJTZXJ2aWNlIHdoaWNoIGluY2x1ZGVzXG4gKiBwcm9wZXIgdHJhY2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCBjb252ZXJzYXRpb24gbWFuYWdlbWVudC5cbiAqLyBleHBvcnQgdmFyIGV4ZWN1dGVTY2hlZHVsZWRUcmlnZ2VyU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCIpO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgc2NoZWR1bGVkIHRyaWdnZXJzLlxuICpcbiAqIFRoaXMgd29ya2Zsb3c6XG4gKiAxLiBHZXRzIG9yIGNyZWF0ZXMgdGhlIG5leHQgcGVuZGluZyBpbnZvY2F0aW9uXG4gKiAyLiBTbGVlcHMgdW50aWwgaXRzIHNjaGVkdWxlZCB0aW1lXG4gKiAzLiBDaGVja3MgaWYgdGhlIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZFxuICogNC4gRXhlY3V0ZXMgdGhlIGFnZW50IHdpdGggcmV0cmllc1xuICogNS4gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3BzIGJhY2sgdG8gc3RlcCAxXG4gKlxuICovIGltcG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEsIHNsZWVwIH0gZnJvbSAnd29ya2Zsb3cnO1xuaW1wb3J0IHsgYWRkQ29udmVyc2F0aW9uSWRTdGVwLCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCwgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCwgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAsIGNvbXB1dGVTbGVlcER1cmF0aW9uU3RlcCwgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwLCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAsIGdldE5leHRQZW5kaW5nSW52b2NhdGlvblN0ZXAsIGluY3JlbWVudEF0dGVtcHRTdGVwLCBsb2dTdGVwLCBtYXJrQ29tcGxldGVkU3RlcCwgbWFya0ZhaWxlZFN0ZXAsIG1hcmtSdW5uaW5nU3RlcCB9IGZyb20gJy4uL3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcyc7XG4vKipfX2ludGVybmFsX3dvcmtmbG93c3tcIndvcmtmbG93c1wiOntcInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci50c1wiOntcIl9zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIn19fX0qLztcbi8qKlxuICogR2VuZXJhdGUgaWRlbXBvdGVuY3kga2V5IGZvciBhIHNjaGVkdWxlZCBleGVjdXRpb24uXG4gKi8gZnVuY3Rpb24gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleShzY2hlZHVsZWRUcmlnZ2VySWQsIHNjaGVkdWxlZEZvcikge1xuICAgIHJldHVybiBgc2NoZWRfJHtzY2hlZHVsZWRUcmlnZ2VySWR9XyR7c2NoZWR1bGVkRm9yfWA7XG59XG4vKipcbiAqIE1haW4gd29ya2Zsb3cgZnVuY3Rpb24gLSBydW5zIGEgc2NoZWR1bGVkIHRyaWdnZXIuXG4gKiBGb3IgY3JvbiB0cmlnZ2VycywgdGhpcyBsb29wcyBpbmRlZmluaXRlbHkgdW50aWwgZGlzYWJsZWQvZGVsZXRlZC5cbiAqIEZvciBvbmUtdGltZSB0cmlnZ2VycywgaXQgZXhlY3V0ZXMgb25jZSBhbmQgY29tcGxldGVzLlxuICpcbiAqLyBhc3luYyBmdW5jdGlvbiBfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IHRlbmFudElkLCBwcm9qZWN0SWQsIGFnZW50SWQsIHNjaGVkdWxlZFRyaWdnZXJJZCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGdldFdvcmtmbG93TWV0YWRhdGEoKTtcbiAgICBjb25zdCBydW5uZXJJZCA9IG1ldGFkYXRhLndvcmtmbG93UnVuSWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgc2NoZWR1bGVkIHRyaWdnZXIgcnVubmVyIHdvcmtmbG93Jywge1xuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJvamVjdElkLFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgIHJ1bm5lcklkXG4gICAgfSk7XG4gICAgLy8gVHJhY2sgdGhlIGxhc3Qgc2NoZWR1bGVkIHRpbWUgZm9yIGNyb24gY2FsY3VsYXRpb25zXG4gICAgbGV0IGxhc3RTY2hlZHVsZWRGb3IgPSBudWxsO1xuICAgIC8vIE1haW4gZXhlY3V0aW9uIGxvb3BcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgICAgY29uc3QgZW5hYmxlZENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZW5hYmxlZENoZWNrLnNob3VsZENvbnRpbnVlIHx8ICFlbmFibGVkQ2hlY2sudHJpZ2dlcikge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgd29ya2Zsb3cgc3RvcHBpbmcnLCB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmlnZ2VyID0gZW5hYmxlZENoZWNrLnRyaWdnZXI7XG4gICAgICAgIGNvbnN0IGlzT25lVGltZSA9ICEhdHJpZ2dlci5ydW5BdDtcbiAgICAgICAgbGV0IGludm9jYXRpb24gPSBhd2FpdCBnZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ3JlYXRlIGludm9jYXRpb24gaWYgbm9uZSBleGlzdHNcbiAgICAgICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVkRm9yO1xuICAgICAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlci5ydW5BdCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdPbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246ICdvbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZEZvciA9IHRyaWdnZXIucnVuQXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIuY3JvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5leHRFeGVjdXRpb25UaW1lIH0gPSBhd2FpdCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCh7XG4gICAgICAgICAgICAgICAgICAgIGNyb25FeHByZXNzaW9uOiB0cmlnZ2VyLmNyb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICBjcm9uVGltZXpvbmU6IHRyaWdnZXIuY3JvblRpbWV6b25lLFxuICAgICAgICAgICAgICAgICAgICBsYXN0U2NoZWR1bGVkRm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yID0gbmV4dEV4ZWN1dGlvblRpbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgbWlzc2luZyBib3RoIGNyb25FeHByZXNzaW9uIGFuZCBydW5BdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246ICd0cmlnZ2VyIG1pc3NpbmcgY3JvbkV4cHJlc3Npb24gYW5kIHJ1bkF0J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZGVtcG90ZW5jeUtleSA9IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoc2NoZWR1bGVkVHJpZ2dlcklkLCBzY2hlZHVsZWRGb3IpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwKHtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGlkZW1wb3RlbmN5S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludm9jYXRpb24gPSByZXN1bHQuaW52b2NhdGlvbjtcbiAgICAgICAgICAgIC8vIEZvciBvbmUtdGltZSB0cmlnZ2VycywgY2hlY2sgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgICAgIGlmIChpc09uZVRpbWUgJiYgcmVzdWx0LmFscmVhZHlFeGlzdHMgJiYgaW52b2NhdGlvbi5zdGF0dXMgIT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ09uZS10aW1lIHRyaWdnZXIgYWxyZWFkeSBleGVjdXRlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogaW52b2NhdGlvbi5zdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdhbHJlYWR5X2V4ZWN1dGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBsb2dTdGVwKCdHb3QgbmV4dCBwZW5kaW5nIGludm9jYXRpb24nLCB7XG4gICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICBzY2hlZHVsZWRGb3I6IGludm9jYXRpb24uc2NoZWR1bGVkRm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LiBTbGVlcCB1bnRpbCB0aGUgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lXG4gICAgICAgIGNvbnN0IHNsZWVwTXMgPSBhd2FpdCBjb21wdXRlU2xlZXBEdXJhdGlvblN0ZXAoaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IpO1xuICAgICAgICBhd2FpdCBsb2dTdGVwKCdTbGVlcGluZyB1bnRpbCBzY2hlZHVsZWQgdGltZScsIHtcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZEZvcjogaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IsXG4gICAgICAgICAgICBzbGVlcE1zXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzbGVlcChzbGVlcE1zKTtcbiAgICAgICAgLy8gNS4gUmUtY2hlY2sgaWYgdHJpZ2dlciBpcyBzdGlsbCBlbmFibGVkIGFmdGVyIHNsZWVwXG4gICAgICAgIGNvbnN0IHBvc3RTbGVlcENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcG9zdFNsZWVwQ2hlY2suc2hvdWxkQ29udGludWUgfHwgIXBvc3RTbGVlcENoZWNrLnRyaWdnZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgZGlzYWJsZWQvZGVsZXRlZCBkdXJpbmcgc2xlZXAsIHN0b3BwaW5nJywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICByZWFzb246IHBvc3RTbGVlcENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogcG9zdFNsZWVwQ2hlY2sucmVhc29uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZnJlc2ggdHJpZ2dlciBjb25maWcgKG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHNsZWVwKVxuICAgICAgICBjb25zdCBjdXJyZW50VHJpZ2dlciA9IHBvc3RTbGVlcENoZWNrLnRyaWdnZXI7XG4gICAgICAgIC8vIDYuIENoZWNrIGlmIGludm9jYXRpb24gd2FzIGNhbmNlbGxlZCBkdXJpbmcgc2xlZXBcbiAgICAgICAgY29uc3QgY2FuY2VsQ2hlY2sgPSBhd2FpdCBjaGVja0ludm9jYXRpb25DYW5jZWxsZWRTdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNhbmNlbENoZWNrLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkLCBza2lwcGluZyB0byBuZXh0Jywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4gRXhlY3V0ZSB3aXRoIHJldHJpZXNcbiAgICAgICAgbGV0IGF0dGVtcHROdW1iZXIgPSBpbnZvY2F0aW9uLmF0dGVtcHROdW1iZXI7XG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IGN1cnJlbnRUcmlnZ2VyLm1heFJldHJpZXMgKyAxO1xuICAgICAgICB3aGlsZShhdHRlbXB0TnVtYmVyIDw9IG1heEF0dGVtcHRzKXtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FuY2VsID0gYXdhaXQgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmV0cnlDYW5jZWwuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiBjYW5jZWxsZWQgZHVyaW5nIHJldHJ5IGxvb3AnLCB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYXJrIGFzIHJ1bm5pbmdcbiAgICAgICAgICAgIGF3YWl0IG1hcmtSdW5uaW5nU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiBjdXJyZW50VHJpZ2dlci5tZXNzYWdlVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogY3VycmVudFRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBjdXJyZW50VHJpZ2dlci50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICAgICAgICBydW5Bc1VzZXJJZDogY3VycmVudFRyaWdnZXIucnVuQXNVc2VySWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2F2ZSBjb252ZXJzYXRpb24gSUQgaW1tZWRpYXRlbHkgYWZ0ZXIgZWFjaCBhdHRlbXB0XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkQ29udmVyc2F0aW9uSWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiByZXN1bHQuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IG1hcmtDb21wbGV0ZWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdTY2hlZHVsZWQgdHJpZ2dlciBleGVjdXRpb24gY29tcGxldGVkJywge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgZXhlY3V0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkLFxuICAgICAgICAgICAgICAgIGF0dGVtcHROdW1iZXIsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGxhc3RFcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXR0ZW1wdE51bWJlciA8IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaW5jcmVtZW50QXR0ZW1wdFN0ZXAoe1xuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEF0dGVtcHQ6IGF0dGVtcHROdW1iZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhdHRlbXB0TnVtYmVyKys7XG4gICAgICAgICAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5yYW5kb20oKSAqIDAuMztcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChjdXJyZW50VHJpZ2dlci5yZXRyeURlbGF5U2Vjb25kcyAqIDEwMDAgKiAoMSArIGppdHRlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGFzIGZhaWxlZCBpZiBhbGwgcmV0cmllcyBleGhhdXN0ZWRcbiAgICAgICAgaWYgKGxhc3RFcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgbWFya0ZhaWxlZFN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIHRoaXMgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lIGZvciBuZXh0IGNyb24gY2FsY3VsYXRpb25cbiAgICAgICAgbGFzdFNjaGVkdWxlZEZvciA9IGludm9jYXRpb24uc2NoZWR1bGVkRm9yO1xuICAgICAgICAvLyBGb3Igb25lLXRpbWUgdHJpZ2dlcnMsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGxhc3RFcnJvciA/ICdmYWlsZWQnIDogJ2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgLy8gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3AgY29udGludWVzIHRvIGNyZWF0ZS9nZXQgbmV4dCBpbnZvY2F0aW9uXG4gICAgfVxufVxuX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIiwgX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdyk7XG4vLyBFeHBvcnQgd2l0aCB3b3JrZmxvd0lkIGZvciB0aGUgYnVpbGQgc3lzdGVtXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93ID0gT2JqZWN0LmFzc2lnbihfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93LCB7XG4gICAgd29ya2Zsb3dJZDogJ3dvcmtmbG93Ly8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci8vX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdydcbn0pO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgZGF0YXNldCBpdGVtcyB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqXG4gKiBUaGlzIG1ha2VzIGRhdGFzZXQgcnVuIHByb2Nlc3NpbmcgZmlyZS1hbmQtZm9yZ2V0IC0gZWFjaCBpdGVtIGlzIHF1ZXVlZFxuICogaW5kZXBlbmRlbnRseSBhbmQgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSB3b3JrZmxvdyBzeXN0ZW0uXG4gKi8gLyoqX19pbnRlcm5hbF93b3JrZmxvd3N7XCJ3b3JrZmxvd3NcIjp7XCJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHNcIjp7XCJfcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIn19fSxcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLnRzXCI6e1wiY2FsbENoYXRBcGlTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCJ9LFwiY3JlYXRlUmVsYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY3JlYXRlUmVsYXRpb25TdGVwXCJ9LFwiZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwifSxcImxvZ1N0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCJ9fX19Ki87XG4vKipcbiAqIFN0ZXA6IENhbGwgdGhlIGNoYXQgQVBJIHRvIHByb2Nlc3MgdGhlIGRhdGFzZXQgaXRlbVxuICovIHZhciBjYWxsQ2hhdEFwaVN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDcmVhdGUgY29udmVyc2F0aW9uIHJlbGF0aW9uIGluIGRhdGFiYXNlXG4gKi8gdmFyIGNyZWF0ZVJlbGF0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9jcmVhdGVSZWxhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgYSBzaW5nbGUgZXZhbHVhdG9yIG9uIGEgY29udmVyc2F0aW9uXG4gKi8gdmFyIGV4ZWN1dGVFdmFsdWF0b3JTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0vL2V4ZWN1dGVFdmFsdWF0b3JTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBMb2cgd29ya2Zsb3cgcHJvZ3Jlc3NcbiAqLyB2YXIgbG9nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBNYWluIHdvcmtmbG93IGZ1bmN0aW9uIC0gcHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGFzZXQgaXRlbSB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqIE9wdGlvbmFsbHkgcnVucyBldmFsdWF0b3JzIG9uIHRoZSByZXN1bHRpbmcgY29udmVyc2F0aW9uLlxuICovIGFzeW5jIGZ1bmN0aW9uIF9ydW5EYXRhc2V0SXRlbVdvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGRhdGFzZXRJdGVtSWQsIGRhdGFzZXRSdW5JZCwgYWdlbnRJZCwgZXZhbHVhdG9ySWRzLCBldmFsdWF0aW9uUnVuSWQgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgZGF0YXNldCBpdGVtIHByb2Nlc3NpbmcnLCB7XG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgaGFzRXZhbHVhdG9yczogISEoZXZhbHVhdG9ySWRzICYmIGV2YWx1YXRvcklkcy5sZW5ndGggPiAwKVxuICAgIH0pO1xuICAgIC8vIENhbGwgY2hhdCBBUElcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsQ2hhdEFwaVN0ZXAocGF5bG9hZCk7XG4gICAgLy8gQ3JlYXRlIHJlbGF0aW9uIGlmIHdlIGdvdCBhIGNvbnZlcnNhdGlvblxuICAgIGlmIChyZXN1bHQuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlUmVsYXRpb25TdGVwKHBheWxvYWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCk7XG4gICAgICAgIC8vIFJ1biBldmFsdWF0aW9ucyBpZiBjb25maWd1cmVkXG4gICAgICAgIGlmIChldmFsdWF0b3JJZHMgJiYgZXZhbHVhdG9ySWRzLmxlbmd0aCA+IDAgJiYgZXZhbHVhdGlvblJ1bklkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2YWx1YXRvcklkIG9mIGV2YWx1YXRvcklkcyl7XG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUV2YWx1YXRvclN0ZXAocGF5bG9hZC50ZW5hbnRJZCwgcGF5bG9hZC5wcm9qZWN0SWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCwgZXZhbHVhdG9ySWQsIGV2YWx1YXRpb25SdW5JZCwgcGF5bG9hZC5kYXRhc2V0SXRlbUV4cGVjdGVkT3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ05vIGNvbnZlcnNhdGlvbiBjcmVhdGVkJywge1xuICAgICAgICAgICAgZGF0YXNldEl0ZW1JZCxcbiAgICAgICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsXG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZCB8fCBudWxsLFxuICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yIHx8IG51bGxcbiAgICB9O1xufVxuX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIiwgX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdydcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxxRUFBQUEsU0FBQTtBQUFBO0FBRUksUUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQUNaLFFBQUksSUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQWFSLElBQUFBLFFBQU8sVUFBVSxTQUFTLEtBQUssU0FBUztBQUN4QyxnQkFBVSxXQUFXLENBQUM7QUFDdEIsVUFBSSxPQUFPLE9BQU87QUFDbEIsVUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTLEdBQUc7QUFDckMsZUFBTyxNQUFNLEdBQUc7QUFBQSxNQUNwQixXQUFXLFNBQVMsWUFBWSxTQUFTLEdBQUcsR0FBRztBQUMzQyxlQUFPLFFBQVEsT0FBTyxRQUFRLEdBQUcsSUFBSSxTQUFTLEdBQUc7QUFBQSxNQUNyRDtBQUNBLFlBQU0sSUFBSSxNQUFNLDBEQUEwRCxLQUFLLFVBQVUsR0FBRyxDQUFDO0FBQUEsSUFDakc7QUFPSSxhQUFTLE1BQU0sS0FBSztBQUNwQixZQUFNLE9BQU8sR0FBRztBQUNoQixVQUFJLElBQUksU0FBUyxLQUFLO0FBQ2xCO0FBQUEsTUFDSjtBQUNBLFVBQUksUUFBUSxtSUFBbUksS0FBSyxHQUFHO0FBQ3ZKLFVBQUksQ0FBQyxPQUFPO0FBQ1I7QUFBQSxNQUNKO0FBQ0EsVUFBSSxJQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDM0IsVUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLE1BQU0sWUFBWTtBQUMxQyxjQUFPLE1BQUs7QUFBQSxRQUNSLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDRCxpQkFBTyxJQUFJO0FBQUEsUUFDZixLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0QsaUJBQU8sSUFBSTtBQUFBLFFBQ2YsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNELGlCQUFPLElBQUk7QUFBQSxRQUNmLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDRCxpQkFBTyxJQUFJO0FBQUEsUUFDZixLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0QsaUJBQU8sSUFBSTtBQUFBLFFBQ2YsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNELGlCQUFPLElBQUk7QUFBQSxRQUNmLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDRCxpQkFBTztBQUFBLFFBQ1g7QUFDSSxpQkFBTztBQUFBLE1BQ2Y7QUFBQSxJQUNKO0FBckRhO0FBNERULGFBQVMsU0FBU0MsS0FBSTtBQUN0QixVQUFJLFFBQVEsS0FBSyxJQUFJQSxHQUFFO0FBQ3ZCLFVBQUksU0FBUyxHQUFHO0FBQ1osZUFBTyxLQUFLLE1BQU1BLE1BQUssQ0FBQyxJQUFJO0FBQUEsTUFDaEM7QUFDQSxVQUFJLFNBQVMsR0FBRztBQUNaLGVBQU8sS0FBSyxNQUFNQSxNQUFLLENBQUMsSUFBSTtBQUFBLE1BQ2hDO0FBQ0EsVUFBSSxTQUFTLEdBQUc7QUFDWixlQUFPLEtBQUssTUFBTUEsTUFBSyxDQUFDLElBQUk7QUFBQSxNQUNoQztBQUNBLFVBQUksU0FBUyxHQUFHO0FBQ1osZUFBTyxLQUFLLE1BQU1BLE1BQUssQ0FBQyxJQUFJO0FBQUEsTUFDaEM7QUFDQSxhQUFPQSxNQUFLO0FBQUEsSUFDaEI7QUFmYTtBQXNCVCxhQUFTLFFBQVFBLEtBQUk7QUFDckIsVUFBSSxRQUFRLEtBQUssSUFBSUEsR0FBRTtBQUN2QixVQUFJLFNBQVMsR0FBRztBQUNaLGVBQU8sT0FBT0EsS0FBSSxPQUFPLEdBQUcsS0FBSztBQUFBLE1BQ3JDO0FBQ0EsVUFBSSxTQUFTLEdBQUc7QUFDWixlQUFPLE9BQU9BLEtBQUksT0FBTyxHQUFHLE1BQU07QUFBQSxNQUN0QztBQUNBLFVBQUksU0FBUyxHQUFHO0FBQ1osZUFBTyxPQUFPQSxLQUFJLE9BQU8sR0FBRyxRQUFRO0FBQUEsTUFDeEM7QUFDQSxVQUFJLFNBQVMsR0FBRztBQUNaLGVBQU8sT0FBT0EsS0FBSSxPQUFPLEdBQUcsUUFBUTtBQUFBLE1BQ3hDO0FBQ0EsYUFBT0EsTUFBSztBQUFBLElBQ2hCO0FBZmE7QUFrQlQsYUFBUyxPQUFPQSxLQUFJLE9BQU8sR0FBRyxNQUFNO0FBQ3BDLFVBQUksV0FBVyxTQUFTLElBQUk7QUFDNUIsYUFBTyxLQUFLLE1BQU1BLE1BQUssQ0FBQyxJQUFJLE1BQU0sUUFBUSxXQUFXLE1BQU07QUFBQSxJQUMvRDtBQUhhO0FBQUE7QUFBQTs7O0FDdkliLElBQUksc0JBQXNCLFdBQVcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsd0ZBQXdGO0FBQzlKLElBQUksb0JBQW9CLFdBQVcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsc0ZBQXNGO0FBQzFKLElBQUksdUJBQXVCLFdBQVcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUseUZBQXlGO0FBRzVKLElBQUksVUFBVSxXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDRFQUE0RTtBQU90SSxlQUFlLDhCQUE4QixTQUFTO0FBQ3RELFFBQU0sRUFBRSxnQkFBZ0IsYUFBYSxJQUFJO0FBQ3pDLFFBQU0sUUFBUSxvQ0FBb0MsT0FBTztBQUN6RCxRQUFNLGVBQWUsTUFBTSxvQkFBb0IsT0FBTztBQUN0RCxRQUFNLGFBQWEsTUFBTSxrQkFBa0IsT0FBTztBQUNsRCxNQUFJLFdBQVcsV0FBVyxHQUFHO0FBQ3pCLFVBQU0sUUFBUSw2QkFBNkI7QUFBQSxNQUN2QztBQUFBLE1BQ0E7QUFBQSxJQUNKLENBQUM7QUFDRCxXQUFPO0FBQUEsTUFDSCxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsSUFDWjtBQUFBLEVBQ0o7QUFDQSxRQUFNLFVBQVUsQ0FBQztBQUNqQixhQUFXLGFBQWEsWUFBVztBQUMvQixVQUFNLFNBQVMsTUFBTSxxQkFBcUIsU0FBUyxVQUFVLElBQUksWUFBWTtBQUM3RSxZQUFRLEtBQUssTUFBTTtBQUFBLEVBQ3ZCO0FBQ0EsU0FBTztBQUFBLElBQ0gsU0FBUztBQUFBLElBQ1Q7QUFBQSxJQUNBLGFBQWEsUUFBUTtBQUFBLEVBQ3pCO0FBQ0o7QUF6Qm1CO0FBMEJuQiw4QkFBOEIsYUFBYTtBQUMzQyxXQUFXLG9CQUFvQixJQUFJLHdHQUF3Ryw2QkFBNkI7QUFFakssSUFBTSwrQkFBK0IsT0FBTyxPQUFPLCtCQUErQjtBQUFBLEVBQ3JGLFlBQVk7QUFDaEIsQ0FBQzs7O0FDM0NELGdCQUFlOzs7QUNEUixJQUFNLG9CQUFvQixPQUFPLElBQUksbUJBQW1CO0FBQ3hELElBQU0sdUJBQXVCLE9BQU8sSUFBSSxzQkFBc0I7QUFDOUQsSUFBTSxpQkFBaUIsT0FBTyxJQUFJLGdCQUFnQjtBQUNsRCxJQUFNLG1CQUFtQixPQUFPLElBQUksa0JBQWtCO0FBQ3RELElBQU0seUJBQXlCLE9BQU8sSUFBSSx3QkFBd0I7QUFDbEUsSUFBTSxjQUFjLE9BQU8sSUFBSSxzQkFBc0I7QUFDckQsSUFBTSxxQkFBcUIsT0FBTyxJQUFJLHNCQUFzQjtBQUM1RCxJQUFNLHFCQUFxQixPQUFPLElBQUksc0JBQXNCO0FBQzVELElBQU0sbUJBQW1CLE9BQU8sSUFBSSxXQUFXO0FBQy9DLElBQU0sNEJBQTRCLE9BQU8sSUFDOUMsMkJBQTJCO0FBTTFCLElBQUEsMEJBQUEsT0FBQSxJQUFBLHlCQUFBOzs7QUNxQkgsZUFBc0IsTUFBTSxPQUFrQztBQUU1RCxRQUFNLFVBQVcsV0FBbUIsY0FBYztBQUNsRCxNQUFJLENBQUMsU0FBUztBQUNaLFVBQU0sSUFBSSxNQUFNLHlEQUF5RDtFQUMzRTtBQUNBLFNBQU8sUUFBUSxLQUFLO0FBQ3RCO0FBUHNCOzs7QUNwQmYsSUFBTSwwQkFBdUIsdUJBQUEsSUFBQSxrQkFBQTtBQUNsQyxTQUFnQixzQkFBVztBQUczQixRQUFBLE1BQUEsV0FBQSx1QkFBQTtBQUNBLE1BQUEsQ0FBQSxLQUFTO0FBQ0wsVUFBTSxJQUFDLE1BQUEsK0VBQUE7O0FBSVgsU0FBQzs7QUFUZTs7O0FDTmYsSUFBQSxRQUFBLFdBQUEsT0FBQSxJQUFBLG1CQUFBLENBQUEsRUFBQSxxQ0FBQTs7O0FDSlEsSUFBSUMsV0FBVSxXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLHVFQUF1RTtBQUdqSSxJQUFJLDZCQUE2QixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDBGQUEwRjtBQUl2SyxJQUFJLDJCQUEyQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLHdGQUF3RjtBQUluSyxJQUFJLCtCQUErQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDRGQUE0RjtBQUkzSyxJQUFJLCtCQUErQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDRGQUE0RjtBQUczSyxJQUFJLDBCQUEwQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLHVGQUF1RjtBQUlqSyxJQUFJLGlDQUFpQyxXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDhGQUE4RjtBQUkvSyxJQUFJLCtCQUErQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDRGQUE0RjtBQUczSyxJQUFJLGtCQUFrQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLCtFQUErRTtBQUlqSixJQUFJLHdCQUF3QixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLHFGQUFxRjtBQUc3SixJQUFJLG9CQUFvQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLGlGQUFpRjtBQUdySixJQUFJLGlCQUFpQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDhFQUE4RTtBQUcvSSxJQUFJLHVCQUF1QixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLG9GQUFvRjtBQU0zSixJQUFJLDhCQUE4QixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDJGQUEyRjs7O0FDekNoTCxTQUFTLHVCQUF1QixvQkFBb0IsY0FBYztBQUNsRSxTQUFPLFNBQVMsa0JBQWtCLElBQUksWUFBWTtBQUN0RDtBQUZhO0FBUVQsZUFBZSxnQ0FBZ0MsU0FBUztBQUN4RCxRQUFNLEVBQUUsVUFBVSxXQUFXLFNBQVMsbUJBQW1CLElBQUk7QUFDN0QsUUFBTSxXQUFXLG9CQUFvQjtBQUNyQyxRQUFNLFdBQVcsU0FBUztBQUMxQixRQUFNQyxTQUFRLDhDQUE4QztBQUFBLElBQ3hEO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0osQ0FBQztBQUVELE1BQUksbUJBQW1CO0FBRXZCLFNBQU0sTUFBSztBQUNQLFVBQU0sZUFBZSxNQUFNLHdCQUF3QjtBQUFBLE1BQy9DO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0osQ0FBQztBQUNELFFBQUksQ0FBQyxhQUFhLGtCQUFrQixDQUFDLGFBQWEsU0FBUztBQUN2RCxZQUFNQSxTQUFRLHVDQUF1QztBQUFBLFFBQ2pEO0FBQUEsUUFDQSxRQUFRLGFBQWE7QUFBQSxNQUN6QixDQUFDO0FBQ0QsYUFBTztBQUFBLFFBQ0gsUUFBUTtBQUFBLFFBQ1IsUUFBUSxhQUFhO0FBQUEsTUFDekI7QUFBQSxJQUNKO0FBQ0EsVUFBTSxVQUFVLGFBQWE7QUFDN0IsVUFBTSxZQUFZLENBQUMsQ0FBQyxRQUFRO0FBQzVCLFFBQUksYUFBYSxNQUFNLDZCQUE2QjtBQUFBLE1BQ2hEO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSixDQUFDO0FBRUQsUUFBSSxDQUFDLFlBQVk7QUFDYixVQUFJO0FBQ0osVUFBSSxXQUFXO0FBQ1gsWUFBSSxDQUFDLFFBQVEsT0FBTztBQUNoQixnQkFBTUEsU0FBUSxrQ0FBa0M7QUFBQSxZQUM1QztBQUFBLFVBQ0osQ0FBQztBQUNELGlCQUFPO0FBQUEsWUFDSCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsVUFDWjtBQUFBLFFBQ0o7QUFDQSx1QkFBZSxRQUFRO0FBQUEsTUFDM0IsV0FBVyxRQUFRLGdCQUFnQjtBQUMvQixjQUFNLEVBQUUsa0JBQWtCLElBQUksTUFBTSwyQkFBMkI7QUFBQSxVQUMzRCxnQkFBZ0IsUUFBUTtBQUFBLFVBQ3hCLGNBQWMsUUFBUTtBQUFBLFVBQ3RCO0FBQUEsUUFDSixDQUFDO0FBQ0QsdUJBQWU7QUFBQSxNQUNuQixPQUFPO0FBQ0gsY0FBTUEsU0FBUSxpREFBaUQ7QUFBQSxVQUMzRDtBQUFBLFFBQ0osQ0FBQztBQUNELGVBQU87QUFBQSxVQUNILFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxRQUNaO0FBQUEsTUFDSjtBQUNBLFlBQU0saUJBQWlCLHVCQUF1QixvQkFBb0IsWUFBWTtBQUM5RSxZQUFNLFNBQVMsTUFBTSwrQkFBK0I7QUFBQSxRQUNoRDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQVMsUUFBUSxXQUFXO0FBQUEsUUFDNUI7QUFBQSxNQUNKLENBQUM7QUFDRCxtQkFBYSxPQUFPO0FBRXBCLFVBQUksYUFBYSxPQUFPLGlCQUFpQixXQUFXLFdBQVcsV0FBVztBQUN0RSxjQUFNQSxTQUFRLHFDQUFxQztBQUFBLFVBQy9DO0FBQUEsVUFDQSxjQUFjLFdBQVc7QUFBQSxVQUN6QixRQUFRLFdBQVc7QUFBQSxRQUN2QixDQUFDO0FBQ0QsZUFBTztBQUFBLFVBQ0gsUUFBUTtBQUFBLFVBQ1IsY0FBYyxXQUFXO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUNBLFVBQU1BLFNBQVEsK0JBQStCO0FBQUEsTUFDekM7QUFBQSxNQUNBLGNBQWMsV0FBVztBQUFBLE1BQ3pCLGNBQWMsV0FBVztBQUFBLElBQzdCLENBQUM7QUFFRCxVQUFNLFVBQVUsTUFBTSx5QkFBeUIsV0FBVyxZQUFZO0FBQ3RFLFVBQU1BLFNBQVEsaUNBQWlDO0FBQUEsTUFDM0M7QUFBQSxNQUNBLGNBQWMsV0FBVztBQUFBLE1BQ3pCLGNBQWMsV0FBVztBQUFBLE1BQ3pCO0FBQUEsSUFDSixDQUFDO0FBQ0QsVUFBTSxNQUFNLE9BQU87QUFFbkIsVUFBTSxpQkFBaUIsTUFBTSx3QkFBd0I7QUFBQSxNQUNqRDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNKLENBQUM7QUFDRCxRQUFJLENBQUMsZUFBZSxrQkFBa0IsQ0FBQyxlQUFlLFNBQVM7QUFDM0QsWUFBTUEsU0FBUSxtREFBbUQ7QUFBQSxRQUM3RDtBQUFBLFFBQ0EsUUFBUSxlQUFlO0FBQUEsTUFDM0IsQ0FBQztBQUNELGFBQU87QUFBQSxRQUNILFFBQVE7QUFBQSxRQUNSLFFBQVEsZUFBZTtBQUFBLE1BQzNCO0FBQUEsSUFDSjtBQUVBLFVBQU0saUJBQWlCLGVBQWU7QUFFdEMsVUFBTSxjQUFjLE1BQU0sNkJBQTZCO0FBQUEsTUFDbkQ7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLGNBQWMsV0FBVztBQUFBLElBQzdCLENBQUM7QUFDRCxRQUFJLFlBQVksV0FBVztBQUN2QixZQUFNQSxTQUFRLDhDQUE4QztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxjQUFjLFdBQVc7QUFBQSxNQUM3QixDQUFDO0FBQ0Q7QUFBQSxJQUNKO0FBRUEsUUFBSSxnQkFBZ0IsV0FBVztBQUMvQixRQUFJLFlBQVk7QUFDaEIsVUFBTSxjQUFjLGVBQWUsYUFBYTtBQUNoRCxXQUFNLGlCQUFpQixhQUFZO0FBQy9CLFlBQU0sY0FBYyxNQUFNLDZCQUE2QjtBQUFBLFFBQ25EO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxjQUFjLFdBQVc7QUFBQSxNQUM3QixDQUFDO0FBQ0QsVUFBSSxZQUFZLFdBQVc7QUFDdkIsY0FBTUEsU0FBUSwwQ0FBMEM7QUFBQSxVQUNwRDtBQUFBLFVBQ0EsY0FBYyxXQUFXO0FBQUEsUUFDN0IsQ0FBQztBQUNEO0FBQUEsTUFDSjtBQUVBLFlBQU0sZ0JBQWdCO0FBQUEsUUFDbEI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGNBQWMsV0FBVztBQUFBLE1BQzdCLENBQUM7QUFDRCxZQUFNLFNBQVMsTUFBTSw0QkFBNEI7QUFBQSxRQUM3QztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsY0FBYyxXQUFXO0FBQUEsUUFDekIsaUJBQWlCLGVBQWU7QUFBQSxRQUNoQyxTQUFTLGVBQWUsV0FBVztBQUFBLFFBQ25DLGdCQUFnQixlQUFlO0FBQUEsUUFDL0IsYUFBYSxlQUFlO0FBQUEsTUFDaEMsQ0FBQztBQUVELFVBQUksT0FBTyxnQkFBZ0I7QUFDdkIsY0FBTSxzQkFBc0I7QUFBQSxVQUN4QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsY0FBYyxXQUFXO0FBQUEsVUFDekIsZ0JBQWdCLE9BQU87QUFBQSxRQUMzQixDQUFDO0FBQUEsTUFDTDtBQUNBLFVBQUksT0FBTyxTQUFTO0FBQ2hCLGNBQU0sa0JBQWtCO0FBQUEsVUFDcEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLGNBQWMsV0FBVztBQUFBLFFBQzdCLENBQUM7QUFDRCxjQUFNQSxTQUFRLHlDQUF5QztBQUFBLFVBQ25EO0FBQUEsVUFDQSxjQUFjLFdBQVc7QUFBQSxVQUN6QixnQkFBZ0IsT0FBTztBQUFBLFFBQzNCLENBQUM7QUFDRCxvQkFBWTtBQUNaO0FBQUEsTUFDSjtBQUNBLGtCQUFZLE9BQU8sU0FBUztBQUM1QixZQUFNQSxTQUFRLHNDQUFzQztBQUFBLFFBQ2hEO0FBQUEsUUFDQSxjQUFjLFdBQVc7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsT0FBTztBQUFBLE1BQ1gsQ0FBQztBQUNELFVBQUksZ0JBQWdCLGFBQWE7QUFDN0IsY0FBTSxxQkFBcUI7QUFBQSxVQUN2QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsY0FBYyxXQUFXO0FBQUEsVUFDekIsZ0JBQWdCO0FBQUEsUUFDcEIsQ0FBQztBQUNEO0FBQ0EsY0FBTSxTQUFTLEtBQUssT0FBTyxJQUFJO0FBQy9CLGNBQU0sTUFBTSxlQUFlLG9CQUFvQixPQUFRLElBQUksT0FBTztBQUFBLE1BQ3RFLE9BQU87QUFDSDtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsUUFBSSxXQUFXO0FBQ1gsWUFBTSxlQUFlO0FBQUEsUUFDakI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGNBQWMsV0FBVztBQUFBLE1BQzdCLENBQUM7QUFBQSxJQUNMO0FBRUEsdUJBQW1CLFdBQVc7QUFFOUIsUUFBSSxXQUFXO0FBQ1gsYUFBTztBQUFBLFFBQ0gsUUFBUSxZQUFZLFdBQVc7QUFBQSxRQUMvQixjQUFjLFdBQVc7QUFBQSxNQUM3QjtBQUFBLElBQ0o7QUFBQSxFQUVKO0FBQ0o7QUE1UG1CO0FBNlBuQixnQ0FBZ0MsYUFBYTtBQUM3QyxXQUFXLG9CQUFvQixJQUFJLDBHQUEwRywrQkFBK0I7QUFFckssSUFBTSxpQ0FBaUMsT0FBTyxPQUFPLGlDQUFpQztBQUFBLEVBQ3pGLFlBQVk7QUFDaEIsQ0FBQzs7O0FDalJHLElBQUksa0JBQWtCLFdBQVcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsOEVBQThFO0FBR2hKLElBQUkscUJBQXFCLFdBQVcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsaUZBQWlGO0FBR3RKLElBQUlDLHdCQUF1QixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLG1GQUFtRjtBQUcxSixJQUFJQyxXQUFVLFdBQVcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsc0VBQXNFO0FBSWhJLGVBQWUsd0JBQXdCLFNBQVM7QUFDaEQsUUFBTSxFQUFFLGVBQWUsY0FBYyxTQUFTLGNBQWMsZ0JBQWdCLElBQUk7QUFDaEYsUUFBTUEsU0FBUSxvQ0FBb0M7QUFBQSxJQUM5QztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxlQUFlLENBQUMsRUFBRSxnQkFBZ0IsYUFBYSxTQUFTO0FBQUEsRUFDNUQsQ0FBQztBQUVELFFBQU0sU0FBUyxNQUFNLGdCQUFnQixPQUFPO0FBRTVDLE1BQUksT0FBTyxnQkFBZ0I7QUFDdkIsVUFBTSxtQkFBbUIsU0FBUyxPQUFPLGNBQWM7QUFFdkQsUUFBSSxnQkFBZ0IsYUFBYSxTQUFTLEtBQUssaUJBQWlCO0FBQzVELGlCQUFXLGVBQWUsY0FBYTtBQUNuQyxjQUFNRCxzQkFBcUIsUUFBUSxVQUFVLFFBQVEsV0FBVyxPQUFPLGdCQUFnQixhQUFhLGlCQUFpQixRQUFRLHlCQUF5QjtBQUFBLE1BQzFKO0FBQUEsSUFDSjtBQUFBLEVBQ0osT0FBTztBQUNILFVBQU1DLFNBQVEsMkJBQTJCO0FBQUEsTUFDckM7QUFBQSxNQUNBO0FBQUEsTUFDQSxPQUFPLE9BQU87QUFBQSxJQUNsQixDQUFDO0FBQUEsRUFDTDtBQUNBLFNBQU87QUFBQSxJQUNILFNBQVMsQ0FBQyxPQUFPO0FBQUEsSUFDakI7QUFBQSxJQUNBO0FBQUEsSUFDQSxnQkFBZ0IsT0FBTyxrQkFBa0I7QUFBQSxJQUN6QyxPQUFPLE9BQU8sU0FBUztBQUFBLEVBQzNCO0FBQ0o7QUFqQ21CO0FBa0NuQix3QkFBd0IsYUFBYTtBQUNyQyxXQUFXLG9CQUFvQixJQUFJLDRGQUE0Rix1QkFBdUI7QUFFL0ksSUFBTSx5QkFBeUIsT0FBTyxPQUFPLHlCQUF5QjtBQUFBLEVBQ3pFLFlBQVk7QUFDaEIsQ0FBQzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1zIiwgImxvZ1N0ZXAiLCAibG9nU3RlcCIsICJleGVjdXRlRXZhbHVhdG9yU3RlcCIsICJsb2dTdGVwIl0KfQo=
54897
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21zQDIuMS4zL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHdvcmtmbG93K3V0aWxzQDQuMS4wLWJldGEuMTEvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy91dGlscy9zcmMvdGltZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHdvcmtmbG93K2NvcmVANC4xLjAtYmV0YS41NF9AYXdzLXNkaytjbGllbnQtc3RzQDMuOTcwLjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9zcmMvc3ltYm9scy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHdvcmtmbG93K2NvcmVANC4xLjAtYmV0YS41NF9AYXdzLXNkaytjbGllbnQtc3RzQDMuOTcwLjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9zcmMvc2xlZXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdytjb3JlQDQuMS4wLWJldGEuNTRfQGF3cy1zZGsrY2xpZW50LXN0c0AzLjk3MC4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUvc3JjL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vd29ya2Zsb3dANC4xLjAtYmV0YS41NF9AYXdzLXNkaytjbGllbnQtc3RzQDMuOTcwLjBfQG5lc3Rqcytjb21tb25AMTEuMS4xM19yZWZsZWN0LW1ldGFkX2Y4NTI4MWYyNTgwZDcwNjVmYzUxNGU2MzdmNWY1ZTFmL25vZGVfbW9kdWxlcy93b3JrZmxvdy9zcmMvc3RkbGliLnRzIiwgInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMudHMiLCAic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L2Z1bmN0aW9ucy9zY2hlZHVsZWRUcmlnZ2VyUnVubmVyLnRzIiwgInNyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi50cyIsICJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogSGVscGVycy5cbiAqLyB2YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgKyBKU09OLnN0cmluZ2lmeSh2YWwpKTtcbn07XG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqLyBmdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5cnMnOlxuICAgICAgICBjYXNlICd5cic6XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiB5O1xuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIHJldHVybiBuICogdztcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBkO1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdocnMnOlxuICAgICAgICBjYXNlICdocic6XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBoO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWlucyc6XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBtO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBzO1xuICAgICAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgIGNhc2UgJ21zZWNzJzpcbiAgICAgICAgY2FzZSAnbXNlYyc6XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovIGZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gICAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICAgIGlmIChtc0FicyA+PSBkKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBtKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gICAgfVxuICAgIHJldHVybiBtcyArICdtcyc7XG59XG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi8gZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICAgIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgICBpZiAobXNBYnMgPj0gZCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gaCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IG0pIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IHMpIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovIGZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIi8qKlxuICogU3RlcCBmdW5jdGlvbnMgZm9yIHNjaGVkdWxlZCB0cmlnZ2VyIHdvcmtmbG93LlxuICpcbiAqIFRoZXNlIHN0ZXAgZnVuY3Rpb25zIGhhdmUgZnVsbCBOb2RlLmpzIGFjY2VzcyBhbmQgaGFuZGxlIGFsbCBkYXRhYmFzZVxuICogb3BlcmF0aW9ucyBhbmQgZXh0ZXJuYWwgc2VydmljZSBjYWxscy5cbiAqLyAvKipfX2ludGVybmFsX3dvcmtmbG93c3tcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy50c1wiOntcImFkZENvbnZlcnNhdGlvbklkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIn0sXCJjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwifSxcImNoZWNrSW52b2NhdGlvbkNhbmNlbGxlZFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwifSxcImNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCJ9LFwiY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NvbXB1dGVTbGVlcER1cmF0aW9uU3RlcFwifSxcImNyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXBcIn0sXCJkZWxldGVQZW5kaW5nSW52b2NhdGlvbnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIn0sXCJleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCJ9LFwiZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9nZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwXCJ9LFwiaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2xvZ1N0ZXBcIn0sXCJtYXJrQ29tcGxldGVkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwifSxcIm1hcmtGYWlsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCJ9LFwibWFya1J1bm5pbmdTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtSdW5uaW5nU3RlcFwifX19fSovO1xuLyoqXG4gKiBTdGVwOiBMb2cgYSBtZXNzYWdlIChhbGxvd3MgbG9nZ2luZyBmcm9tIHdvcmtmbG93IGNvbnRleHQpXG4gKi8gZXhwb3J0IHZhciBsb2dTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDYWxjdWxhdGUgdGhlIG5leHQgZXhlY3V0aW9uIHRpbWUgcmVsYXRpdmUgdG8gYSBiYXNlIHRpbWUuXG4gKi8gZXhwb3J0IHZhciBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2FsY3VsYXRlTmV4dEV4ZWN1dGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENvbXB1dGUgc2xlZXAgZHVyYXRpb25cbiAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHRvIHNsZWVwLlxuICovIGV4cG9ydCB2YXIgY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jb21wdXRlU2xlZXBEdXJhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEdldCB0aGUgbmV4dCBwZW5kaW5nIGludm9jYXRpb24gdG8gZXhlY3V0ZSAoZWFybGllc3Qgc2NoZWR1bGVkRm9yKS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBwZW5kaW5nIGludm9jYXRpb25zIGV4aXN0LlxuICovIGV4cG9ydCB2YXIgZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiKTtcbi8qKlxuICogU3RlcDogRGVsZXRlIGFsbCBwZW5kaW5nIGludm9jYXRpb25zIGZvciBhIHRyaWdnZXIuXG4gKiBVc2VkIHdoZW4gY3JvbiBleHByZXNzaW9uIGNoYW5nZXMgb3IgdHJpZ2dlciBpcyBkaXNhYmxlZC5cbiAqLyBleHBvcnQgdmFyIGRlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENoZWNrIGlmIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZCBhbmQgdGhpcyBydW5uZXIgaXMgYXV0aG9yaXRhdGl2ZS5cbiAqLyBleHBvcnQgdmFyIGNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jaGVja1RyaWdnZXJFbmFibGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogVHJ5IHRvIGNyZWF0ZSBpbnZvY2F0aW9uIGlkZW1wb3RlbnRseS5cbiAqIFJldHVybnMgZXhpc3RpbmcgaW52b2NhdGlvbiBpZiBhbHJlYWR5IGNyZWF0ZWQuXG4gKi8gZXhwb3J0IHZhciBjcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiKTtcbi8qKlxuICogU3RlcDogQ2hlY2sgaWYgaW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBleGVjdXRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiBjYW5jZWxsZWQgKHNob3VsZCBza2lwIGV4ZWN1dGlvbiksIGZhbHNlIG90aGVyd2lzZVxuICovIGV4cG9ydCB2YXIgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIHJ1bm5pbmdcbiAqLyBleHBvcnQgdmFyIG1hcmtSdW5uaW5nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vbWFya1J1bm5pbmdTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBBZGQgYSBjb252ZXJzYXRpb24gSUQgdG8gdGhlIGludm9jYXRpb24ncyBjb252ZXJzYXRpb25JZHMgYXJyYXlcbiAqIENhbGxlZCBhZnRlciBlYWNoIGF0dGVtcHQgdG8gdHJhY2sgYWxsIGNvbnZlcnNhdGlvbnMgY3JlYXRlZCBkdXJpbmcgcmV0cmllc1xuICovIGV4cG9ydCB2YXIgYWRkQ29udmVyc2F0aW9uSWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IE1hcmsgaW52b2NhdGlvbiBhcyBjb21wbGV0ZWRcbiAqLyBleHBvcnQgdmFyIG1hcmtDb21wbGV0ZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIGZhaWxlZFxuICovIGV4cG9ydCB2YXIgbWFya0ZhaWxlZFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBJbmNyZW1lbnQgYXR0ZW1wdCBudW1iZXIgZm9yIHJldHJ5XG4gKi8gZXhwb3J0IHZhciBpbmNyZW1lbnRBdHRlbXB0U3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgdGhlIHNjaGVkdWxlZCB0cmlnZ2VyIHVzaW5nIGV4ZWN1dGVBZ2VudEFzeW5jLlxuICpcbiAqIFVzZXMgdGhlIHNoYXJlZCBleGVjdXRlQWdlbnRBc3luYyBmcm9tIFRyaWdnZXJTZXJ2aWNlIHdoaWNoIGluY2x1ZGVzXG4gKiBwcm9wZXIgdHJhY2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCBjb252ZXJzYXRpb24gbWFuYWdlbWVudC5cbiAqLyBleHBvcnQgdmFyIGV4ZWN1dGVTY2hlZHVsZWRUcmlnZ2VyU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCIpO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgc2NoZWR1bGVkIHRyaWdnZXJzLlxuICpcbiAqIFRoaXMgd29ya2Zsb3c6XG4gKiAxLiBHZXRzIG9yIGNyZWF0ZXMgdGhlIG5leHQgcGVuZGluZyBpbnZvY2F0aW9uXG4gKiAyLiBTbGVlcHMgdW50aWwgaXRzIHNjaGVkdWxlZCB0aW1lXG4gKiAzLiBDaGVja3MgaWYgdGhlIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZFxuICogNC4gRXhlY3V0ZXMgdGhlIGFnZW50IHdpdGggcmV0cmllc1xuICogNS4gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3BzIGJhY2sgdG8gc3RlcCAxXG4gKlxuICovIGltcG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEsIHNsZWVwIH0gZnJvbSAnd29ya2Zsb3cnO1xuaW1wb3J0IHsgYWRkQ29udmVyc2F0aW9uSWRTdGVwLCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCwgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCwgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAsIGNvbXB1dGVTbGVlcER1cmF0aW9uU3RlcCwgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwLCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAsIGdldE5leHRQZW5kaW5nSW52b2NhdGlvblN0ZXAsIGluY3JlbWVudEF0dGVtcHRTdGVwLCBsb2dTdGVwLCBtYXJrQ29tcGxldGVkU3RlcCwgbWFya0ZhaWxlZFN0ZXAsIG1hcmtSdW5uaW5nU3RlcCB9IGZyb20gJy4uL3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcyc7XG4vKipfX2ludGVybmFsX3dvcmtmbG93c3tcIndvcmtmbG93c1wiOntcInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci50c1wiOntcIl9zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIn19fX0qLztcbi8qKlxuICogR2VuZXJhdGUgaWRlbXBvdGVuY3kga2V5IGZvciBhIHNjaGVkdWxlZCBleGVjdXRpb24uXG4gKi8gZnVuY3Rpb24gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleShzY2hlZHVsZWRUcmlnZ2VySWQsIHNjaGVkdWxlZEZvcikge1xuICAgIHJldHVybiBgc2NoZWRfJHtzY2hlZHVsZWRUcmlnZ2VySWR9XyR7c2NoZWR1bGVkRm9yfWA7XG59XG4vKipcbiAqIE1haW4gd29ya2Zsb3cgZnVuY3Rpb24gLSBydW5zIGEgc2NoZWR1bGVkIHRyaWdnZXIuXG4gKiBGb3IgY3JvbiB0cmlnZ2VycywgdGhpcyBsb29wcyBpbmRlZmluaXRlbHkgdW50aWwgZGlzYWJsZWQvZGVsZXRlZC5cbiAqIEZvciBvbmUtdGltZSB0cmlnZ2VycywgaXQgZXhlY3V0ZXMgb25jZSBhbmQgY29tcGxldGVzLlxuICpcbiAqLyBhc3luYyBmdW5jdGlvbiBfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IHRlbmFudElkLCBwcm9qZWN0SWQsIGFnZW50SWQsIHNjaGVkdWxlZFRyaWdnZXJJZCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGdldFdvcmtmbG93TWV0YWRhdGEoKTtcbiAgICBjb25zdCBydW5uZXJJZCA9IG1ldGFkYXRhLndvcmtmbG93UnVuSWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgc2NoZWR1bGVkIHRyaWdnZXIgcnVubmVyIHdvcmtmbG93Jywge1xuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJvamVjdElkLFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgIHJ1bm5lcklkXG4gICAgfSk7XG4gICAgLy8gVHJhY2sgdGhlIGxhc3Qgc2NoZWR1bGVkIHRpbWUgZm9yIGNyb24gY2FsY3VsYXRpb25zXG4gICAgbGV0IGxhc3RTY2hlZHVsZWRGb3IgPSBudWxsO1xuICAgIC8vIE1haW4gZXhlY3V0aW9uIGxvb3BcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgICAgY29uc3QgZW5hYmxlZENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZW5hYmxlZENoZWNrLnNob3VsZENvbnRpbnVlIHx8ICFlbmFibGVkQ2hlY2sudHJpZ2dlcikge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgd29ya2Zsb3cgc3RvcHBpbmcnLCB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmlnZ2VyID0gZW5hYmxlZENoZWNrLnRyaWdnZXI7XG4gICAgICAgIGNvbnN0IGlzT25lVGltZSA9ICEhdHJpZ2dlci5ydW5BdDtcbiAgICAgICAgbGV0IGludm9jYXRpb24gPSBhd2FpdCBnZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ3JlYXRlIGludm9jYXRpb24gaWYgbm9uZSBleGlzdHNcbiAgICAgICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVkRm9yO1xuICAgICAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlci5ydW5BdCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdPbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246ICdvbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZEZvciA9IHRyaWdnZXIucnVuQXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIuY3JvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5leHRFeGVjdXRpb25UaW1lIH0gPSBhd2FpdCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCh7XG4gICAgICAgICAgICAgICAgICAgIGNyb25FeHByZXNzaW9uOiB0cmlnZ2VyLmNyb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICBjcm9uVGltZXpvbmU6IHRyaWdnZXIuY3JvblRpbWV6b25lLFxuICAgICAgICAgICAgICAgICAgICBsYXN0U2NoZWR1bGVkRm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yID0gbmV4dEV4ZWN1dGlvblRpbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgbWlzc2luZyBib3RoIGNyb25FeHByZXNzaW9uIGFuZCBydW5BdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246ICd0cmlnZ2VyIG1pc3NpbmcgY3JvbkV4cHJlc3Npb24gYW5kIHJ1bkF0J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZGVtcG90ZW5jeUtleSA9IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoc2NoZWR1bGVkVHJpZ2dlcklkLCBzY2hlZHVsZWRGb3IpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwKHtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGlkZW1wb3RlbmN5S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludm9jYXRpb24gPSByZXN1bHQuaW52b2NhdGlvbjtcbiAgICAgICAgICAgIC8vIEZvciBvbmUtdGltZSB0cmlnZ2VycywgY2hlY2sgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgICAgIGlmIChpc09uZVRpbWUgJiYgcmVzdWx0LmFscmVhZHlFeGlzdHMgJiYgaW52b2NhdGlvbi5zdGF0dXMgIT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ09uZS10aW1lIHRyaWdnZXIgYWxyZWFkeSBleGVjdXRlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogaW52b2NhdGlvbi5zdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdhbHJlYWR5X2V4ZWN1dGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBsb2dTdGVwKCdHb3QgbmV4dCBwZW5kaW5nIGludm9jYXRpb24nLCB7XG4gICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICBzY2hlZHVsZWRGb3I6IGludm9jYXRpb24uc2NoZWR1bGVkRm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LiBTbGVlcCB1bnRpbCB0aGUgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lXG4gICAgICAgIGNvbnN0IHNsZWVwTXMgPSBhd2FpdCBjb21wdXRlU2xlZXBEdXJhdGlvblN0ZXAoaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IpO1xuICAgICAgICBhd2FpdCBsb2dTdGVwKCdTbGVlcGluZyB1bnRpbCBzY2hlZHVsZWQgdGltZScsIHtcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZEZvcjogaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IsXG4gICAgICAgICAgICBzbGVlcE1zXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzbGVlcChzbGVlcE1zKTtcbiAgICAgICAgLy8gNS4gUmUtY2hlY2sgaWYgdHJpZ2dlciBpcyBzdGlsbCBlbmFibGVkIGFmdGVyIHNsZWVwXG4gICAgICAgIGNvbnN0IHBvc3RTbGVlcENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcG9zdFNsZWVwQ2hlY2suc2hvdWxkQ29udGludWUgfHwgIXBvc3RTbGVlcENoZWNrLnRyaWdnZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgZGlzYWJsZWQvZGVsZXRlZCBkdXJpbmcgc2xlZXAsIHN0b3BwaW5nJywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICByZWFzb246IHBvc3RTbGVlcENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogcG9zdFNsZWVwQ2hlY2sucmVhc29uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZnJlc2ggdHJpZ2dlciBjb25maWcgKG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHNsZWVwKVxuICAgICAgICBjb25zdCBjdXJyZW50VHJpZ2dlciA9IHBvc3RTbGVlcENoZWNrLnRyaWdnZXI7XG4gICAgICAgIC8vIDYuIENoZWNrIGlmIGludm9jYXRpb24gd2FzIGNhbmNlbGxlZCBkdXJpbmcgc2xlZXBcbiAgICAgICAgY29uc3QgY2FuY2VsQ2hlY2sgPSBhd2FpdCBjaGVja0ludm9jYXRpb25DYW5jZWxsZWRTdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNhbmNlbENoZWNrLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkLCBza2lwcGluZyB0byBuZXh0Jywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4gRXhlY3V0ZSB3aXRoIHJldHJpZXNcbiAgICAgICAgbGV0IGF0dGVtcHROdW1iZXIgPSBpbnZvY2F0aW9uLmF0dGVtcHROdW1iZXI7XG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IGN1cnJlbnRUcmlnZ2VyLm1heFJldHJpZXMgKyAxO1xuICAgICAgICB3aGlsZShhdHRlbXB0TnVtYmVyIDw9IG1heEF0dGVtcHRzKXtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FuY2VsID0gYXdhaXQgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmV0cnlDYW5jZWwuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiBjYW5jZWxsZWQgZHVyaW5nIHJldHJ5IGxvb3AnLCB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYXJrIGFzIHJ1bm5pbmdcbiAgICAgICAgICAgIGF3YWl0IG1hcmtSdW5uaW5nU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiBjdXJyZW50VHJpZ2dlci5tZXNzYWdlVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogY3VycmVudFRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBjdXJyZW50VHJpZ2dlci50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICAgICAgICBydW5Bc1VzZXJJZDogY3VycmVudFRyaWdnZXIucnVuQXNVc2VySWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2F2ZSBjb252ZXJzYXRpb24gSUQgaW1tZWRpYXRlbHkgYWZ0ZXIgZWFjaCBhdHRlbXB0XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkQ29udmVyc2F0aW9uSWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiByZXN1bHQuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IG1hcmtDb21wbGV0ZWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdTY2hlZHVsZWQgdHJpZ2dlciBleGVjdXRpb24gY29tcGxldGVkJywge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgZXhlY3V0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkLFxuICAgICAgICAgICAgICAgIGF0dGVtcHROdW1iZXIsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGxhc3RFcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXR0ZW1wdE51bWJlciA8IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaW5jcmVtZW50QXR0ZW1wdFN0ZXAoe1xuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEF0dGVtcHQ6IGF0dGVtcHROdW1iZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhdHRlbXB0TnVtYmVyKys7XG4gICAgICAgICAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5yYW5kb20oKSAqIDAuMztcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChjdXJyZW50VHJpZ2dlci5yZXRyeURlbGF5U2Vjb25kcyAqIDEwMDAgKiAoMSArIGppdHRlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGFzIGZhaWxlZCBpZiBhbGwgcmV0cmllcyBleGhhdXN0ZWRcbiAgICAgICAgaWYgKGxhc3RFcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgbWFya0ZhaWxlZFN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIHRoaXMgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lIGZvciBuZXh0IGNyb24gY2FsY3VsYXRpb25cbiAgICAgICAgbGFzdFNjaGVkdWxlZEZvciA9IGludm9jYXRpb24uc2NoZWR1bGVkRm9yO1xuICAgICAgICAvLyBGb3Igb25lLXRpbWUgdHJpZ2dlcnMsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGxhc3RFcnJvciA/ICdmYWlsZWQnIDogJ2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgLy8gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3AgY29udGludWVzIHRvIGNyZWF0ZS9nZXQgbmV4dCBpbnZvY2F0aW9uXG4gICAgfVxufVxuX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIiwgX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdyk7XG4vLyBFeHBvcnQgd2l0aCB3b3JrZmxvd0lkIGZvciB0aGUgYnVpbGQgc3lzdGVtXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93ID0gT2JqZWN0LmFzc2lnbihfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93LCB7XG4gICAgd29ya2Zsb3dJZDogJ3dvcmtmbG93Ly8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci8vX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdydcbn0pO1xuIiwgIi8qKl9faW50ZXJuYWxfd29ya2Zsb3dze1wid29ya2Zsb3dzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLnRzXCI6e1wiX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24vL19ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93XCJ9fX0sXCJzdGVwc1wiOntcInNyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi50c1wiOntcImV4ZWN1dGVFdmFsdWF0b3JTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIn0sXCJnZXRDb252ZXJzYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwifSxcImdldEV2YWx1YXRvcnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0RXZhbHVhdG9yc1N0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwifX19fSovO1xudmFyIGdldENvbnZlcnNhdGlvblN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwiKTtcbnZhciBnZXRFdmFsdWF0b3JzU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9nZXRFdmFsdWF0b3JzU3RlcFwiKTtcbnZhciBleGVjdXRlRXZhbHVhdG9yU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTG9nIHdvcmtmbG93IHByb2dyZXNzXG4gKi8gdmFyIGxvZ1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwiKTtcbi8qKlxuICogTWFpbiB3b3JrZmxvdyBmdW5jdGlvbiAtIG9yY2hlc3RyYXRlcyB0aGUgZXZhbHVhdGlvbiBzdGVwcy5cbiAqXG4gKiBJTVBPUlRBTlQ6IFRoaXMgcnVucyBpbiBhIGRldGVybWluaXN0aWMgc2FuZGJveC5cbiAqIC0gRG8gTk9UIGNhbGwgTm9kZS5qcyBBUElzIGRpcmVjdGx5IGhlcmUgKG5vIERCLCBubyBmcywgZXRjLilcbiAqIC0gQWxsIHNpZGUgZWZmZWN0cyBtdXN0IGhhcHBlbiBpbiBzdGVwIGZ1bmN0aW9uc1xuICovIGFzeW5jIGZ1bmN0aW9uIF9ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGNvbnZlcnNhdGlvbklkLCBldmFsdWF0b3JJZHMgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgY29udmVyc2F0aW9uIGV2YWx1YXRpb24nLCBwYXlsb2FkKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25TdGVwKHBheWxvYWQpO1xuICAgIGNvbnN0IGV2YWx1YXRvcnMgPSBhd2FpdCBnZXRFdmFsdWF0b3JzU3RlcChwYXlsb2FkKTtcbiAgICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXdhaXQgbG9nU3RlcCgnTm8gdmFsaWQgZXZhbHVhdG9ycyBmb3VuZCcsIHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgZXZhbHVhdG9ySWRzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICByZWFzb246ICdObyB2YWxpZCBldmFsdWF0b3JzJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCBldmFsdWF0b3Igb2YgZXZhbHVhdG9ycyl7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVFdmFsdWF0b3JTdGVwKHBheWxvYWQsIGV2YWx1YXRvci5pZCwgY29udmVyc2F0aW9uKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICByZXN1bHRDb3VudDogcmVzdWx0cy5sZW5ndGhcbiAgICB9O1xufVxuX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIiwgX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdydcbn0pO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgZGF0YXNldCBpdGVtcyB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqXG4gKiBUaGlzIG1ha2VzIGRhdGFzZXQgcnVuIHByb2Nlc3NpbmcgZmlyZS1hbmQtZm9yZ2V0IC0gZWFjaCBpdGVtIGlzIHF1ZXVlZFxuICogaW5kZXBlbmRlbnRseSBhbmQgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSB3b3JrZmxvdyBzeXN0ZW0uXG4gKi8gLyoqX19pbnRlcm5hbF93b3JrZmxvd3N7XCJ3b3JrZmxvd3NcIjp7XCJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHNcIjp7XCJfcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIn19fSxcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLnRzXCI6e1wiY2FsbENoYXRBcGlTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCJ9LFwiY3JlYXRlUmVsYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY3JlYXRlUmVsYXRpb25TdGVwXCJ9LFwiZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwifSxcImxvZ1N0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCJ9fX19Ki87XG4vKipcbiAqIFN0ZXA6IENhbGwgdGhlIGNoYXQgQVBJIHRvIHByb2Nlc3MgdGhlIGRhdGFzZXQgaXRlbVxuICovIHZhciBjYWxsQ2hhdEFwaVN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDcmVhdGUgY29udmVyc2F0aW9uIHJlbGF0aW9uIGluIGRhdGFiYXNlXG4gKi8gdmFyIGNyZWF0ZVJlbGF0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9jcmVhdGVSZWxhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgYSBzaW5nbGUgZXZhbHVhdG9yIG9uIGEgY29udmVyc2F0aW9uXG4gKi8gdmFyIGV4ZWN1dGVFdmFsdWF0b3JTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0vL2V4ZWN1dGVFdmFsdWF0b3JTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBMb2cgd29ya2Zsb3cgcHJvZ3Jlc3NcbiAqLyB2YXIgbG9nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBNYWluIHdvcmtmbG93IGZ1bmN0aW9uIC0gcHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGFzZXQgaXRlbSB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqIE9wdGlvbmFsbHkgcnVucyBldmFsdWF0b3JzIG9uIHRoZSByZXN1bHRpbmcgY29udmVyc2F0aW9uLlxuICovIGFzeW5jIGZ1bmN0aW9uIF9ydW5EYXRhc2V0SXRlbVdvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGRhdGFzZXRJdGVtSWQsIGRhdGFzZXRSdW5JZCwgYWdlbnRJZCwgZXZhbHVhdG9ySWRzLCBldmFsdWF0aW9uUnVuSWQgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgZGF0YXNldCBpdGVtIHByb2Nlc3NpbmcnLCB7XG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgaGFzRXZhbHVhdG9yczogISEoZXZhbHVhdG9ySWRzICYmIGV2YWx1YXRvcklkcy5sZW5ndGggPiAwKVxuICAgIH0pO1xuICAgIC8vIENhbGwgY2hhdCBBUElcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsQ2hhdEFwaVN0ZXAocGF5bG9hZCk7XG4gICAgLy8gQ3JlYXRlIHJlbGF0aW9uIGlmIHdlIGdvdCBhIGNvbnZlcnNhdGlvblxuICAgIGlmIChyZXN1bHQuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlUmVsYXRpb25TdGVwKHBheWxvYWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCk7XG4gICAgICAgIC8vIFJ1biBldmFsdWF0aW9ucyBpZiBjb25maWd1cmVkXG4gICAgICAgIGlmIChldmFsdWF0b3JJZHMgJiYgZXZhbHVhdG9ySWRzLmxlbmd0aCA+IDAgJiYgZXZhbHVhdGlvblJ1bklkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2YWx1YXRvcklkIG9mIGV2YWx1YXRvcklkcyl7XG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUV2YWx1YXRvclN0ZXAocGF5bG9hZC50ZW5hbnRJZCwgcGF5bG9hZC5wcm9qZWN0SWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCwgZXZhbHVhdG9ySWQsIGV2YWx1YXRpb25SdW5JZCwgcGF5bG9hZC5kYXRhc2V0SXRlbUV4cGVjdGVkT3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ05vIGNvbnZlcnNhdGlvbiBjcmVhdGVkJywge1xuICAgICAgICAgICAgZGF0YXNldEl0ZW1JZCxcbiAgICAgICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsXG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZCB8fCBudWxsLFxuICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yIHx8IG51bGxcbiAgICB9O1xufVxuX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIiwgX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdydcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxxRUFBQUEsU0FBQTtBQUFBO0FBRUksUUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQUNaLFFBQUksSUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQWFSLElBQUFBLFFBQU8sVUFBVSxTQUFTLEtBQUssU0FBUztBQUN4QyxnQkFBVSxXQUFXLENBQUM7QUFDdEIsVUFBSSxPQUFPLE9BQU87QUFDbEIsVUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTLEdBQUc7QUFDckMsZUFBTyxNQUFNLEdBQUc7QUFBQSxNQUNwQixXQUFXLFNBQVMsWUFBWSxTQUFTLEdBQUcsR0FBRztBQUMzQyxlQUFPLFFBQVEsT0FBTyxRQUFRLEdBQUcsSUFBSSxTQUFTLEdBQUc7QUFB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LFdBQVcsb0JBQW9CLElBQUksd0dBQXdHLDZCQUE2QjtBQUVqSyxJQUFNLCtCQUErQixPQUFPLE9BQU8sK0JBQStCO0FBQUEsRUFDckYsWUFBWTtBQUNoQixDQUFDOzs7QUNwQ0csSUFBSSxrQkFBa0IsV0FBVyxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSw4RUFBOEU7QUFHaEosSUFBSSxxQkFBcUIsV0FBVyxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSxpRkFBaUY7QUFHdEosSUFBSUMsd0JBQXVCLFdBQVcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsbUZBQW1GO0FBRzFKLElBQUlDLFdBQVUsV0FBVyxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSxzRUFBc0U7QUFJaEksZUFBZSx3QkFBd0IsU0FBUztBQUNoRCxRQUFNLEVBQUUsZUFBZSxjQUFjLFNBQVMsY0FBYyxnQkFBZ0IsSUFBSTtBQUNoRixRQUFNQSxTQUFRLG9DQUFvQztBQUFBLElBQzlDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsQ0FBQyxFQUFFLGdCQUFnQixhQUFhLFNBQVM7QUFBQSxFQUM1RCxDQUFDO0FBRUQsUUFBTSxTQUFTLE1BQU0sZ0JBQWdCLE9BQU87QUFFNUMsTUFBSSxPQUFPLGdCQUFnQjtBQUN2QixVQUFNLG1CQUFtQixTQUFTLE9BQU8sY0FBYztBQUV2RCxRQUFJLGdCQUFnQixhQUFhLFNBQVMsS0FBSyxpQkFBaUI7QUFDNUQsaUJBQVcsZUFBZSxjQUFhO0FBQ25DLGNBQU1ELHNCQUFxQixRQUFRLFVBQVUsUUFBUSxXQUFXLE9BQU8sZ0JBQWdCLGFBQWEsaUJBQWlCLFFBQVEseUJBQXlCO0FBQUEsTUFDMUo7QUFBQSxJQUNKO0FBQUEsRUFDSixPQUFPO0FBQ0gsVUFBTUMsU0FBUSwyQkFBMkI7QUFBQSxNQUNyQztBQUFBLE1BQ0E7QUFBQSxNQUNBLE9BQU8sT0FBTztBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNMO0FBQ0EsU0FBTztBQUFBLElBQ0gsU0FBUyxDQUFDLE9BQU87QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBLGdCQUFnQixPQUFPLGtCQUFrQjtBQUFBLElBQ3pDLE9BQU8sT0FBTyxTQUFTO0FBQUEsRUFDM0I7QUFDSjtBQWpDbUI7QUFrQ25CLHdCQUF3QixhQUFhO0FBQ3JDLFdBQVcsb0JBQW9CLElBQUksNEZBQTRGLHVCQUF1QjtBQUUvSSxJQUFNLHlCQUF5QixPQUFPLE9BQU8seUJBQXlCO0FBQUEsRUFDekUsWUFBWTtBQUNoQixDQUFDOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibXMiLCAibG9nU3RlcCIsICJleGVjdXRlRXZhbHVhdG9yU3RlcCIsICJsb2dTdGVwIl0KfQo=
54898
54898
  `;
54899
54899
  var POST = workflowEntrypoint(workflowCode);
54900
54900
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "workflowFiles": [
3
- "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts",
4
3
  "/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts",
4
+ "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts",
5
5
  "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/runDatasetItem.ts"
6
6
  ],
7
7
  "serdeOnlyFiles": []
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "version": "1.0.0",
3
3
  "steps": {
4
+ "node_modules/.pnpm/workflow@4.1.0-beta.54_@aws-sdk+client-sts@3.970.0_@nestjs+common@11.1.13_reflect-metad_f85281f2580d7065fc514e637f5f5e1f/node_modules/workflow/dist/stdlib.js": {
5
+ "fetch": {
6
+ "stepId": "step//workflow@4.1.0-beta.54//fetch"
7
+ }
8
+ },
4
9
  "node_modules/.pnpm/workflow@4.1.0-beta.54_@aws-sdk+client-sts@3.970.0_@nestjs+common@11.1.13_reflect-metad_f85281f2580d7065fc514e637f5f5e1f/node_modules/workflow/dist/internal/builtins.js": {
5
10
  "__builtin_response_array_buffer": {
6
11
  "stepId": "__builtin_response_array_buffer"
@@ -12,11 +17,6 @@
12
17
  "stepId": "__builtin_response_text"
13
18
  }
14
19
  },
15
- "node_modules/.pnpm/workflow@4.1.0-beta.54_@aws-sdk+client-sts@3.970.0_@nestjs+common@11.1.13_reflect-metad_f85281f2580d7065fc514e637f5f5e1f/node_modules/workflow/dist/stdlib.js": {
16
- "fetch": {
17
- "stepId": "step//workflow@4.1.0-beta.54//fetch"
18
- }
19
- },
20
20
  "src/domains/evals/workflow/functions/evaluateConversation.ts": {
21
21
  "executeEvaluatorStep": {
22
22
  "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep"
@@ -6,8 +6,8 @@
6
6
  "/home/runner/work/agents/agents/node_modules/.pnpm/workflow@4.1.0-beta.54_@aws-sdk+client-sts@3.970.0_@nestjs+common@11.1.13_reflect-metad_f85281f2580d7065fc514e637f5f5e1f/node_modules/workflow/dist/stdlib.js"
7
7
  ],
8
8
  "workflowFiles": [
9
- "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts",
10
9
  "/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts",
10
+ "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts",
11
11
  "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/runDatasetItem.ts"
12
12
  ],
13
13
  "serdeOnlyFiles": []
@@ -1,6 +1,6 @@
1
- import * as _inkeep_agents_core2 from "@inkeep/agents-core";
1
+ import * as _inkeep_agents_core0 from "@inkeep/agents-core";
2
2
 
3
3
  //#region src/data/db/manageDbClient.d.ts
4
- declare const manageDbClient: _inkeep_agents_core2.AgentsManageDatabaseClient;
4
+ declare const manageDbClient: _inkeep_agents_core0.AgentsManageDatabaseClient;
5
5
  //#endregion
6
6
  export { manageDbClient as default };
@@ -1,6 +1,6 @@
1
- import * as _inkeep_agents_core3 from "@inkeep/agents-core";
1
+ import * as _inkeep_agents_core2 from "@inkeep/agents-core";
2
2
 
3
3
  //#region src/data/db/runDbClient.d.ts
4
- declare const runDbClient: _inkeep_agents_core3.AgentsRunDatabaseClient;
4
+ declare const runDbClient: _inkeep_agents_core2.AgentsRunDatabaseClient;
5
5
  //#endregion
6
6
  export { runDbClient as default };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono5 from "hono";
2
+ import * as hono4 from "hono";
3
3
 
4
4
  //#region src/domains/evals/routes/datasetTriggers.d.ts
5
- declare const app: OpenAPIHono<hono5.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono4.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono6 from "hono";
2
+ import * as hono5 from "hono";
3
3
 
4
4
  //#region src/domains/evals/routes/index.d.ts
5
- declare const app: OpenAPIHono<hono6.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono5.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,7 +1,7 @@
1
1
  import { Hono } from "hono";
2
- import * as hono_types8 from "hono/types";
2
+ import * as hono_types9 from "hono/types";
3
3
 
4
4
  //#region src/domains/evals/workflow/routes.d.ts
5
- declare const workflowRoutes: Hono<hono_types8.BlankEnv, hono_types8.BlankSchema, "/">;
5
+ declare const workflowRoutes: Hono<hono_types9.BlankEnv, hono_types9.BlankSchema, "/">;
6
6
  //#endregion
7
7
  export { workflowRoutes };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono7 from "hono";
2
+ import * as hono1 from "hono";
3
3
 
4
4
  //#region src/domains/manage/routes/availableAgents.d.ts
5
- declare const app: OpenAPIHono<hono7.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono1.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono17 from "hono";
2
+ import * as hono6 from "hono";
3
3
 
4
4
  //#region src/domains/manage/routes/conversations.d.ts
5
- declare const app: OpenAPIHono<hono17.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono6.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono18 from "hono";
2
+ import * as hono0 from "hono";
3
3
 
4
4
  //#region src/domains/manage/routes/index.d.ts
5
- declare const app: OpenAPIHono<hono18.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono0.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,10 +1,10 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { Hono } from "hono";
3
- import * as hono_types11 from "hono/types";
3
+ import * as hono_types5 from "hono/types";
4
4
 
5
5
  //#region src/domains/manage/routes/invitations.d.ts
6
6
  declare const invitationsRoutes: Hono<{
7
7
  Variables: ManageAppVariables;
8
- }, hono_types11.BlankSchema, "/">;
8
+ }, hono_types5.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { invitationsRoutes as default };
@@ -1,10 +1,10 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { Hono } from "hono";
3
- import * as hono_types12 from "hono/types";
3
+ import * as hono_types6 from "hono/types";
4
4
 
5
5
  //#region src/domains/manage/routes/passwordResetLinks.d.ts
6
6
  declare const passwordResetLinksRoutes: Hono<{
7
7
  Variables: ManageAppVariables;
8
- }, hono_types12.BlankSchema, "/">;
8
+ }, hono_types6.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { passwordResetLinksRoutes as default };
@@ -1,6 +1,6 @@
1
1
  import { requireProjectPermission } from "../../../middleware/projectAccess.js";
2
2
  import { OpenAPIHono, z } from "@hono/zod-openapi";
3
- import { OrgRoles, SpiceDbProjectPermissions, SpiceDbResourceTypes, checkBulkPermissions, commonGetErrorResponses, createApiError } from "@inkeep/agents-core";
3
+ import { OrgRoles, SpiceDbProjectPermissions, SpiceDbResourceTypes, checkBulkPermissions, commonGetErrorResponses, createApiError, toSpiceDbProjectId } from "@inkeep/agents-core";
4
4
  import { createProtectedRoute } from "@inkeep/agents-core/middleware";
5
5
 
6
6
  //#region src/domains/manage/routes/projectPermissions.ts
@@ -31,7 +31,7 @@ app.openapi(createProtectedRoute({
31
31
  ...commonGetErrorResponses
32
32
  }
33
33
  }), async (c) => {
34
- const { projectId } = c.req.valid("param");
34
+ const { projectId, tenantId } = c.req.valid("param");
35
35
  const userId = c.get("userId");
36
36
  const tenantRole = c.get("tenantRole");
37
37
  if (process.env.ENVIRONMENT === "test") return c.json({ data: {
@@ -48,9 +48,10 @@ app.openapi(createProtectedRoute({
48
48
  code: "unauthorized",
49
49
  message: "User not found"
50
50
  });
51
+ const spiceProjectId = toSpiceDbProjectId(tenantId, projectId);
51
52
  const permissions = await checkBulkPermissions({
52
53
  resourceType: SpiceDbResourceTypes.PROJECT,
53
- resourceId: projectId,
54
+ resourceId: spiceProjectId,
54
55
  permissions: [
55
56
  SpiceDbProjectPermissions.VIEW,
56
57
  SpiceDbProjectPermissions.USE,
@@ -1,10 +1,10 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { Hono } from "hono";
3
- import * as hono_types5 from "hono/types";
3
+ import * as hono_types7 from "hono/types";
4
4
 
5
5
  //#region src/domains/manage/routes/signoz.d.ts
6
6
  declare const app: Hono<{
7
7
  Variables: ManageAppVariables;
8
- }, hono_types5.BlankSchema, "/">;
8
+ }, hono_types7.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { app as default };
@@ -1,10 +1,10 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { Hono } from "hono";
3
- import * as hono_types10 from "hono/types";
3
+ import * as hono_types8 from "hono/types";
4
4
 
5
5
  //#region src/domains/manage/routes/users.d.ts
6
6
  declare const usersRoutes: Hono<{
7
7
  Variables: ManageAppVariables;
8
- }, hono_types10.BlankSchema, "/">;
8
+ }, hono_types8.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { usersRoutes as default };
@@ -1,7 +1,7 @@
1
1
  import { Hono } from "hono";
2
- import * as hono_types6 from "hono/types";
2
+ import * as hono_types11 from "hono/types";
3
3
 
4
4
  //#region src/domains/mcp/routes/mcp.d.ts
5
- declare const app: Hono<hono_types6.BlankEnv, hono_types6.BlankSchema, "/">;
5
+ declare const app: Hono<hono_types11.BlankEnv, hono_types11.BlankSchema, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,4 +1,4 @@
1
- import * as _inkeep_agents_core1 from "@inkeep/agents-core";
1
+ import * as _inkeep_agents_core3 from "@inkeep/agents-core";
2
2
  import { BreakdownComponentDef, ContextBreakdown, calculateBreakdownTotal, createEmptyBreakdown } from "@inkeep/agents-core";
3
3
 
4
4
  //#region src/domains/run/utils/token-estimator.d.ts
@@ -17,7 +17,7 @@ interface AssembleResult {
17
17
  /** The assembled prompt string */
18
18
  prompt: string;
19
19
  /** Token breakdown for each component */
20
- breakdown: _inkeep_agents_core1.ContextBreakdown;
20
+ breakdown: _inkeep_agents_core3.ContextBreakdown;
21
21
  }
22
22
  //#endregion
23
23
  export { AssembleResult, type BreakdownComponentDef, type ContextBreakdown, calculateBreakdownTotal, createEmptyBreakdown, estimateTokens };
@@ -1,5 +1,5 @@
1
1
  import { BaseExecutionContext } from "@inkeep/agents-core";
2
- import * as hono0 from "hono";
2
+ import * as hono15 from "hono";
3
3
 
4
4
  //#region src/middleware/evalsAuth.d.ts
5
5
 
@@ -7,7 +7,7 @@ import * as hono0 from "hono";
7
7
  * Middleware to authenticate API requests using Bearer token authentication
8
8
  * First checks if token matches INKEEP_AGENTS_EVAL_API_BYPASS_SECRET,
9
9
  */
10
- declare const evalApiKeyAuth: () => hono0.MiddlewareHandler<{
10
+ declare const evalApiKeyAuth: () => hono15.MiddlewareHandler<{
11
11
  Variables: {
12
12
  executionContext: BaseExecutionContext;
13
13
  };
@@ -1,5 +1,5 @@
1
1
  import { BaseExecutionContext } from "@inkeep/agents-core";
2
- import * as hono1 from "hono";
2
+ import * as hono10 from "hono";
3
3
  import { createAuth } from "@inkeep/agents-core/auth";
4
4
 
5
5
  //#region src/middleware/manageAuth.d.ts
@@ -12,7 +12,7 @@ import { createAuth } from "@inkeep/agents-core/auth";
12
12
  * 3. Database API key
13
13
  * 4. Internal service token
14
14
  */
15
- declare const manageApiKeyAuth: () => hono1.MiddlewareHandler<{
15
+ declare const manageApiKeyAuth: () => hono10.MiddlewareHandler<{
16
16
  Variables: {
17
17
  executionContext: BaseExecutionContext;
18
18
  userId?: string;
@@ -25,6 +25,6 @@ declare const manageApiKeyAuth: () => hono1.MiddlewareHandler<{
25
25
  * Middleware that gates a route with manage-domain authentication.
26
26
  * Uses Bearer token → API key auth, otherwise falls back to session auth.
27
27
  */
28
- declare const manageApiKeyOrSessionAuth: () => hono1.MiddlewareHandler<any, string, {}, Response>;
28
+ declare const manageApiKeyOrSessionAuth: () => hono10.MiddlewareHandler<any, string, {}, Response>;
29
29
  //#endregion
30
30
  export { manageApiKeyAuth, manageApiKeyOrSessionAuth };
@@ -1,11 +1,11 @@
1
1
  import { BaseExecutionContext, ResolvedRef } from "@inkeep/agents-core";
2
- import * as hono3 from "hono";
2
+ import * as hono12 from "hono";
3
3
 
4
4
  //#region src/middleware/projectConfig.d.ts
5
5
  /**
6
6
  * Middleware that fetches the full project definition from the Management API
7
7
  */
8
- declare const projectConfigMiddleware: hono3.MiddlewareHandler<{
8
+ declare const projectConfigMiddleware: hono12.MiddlewareHandler<{
9
9
  Variables: {
10
10
  executionContext: BaseExecutionContext;
11
11
  resolvedRef: ResolvedRef;
@@ -15,7 +15,7 @@ declare const projectConfigMiddleware: hono3.MiddlewareHandler<{
15
15
  * Creates a middleware that applies project config fetching except for specified route patterns
16
16
  * @param skipRouteCheck - Function that returns true if the route should skip the middleware
17
17
  */
18
- declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) => hono3.MiddlewareHandler<{
18
+ declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) => hono12.MiddlewareHandler<{
19
19
  Variables: {
20
20
  executionContext: BaseExecutionContext;
21
21
  resolvedRef: ResolvedRef;
@@ -1,5 +1,5 @@
1
1
  import { ManageAppVariables } from "../types/app.js";
2
- import * as hono8 from "hono";
2
+ import * as hono14 from "hono";
3
3
 
4
4
  //#region src/middleware/requirePermission.d.ts
5
5
  type Permission = {
@@ -9,6 +9,6 @@ declare const requirePermission: <Env$1 extends {
9
9
  Variables: ManageAppVariables;
10
10
  } = {
11
11
  Variables: ManageAppVariables;
12
- }>(permissions: Permission) => hono8.MiddlewareHandler<Env$1, string, {}, Response>;
12
+ }>(permissions: Permission) => hono14.MiddlewareHandler<Env$1, string, {}, Response>;
13
13
  //#endregion
14
14
  export { requirePermission };
@@ -1,8 +1,8 @@
1
1
  import { BaseExecutionContext } from "@inkeep/agents-core";
2
- import * as hono9 from "hono";
2
+ import * as hono16 from "hono";
3
3
 
4
4
  //#region src/middleware/runAuth.d.ts
5
- declare const runApiKeyAuth: () => hono9.MiddlewareHandler<{
5
+ declare const runApiKeyAuth: () => hono16.MiddlewareHandler<{
6
6
  Variables: {
7
7
  executionContext: BaseExecutionContext;
8
8
  };
@@ -11,7 +11,7 @@ declare const runApiKeyAuth: () => hono9.MiddlewareHandler<{
11
11
  * Creates a middleware that applies API key authentication except for specified route patterns
12
12
  * @param skipRouteCheck - Function that returns true if the route should skip authentication
13
13
  */
14
- declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) => hono9.MiddlewareHandler<{
14
+ declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) => hono16.MiddlewareHandler<{
15
15
  Variables: {
16
16
  executionContext: BaseExecutionContext;
17
17
  };
@@ -20,7 +20,7 @@ declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) =
20
20
  * Helper middleware for endpoints that optionally support API key authentication
21
21
  * If no auth header is present, it continues without setting the executionContext
22
22
  */
23
- declare const runOptionalAuth: () => hono9.MiddlewareHandler<{
23
+ declare const runOptionalAuth: () => hono16.MiddlewareHandler<{
24
24
  Variables: {
25
25
  executionContext?: BaseExecutionContext;
26
26
  };
@@ -1,4 +1,4 @@
1
- import * as hono15 from "hono";
1
+ import * as hono2 from "hono";
2
2
 
3
3
  //#region src/middleware/sessionAuth.d.ts
4
4
 
@@ -7,11 +7,11 @@ import * as hono15 from "hono";
7
7
  * Requires that a user has already been authenticated via Better Auth session.
8
8
  * Used primarily for manage routes that require an active user session.
9
9
  */
10
- declare const sessionAuth: () => hono15.MiddlewareHandler<any, string, {}, Response>;
10
+ declare const sessionAuth: () => hono2.MiddlewareHandler<any, string, {}, Response>;
11
11
  /**
12
12
  * Global session middleware - sets user and session in context for all routes
13
13
  * Used for all routes that require an active user session.
14
14
  */
15
- declare const sessionContext: () => hono15.MiddlewareHandler<any, string, {}, Response>;
15
+ declare const sessionContext: () => hono2.MiddlewareHandler<any, string, {}, Response>;
16
16
  //#endregion
17
17
  export { sessionAuth, sessionContext };
@@ -1,4 +1,4 @@
1
- import * as hono12 from "hono";
1
+ import * as hono7 from "hono";
2
2
 
3
3
  //#region src/middleware/tenantAccess.d.ts
4
4
 
@@ -12,7 +12,7 @@ import * as hono12 from "hono";
12
12
  * - API key user: Access only to the tenant associated with the API key
13
13
  * - Session user: Access based on organization membership
14
14
  */
15
- declare const requireTenantAccess: () => hono12.MiddlewareHandler<{
15
+ declare const requireTenantAccess: () => hono7.MiddlewareHandler<{
16
16
  Variables: {
17
17
  userId: string;
18
18
  tenantId: string;
@@ -1,7 +1,7 @@
1
- import * as hono13 from "hono";
1
+ import * as hono8 from "hono";
2
2
 
3
3
  //#region src/middleware/tracing.d.ts
4
- declare const otelBaggageMiddleware: () => hono13.MiddlewareHandler<any, string, {}, Response>;
5
- declare const executionBaggageMiddleware: () => hono13.MiddlewareHandler<any, string, {}, Response>;
4
+ declare const otelBaggageMiddleware: () => hono8.MiddlewareHandler<any, string, {}, Response>;
5
+ declare const executionBaggageMiddleware: () => hono8.MiddlewareHandler<any, string, {}, Response>;
6
6
  //#endregion
7
7
  export { executionBaggageMiddleware, otelBaggageMiddleware };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkeep/agents-api",
3
- "version": "0.0.0-dev-20260302154535",
3
+ "version": "0.0.0-dev-20260302164201",
4
4
  "description": "Unified Inkeep Agents API - combines management, runtime, and evaluation capabilities",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {
@@ -70,9 +70,9 @@
70
70
  "openid-client": "^6.8.1",
71
71
  "pg": "^8.16.3",
72
72
  "workflow": "^4.1.0-beta.54",
73
- "@inkeep/agents-core": "^0.0.0-dev-20260302154535",
74
- "@inkeep/agents-mcp": "^0.0.0-dev-20260302154535",
75
- "@inkeep/agents-work-apps": "^0.0.0-dev-20260302154535"
73
+ "@inkeep/agents-core": "^0.0.0-dev-20260302164201",
74
+ "@inkeep/agents-mcp": "^0.0.0-dev-20260302164201",
75
+ "@inkeep/agents-work-apps": "^0.0.0-dev-20260302164201"
76
76
  },
77
77
  "peerDependencies": {
78
78
  "@hono/zod-openapi": "^1.1.5",