sonamu 0.8.21 → 0.8.22

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.
package/dist/ui/api.js CHANGED
@@ -871,19 +871,24 @@ export async function sonamuUIApiPlugin(fastify) {
871
871
  });
872
872
  // Tasks API
873
873
  server.get("/api/tasks/status", async ()=>{
874
- return {
875
- active: Sonamu.workflows !== null
876
- };
874
+ try {
875
+ Sonamu.workflows;
876
+ return {
877
+ active: true
878
+ };
879
+ } catch {
880
+ return {
881
+ active: false
882
+ };
883
+ }
877
884
  });
878
885
  server.get("/api/tasks/workflowDefinitions", async ()=>{
879
- if (!Sonamu.workflows) throw new Error("Workflows not initialized (database not configured)");
880
886
  const definitions = Sonamu.workflows.workflowDefinitions;
881
887
  return {
882
888
  definitions
883
889
  };
884
890
  });
885
891
  server.get("/api/tasks/workflowRuns", async (request)=>{
886
- if (!Sonamu.workflows) throw new Error("Workflows not initialized (database not configured)");
887
892
  const backend = Sonamu.workflows.backend;
888
893
  const { limit, after, before, order, status, workflowName, createdAfter, createdBefore } = request.query;
889
894
  return backend.listWorkflowRuns({
@@ -898,7 +903,6 @@ export async function sonamuUIApiPlugin(fastify) {
898
903
  });
899
904
  });
900
905
  server.get("/api/tasks/workflowRuns/:id", async (request)=>{
901
- if (!Sonamu.workflows) throw new Error("Workflows not initialized (database not configured)");
902
906
  const backend = Sonamu.workflows.backend;
903
907
  const workflowRun = await backend.getWorkflowRun({
904
908
  workflowRunId: request.params.id
@@ -909,28 +913,24 @@ export async function sonamuUIApiPlugin(fastify) {
909
913
  return workflowRun;
910
914
  });
911
915
  server.post("/api/tasks/workflowRuns/:id/cancel", async (request)=>{
912
- if (!Sonamu.workflows) throw new Error("Workflows not initialized (database not configured)");
913
916
  const backend = Sonamu.workflows.backend;
914
917
  return backend.cancelWorkflowRun({
915
918
  workflowRunId: request.params.id
916
919
  });
917
920
  });
918
921
  server.post("/api/tasks/workflowRuns/:id/pause", async (request)=>{
919
- if (!Sonamu.workflows) throw new Error("Workflows not initialized (database not configured)");
920
922
  const backend = Sonamu.workflows.backend;
921
923
  return backend.pauseWorkflowRun({
922
924
  workflowRunId: request.params.id
923
925
  });
924
926
  });
925
927
  server.post("/api/tasks/workflowRuns/:id/resume", async (request)=>{
926
- if (!Sonamu.workflows) throw new Error("Workflows not initialized (database not configured)");
927
928
  const backend = Sonamu.workflows.backend;
928
929
  return backend.resumeWorkflowRun({
929
930
  workflowRunId: request.params.id
930
931
  });
931
932
  });
932
933
  server.get("/api/tasks/workflowRuns/:id/steps", async (request)=>{
933
- if (!Sonamu.workflows) throw new Error("Workflows not initialized (database not configured)");
934
934
  const backend = Sonamu.workflows.backend;
935
935
  const { limit, after, before } = request.query;
936
936
  return backend.listStepAttempts({
@@ -1146,4 +1146,4 @@ export async function sonamuUIApiPlugin(fastify) {
1146
1146
  });
1147
1147
  }
1148
1148
 
1149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQWRkcmVzc0luZm8gfSBmcm9tIFwibmV0XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcmFuZ2UgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCLCB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgc29uYW11RGljdGlvbmFyeSB9IGZyb20gXCIuLi9kaWN0L3NvbmFtdS1kaWN0aW9uYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eSB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgaXNTb0V4Y2VwdGlvbixcbiAgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uLFxufSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIE1pZ3JhdGlvblJlc3VsdCwgTWlncmF0b3IgfSBmcm9tIFwiLi4vbWlncmF0aW9uL21pZ3JhdG9yXCI7XG5pbXBvcnQgeyBTbGFja0NvbmZpcm0sIHR5cGUgU2xhY2tDb25maXJtUGVuZGluZ1Jlc3VsdCB9IGZyb20gXCIuLi9taWdyYXRpb24vc2xhY2stY29uZmlybVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IEZpeHR1cmVHZW5lcmF0b3IgfSBmcm9tIFwiLi4vdGVzdGluZy9maXh0dXJlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHlwZSBEdXBsaWNhdGVDaGVja09wdGlvbnMsIEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgdHlwZSBDb25lLFxuICB0eXBlIEVudGl0eUluZGV4LFxuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5U3Vic2V0Um93LFxuICB0eXBlIEZpeHR1cmVSZWNvcmQsXG4gIHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMsXG4gIHR5cGUgRmxhdHRlblN1YnNldFJvdyxcbiAgdHlwZSBQYXRoQW5kQ29kZSxcbiAgVGVtcGxhdGVLZXksXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHNldEFpQXBpIH0gZnJvbSBcIi4vYWktYXBpXCI7XG5pbXBvcnQge1xuICBlZGl0Q29udGVudCxcbiAgZWRpdFNjaGVtYSxcbiAgZ2V0Q2RkVHJlZSxcbiAgZ2V0RGFzaGJvYXJkLFxuICBsaXN0U2NoZW1hcyxcbiAgb3BlblNvdXJjZUZpbGUsXG4gIHJlYWRDb250ZW50LFxuICByZWFkU2NoZW1hLFxufSBmcm9tIFwiLi9jZGQtc2VydmljZVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc29uYW11VUlBcGlQbHVnaW4oZmFzdGlmeTogRmFzdGlmeUluc3RhbmNlKSB7XG4gIGZhc3RpZnkucmVnaXN0ZXIoXG4gICAgYXN5bmMgKHNlcnZlcikgPT4ge1xuICAgICAgLy8gbWlncmF0b3JcbiAgICAgIGNvbnN0IG1pZ3JhdG9yID0gbmV3IE1pZ3JhdG9yKCk7XG5cbiAgICAgIC8vIHdhaXRGb3JITVJDb21wbGV0ZWRcbiAgICAgIGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JITVJDb21wbGV0ZWQ8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3Qgd2FpdFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIFNvbmFtdS5zeW5jZXIuZXZlbnRFbWl0dGVyLm9mZihcIm9uSE1SQ29tcGxldGVkXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sIDE1MDApO1xuXG4gICAgICAgICAgU29uYW11LnN5bmNlci5ldmVudEVtaXR0ZXIub25jZShcIm9uSE1SQ29tcGxldGVkXCIsIGhhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBhd2FpdCB3YWl0UHJvbWlzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2V0QWlBcGkoc2VydmVyKTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvc29uYW11L2NvbmZpZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBTb25hbXUuY29uZmlnO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGVudGl0eUlkPzogc3RyaW5nO1xuICAgICAgICAgIHByZXNldD86IFwidHlwZXNcIiB8IFwiZW50aXR5Lmpzb25cIiB8IFwiZ2VuZXJhdGVkXCI7XG4gICAgICAgICAgYWJzUGF0aD86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS90b29scy9vcGVuVnNjb2RlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHByZXNldCwgYWJzUGF0aCB9ID0gcmVxdWVzdC5xdWVyeTtcblxuICAgICAgICBjb25zdCB0YXJnZXRQYXRoID0gKCgpID0+IHtcbiAgICAgICAgICBpZiAoZW50aXR5SWQgJiYgcHJlc2V0KSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWVzIH0gPSBlbnRpdHk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgYXBpUm9vdFBhdGggfSA9IFNvbmFtdTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gKCgpID0+IHtcbiAgICAgICAgICAgICAgc3dpdGNoIChwcmVzZXQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidHlwZXNcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lcy5mc30udHlwZXMudHNgO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnRpdHkuanNvblwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWVzLmZzfS5lbnRpdHkuanNvbmA7XG4gICAgICAgICAgICAgICAgY2FzZSBcImdlbmVyYXRlZFwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWVzLmZzfS5nZW5lcmF0ZWQudHNgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2FwaVJvb3RQYXRofS9zcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMucGFyZW50RnN9LyR7ZmlsZW5hbWV9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFhYnNQYXRoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLnByZXNldE9yQWJzUGF0aFJlcXVpcmVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhYnNQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgZXhlY1N5bmMoYGNvZGUgJHt0YXJnZXRQYXRofWApO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIG9yaWdpbjogc3RyaW5nO1xuICAgICAgICAgIGVudGl0eUlkPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3Rvb2xzL2dldFN1Z2dlc3Rpb25cIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBvcmlnaW4sIGVudGl0eUlkIH0gPSByZXF1ZXN0LnF1ZXJ5O1xuXG4gICAgICAgIC8vIOy5mO2ZmCDsmqnslrTsp5FcbiAgICAgICAgY29uc3QgZ2xvc3NhcnkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gICAgICAgICAgW1wic3RhdHVzXCIsIFwi7IOB7YOcXCJdLFxuICAgICAgICAgIFtcInR5cGVcIiwgXCLtg4DsnoVcIl0sXG4gICAgICAgICAgW1wiaW1hZ2VcIiwgXCLsnbTrr7jsp4BcIl0sXG4gICAgICAgICAgW1wiaW1hZ2VzXCIsIFwi7J2066+47KeA66as7Iqk7Yq4XCJdLFxuICAgICAgICAgIFtcInVybFwiLCBcIlVSTFwiXSxcbiAgICAgICAgICBbXCJpZFwiLCBcIklEXCJdLFxuICAgICAgICAgIFtcIm5hbWVcIiwgYHtFbnRpdHlJRH3rqoVgXSxcbiAgICAgICAgICBbXCJ0aXRsZVwiLCBcIntFbnRpdHlJRH3rqoVcIl0sXG4gICAgICAgICAgW1wicGFyZW50XCIsIFwi7IOB7JyEe0VudGl0eUlEfVwiXSxcbiAgICAgICAgICBbXCJkZXNjXCIsIFwi7ISk66qFXCJdLFxuICAgICAgICAgIFtcImF0XCIsIFwi7J287IucXCJdLFxuICAgICAgICAgIFtcImNyZWF0ZWRcIiwgXCLrk7HroZ1cIl0sXG4gICAgICAgICAgW1widXBkYXRlZFwiLCBcIuyImOyglVwiXSxcbiAgICAgICAgICBbXCJkZWxldGVkXCIsIFwi7IKt7KCcXCJdLFxuICAgICAgICAgIFtcImJ5XCIsIFwi7Jyg7KCAXCJdLFxuICAgICAgICAgIFtcImRhdGVcIiwgXCLsnbzsnpBcIl0sXG4gICAgICAgICAgW1widGltZVwiLCBcIuyLnOqwhFwiXSxcbiAgICAgICAgICBbXCJrb1wiLCBcIijtlZzquIApXCJdLFxuICAgICAgICAgIFtcImVuXCIsIFwiKOyYgeusuClcIl0sXG4gICAgICAgICAgW1wia3J3XCIsIFwiKOybkClcIl0sXG4gICAgICAgICAgW1widXNkXCIsIFwiKFVTRClcIl0sXG4gICAgICAgICAgW1wiY29sb3JcIiwgXCLsu6zrn6xcIl0sXG4gICAgICAgICAgW1wiY29kZVwiLCBcIuy9lOuTnFwiXSxcbiAgICAgICAgICBbXCJ4XCIsIFwiWOyijO2RnFwiXSxcbiAgICAgICAgICBbXCJ5XCIsIFwiWeyijO2RnFwiXSxcbiAgICAgICAgICBbXCJjdXJyZW50XCIsIFwi7ZiE7J6sXCJdLFxuICAgICAgICAgIFtcInN0b2NrXCIsIFwi7J6s6rOgXCJdLFxuICAgICAgICAgIFtcInRvdGFsXCIsIFwi7LSdXCJdLFxuICAgICAgICAgIFtcImFkbWluXCIsIFwi6rSA66as7J6QXCJdLFxuICAgICAgICAgIFtcImdyb3VwXCIsIFwi6re466O5XCJdLFxuICAgICAgICAgIFtcIml0ZW1cIiwgXCLslYTsnbTthZxcIl0sXG4gICAgICAgICAgW1wiY250XCIsIFwi7IiY65+JXCJdLFxuICAgICAgICAgIFtcInByaWNlXCIsIFwi6rCA6rKpXCJdLFxuICAgICAgICAgIFtcInByZXNldFwiLCBcIu2UhOumrOyFi1wiXSxcbiAgICAgICAgICBbXCJhY2N0XCIsIFwi6rOE7KKMXCJdLFxuICAgICAgICAgIFtcInRlbFwiLCBcIuyghO2ZlOuyiO2YuFwiXSxcbiAgICAgICAgICBbXCJub1wiLCBcIuuyiO2YuFwiXSxcbiAgICAgICAgICBbXCJib2R5XCIsIFwi64K07JqpXCJdLFxuICAgICAgICAgIFtcImNvbnRlbnRcIiwgXCLrgrTsmqlcIl0sXG4gICAgICAgICAgW1wib3JkZXJub1wiLCBcIuygleugrOyInOyEnFwiXSxcbiAgICAgICAgICBbXCJwcmlvcml0eVwiLCBcIuyasOyEoOyInOychFwiXSxcbiAgICAgICAgICBbXCJ0ZXh0XCIsIFwi7YWN7Iqk7Yq4XCJdLFxuICAgICAgICAgIFtcImtleVwiLCBcIu2CpFwiXSxcbiAgICAgICAgICBbXCJzdW1cIiwgXCLtlansgrBcIl0sXG4gICAgICAgICAgW1wiZXhwZWN0ZWRcIiwgXCLsmIjsg4FcIl0sXG4gICAgICAgICAgW1wiYWN0dWFsXCIsIFwi7Iuk7KCcXCJdLFxuICAgICAgICBdKTtcbiAgICAgICAgLy8g7KCE7LK0IOyXlO2LsO2LsCDsiJztmoztlZjrqbAsIOyXlO2LsO2LsCDtg4DsnbTti4Dqs7wg7ZSE66GtIOyEpOuqheydhCDsuZjtmZgg7Jqp7Ja07KeR7JeQIOy2lOqwgFxuICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkpIHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgaWYgKChlbnRpdHkudGl0bGUgPz8gXCJcIikgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGdsb3NzYXJ5LnNldChpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5LmlkKSwgZW50aXR5LnRpdGxlKTtcbiAgICAgICAgICAgIGdsb3NzYXJ5LnNldChcbiAgICAgICAgICAgICAgaW5mbGVjdGlvbi51bmRlcnNjb3JlKGluZmxlY3Rpb24ucGx1cmFsaXplKGVudGl0eS5pZCkpLFxuICAgICAgICAgICAgICBgJHtlbnRpdHkudGl0bGV966as7Iqk7Yq4YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50aXR5LnByb3BzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgIGlmIChnbG9zc2FyeS5oYXMocHJvcC5uYW1lKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcC5kZXNjKSB7XG4gICAgICAgICAgICAgIGdsb3NzYXJ5LnNldChwcm9wLm5hbWUsIHByb3AuZGVzYy5yZXBsYWNlKGVudGl0eS50aXRsZSA/PyBcIlwiLCBcIntFbnRpdHlJRH1cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VnZ2VzdGVkID0gKCgpID0+IHtcbiAgICAgICAgICAvLyDri6jslrQg67aE66asLCDqsIDriqXtlZwg7KGw7ZWpIOyDneyEsVxuICAgICAgICAgIGNvbnN0IHdvcmRzID0gb3JpZ2luLnNwbGl0KFwiX1wiKTtcbiAgICAgICAgICBjb25zdCBjb21iaW5hdGlvbnMgPSBbLi4ucmFuZ2Uod29yZHMubGVuZ3RoLCAwLCAtMSldLmZsYXRNYXAoKGxlbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4ucmFuZ2UoMCwgd29yZHMubGVuZ3RoIC0gbGVuICsgMSwgKGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICAgICAgICB3OiB3b3Jkcy5zbGljZShpZHgsIGlkeCArIGxlbikuam9pbihcIl9cIiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8g7KGw7ZWp7J2EIOyInO2ajO2VmOupsCwg7LmY7ZmYIOyaqeyWtOynkeyXkCDsnojripQg64uo7Ja06rCAIO2PrO2VqOuQnCDqsr3smrAsIOy5mO2ZmCDsmqnslrTroZwg7LmY7ZmYXG4gICAgICAgICAgY29uc3QgUkVQTEFDRURfUFJFRklYID0gXCIjUkVQTEFDRUQvL1wiOyAvLyDsuZjtmZjrkJwg64uo7Ja066W8IGpvaW4g7J207ZuE7JeQ64+EIOyLneuzhO2VmOq4sCDsnITtlbQgcHJlZml4IOy2lOqwgFxuICAgICAgICAgIGxldCByZW1haW5BcnI6IHN0cmluZ1tdID0gWy4uLndvcmRzXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbWIgb2YgY29tYmluYXRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCByZW1haW5TdHIgPSByZW1haW5BcnIuam9pbihcIl9cIik7XG4gICAgICAgICAgICBpZiAocmVtYWluU3RyLmluY2x1ZGVzKGNvbWIudykgJiYgZ2xvc3NhcnkuaGFzKGNvbWIudykpIHtcbiAgICAgICAgICAgICAgcmVtYWluQXJyID0gcmVtYWluU3RyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tYi53LCBSRVBMQUNFRF9QUkVGSVggKyBnbG9zc2FyeS5nZXQoY29tYi53KSlcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCJfXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZW1haW5BcnJcbiAgICAgICAgICAgIC5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHIuc3RhcnRzV2l0aChSRVBMQUNFRF9QUkVGSVgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIucmVwbGFjZShSRVBMQUNFRF9QUkVGSVgsIFwiXCIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3tFbnRpdHlJRH0vZywgZW50aXR5SWQgPyBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkudGl0bGUgOiBcIlwiKTtcbiAgICAgICAgfSkoKTtcblxuICAgICAgICByZXR1cm4geyBzdWdnZXN0ZWQgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9lbnRpdHkvZmluZE1hbnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGZsYXR0ZW5TdWJzZXRSb3dzKHN1YnNldFJvd3M6IEVudGl0eVN1YnNldFJvd1tdKTogRmxhdHRlblN1YnNldFJvd1tdIHtcbiAgICAgICAgICByZXR1cm4gc3Vic2V0Um93cy5mbGF0TWFwKChzdWJzZXRSb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIC4uLnNSb3cgfSA9IHN1YnNldFJvdztcbiAgICAgICAgICAgIHJldHVybiBbc1JvdywgLi4uZmxhdHRlblN1YnNldFJvd3MoY2hpbGRyZW4pXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVudGl0aWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgZW50aXR5SWRzLm1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNldFJvd3MgPSBlbnRpdHkuZ2V0U3Vic2V0Um93cygpO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5lbnRpdHksXG4gICAgICAgICAgICAgIGZsYXR0ZW5TdWJzZXRSb3dzOiBmbGF0dGVuU3Vic2V0Um93cyhzdWJzZXRSb3dzKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZW50aXRpZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFJZCA9IGEucGFyZW50SWQgPz8gYS5pZDtcbiAgICAgICAgICBjb25zdCBiSWQgPSBiLnBhcmVudElkID8/IGIuaWQ7XG4gICAgICAgICAgaWYgKGFJZCA8IGJJZCkgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhSWQgPiBiSWQpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhSWQgPT09IGJJZCkge1xuICAgICAgICAgICAgaWYgKGEucGFyZW50SWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGIucGFyZW50SWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBlbnRpdGllcyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGZpbHRlcj86IFwiZW51bXNcIiB8IFwidHlwZXNcIjtcbiAgICAgICAgICByZWxvYWQ/OiBcIjFcIjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvdHlwZUlkc1wiLCBhc3luYyAocmVxdWVzdCk6IFByb21pc2U8eyB0eXBlSWRzOiBzdHJpbmdbXSB9PiA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyLCByZWxvYWQgfSA9IHJlcXVlc3QucXVlcnk7XG5cbiAgICAgICAgaWYgKHJlbG9hZCA9PT0gXCIxXCIpIHtcbiAgICAgICAgICBhd2FpdCBTb25hbXUuc3luY2VyLmF1dG9sb2FkVHlwZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGVJZHMgPSAoKCkgPT4ge1xuICAgICAgICAgIC8vIO2UhOuhnOygne2KuOyXkOyEnCDsoJXsnZjtlZwg7YOA7J6F65OkXG4gICAgICAgICAgY29uc3QgcHJvamVjdFR5cGVJZHMgPSBPYmplY3QuZW50cmllcyhTb25hbXUuc3luY2VyLnR5cGVzKVxuICAgICAgICAgICAgLmZpbHRlcigoW190eXBlSWQsIHpvZFR5cGVdKSA9PiAoem9kVHlwZS5fem9kLmRlZi50eXBlIGFzIHN0cmluZykgIT09IFwiZW51bVwiKVxuICAgICAgICAgICAgLm1hcCgoW3R5cGVJZCwgX3pvZFR5cGVdKSA9PiB0eXBlSWQpO1xuXG4gICAgICAgICAgLy8g64K07J6lIO2DgOyeheuTpCAoc29uYW11IOy9lOyWtOyXkOyEnCDsoJzqs7UpXG4gICAgICAgICAgY29uc3QgYnVpbHRJblR5cGVJZHMgPSBbLi4uQlVJTFRfSU5fVFlQRV9JRFNdO1xuXG4gICAgICAgICAgLy8g66qo65OgIO2DgOyehSDrs5HtlalcbiAgICAgICAgICBjb25zdCBhbGxUeXBlSWRzID0gWy4uLmJ1aWx0SW5UeXBlSWRzLCAuLi5wcm9qZWN0VHlwZUlkc107XG5cbiAgICAgICAgICBpZiAoZmlsdGVyID09PSBcInR5cGVzXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxUeXBlSWRzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudW1JZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpLmZsYXRNYXAoKGVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGZpbHRlciA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gZW51bUlkcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGxUeXBlSWRzLCAuLi5lbnVtSWRzXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlSWRzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGZvcm06IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgICAgICAgIHBhcmVudElkPzogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2NyZWF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBmb3JtIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyAuLi5mb3JtLCBlbnRpdHlJZDogZm9ybS5pZCB9KTtcblxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgU29uYW11LnN5bmNlci5kZWxFbnRpdHkoZW50aXR5SWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIG5ld1ZhbHVlczoge1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgICAgICAgICBwYXJlbnRJZD86IHN0cmluZztcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlFbnRpdHlCYXNlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBuZXdWYWx1ZXMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LnRpdGxlID0gbmV3VmFsdWVzLnRpdGxlO1xuICAgICAgICAgIGVudGl0eS50YWJsZSA9IG5ld1ZhbHVlcy50YWJsZTtcbiAgICAgICAgICBlbnRpdHkucGFyZW50SWQgPSBuZXdWYWx1ZXMucGFyZW50SWQ7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIHN1YnNldEtleTogc3RyaW5nO1xuICAgICAgICAgIGZpZWxkczogc3RyaW5nW107XG4gICAgICAgICAgZmllbGRzSW50ZXJuYWw/OiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5U3Vic2V0XCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBzdWJzZXRLZXksIGZpZWxkcywgZmllbGRzSW50ZXJuYWwgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XSA9IGZpZWxkcztcbiAgICAgICAgICBpZiAoZmllbGRzSW50ZXJuYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkc0ludGVybmFsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZW50aXR5LnN1YnNldHNJbnRlcm5hbFtzdWJzZXRLZXldID0gZmllbGRzSW50ZXJuYWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWxldGUgZW50aXR5LnN1YnNldHNJbnRlcm5hbFtzdWJzZXRLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIHsgdXBkYXRlZDogZmllbGRzLCB1cGRhdGVkSW50ZXJuYWw6IGZpZWxkc0ludGVybmFsIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgc3Vic2V0S2V5OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2RlbFN1YnNldFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgc3Vic2V0S2V5IH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldEtleV07XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIG5ld1Byb3A6IEVudGl0eVByb3A7XG4gICAgICAgICAgYXQ/OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2NyZWF0ZVByb3BcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGF0LCBuZXdQcm9wIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5jcmVhdGVQcm9wKG5ld1Byb3AsIGF0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBuZXdQcm9wOiBFbnRpdHlQcm9wO1xuICAgICAgICAgIGF0OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeVByb3BcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGF0LCBuZXdQcm9wIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5Lm1vZGlmeVByb3AobmV3UHJvcCwgYXQpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgYXQ6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZGVsUHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuZGVsUHJvcChhdCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgYXQ6IG51bWJlcjtcbiAgICAgICAgICB0bzogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb3ZlUHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQsIHRvIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5Lm1vdmVQcm9wKGF0LCB0byk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBpbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlJbmRleGVzXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBpbmRleGVzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5pbmRleGVzID0gaW5kZXhlcztcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIHsgdXBkYXRlZDogaW5kZXhlcyB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGVudW1MYWJlbHM6IEVudGl0eVtcImVudW1MYWJlbHNcIl07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUVudW1MYWJlbHNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGVudW1MYWJlbHMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmVudW1MYWJlbHMgPSBlbnVtTGFiZWxzO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4geyB1cGRhdGVkOiBlbnVtTGFiZWxzIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgbmV3RW51bUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2NyZWF0ZUVudW1JZFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgbmV3RW51bUlkIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAgICAgaWYgKGVudGl0eS5lbnVtTGFiZWxzW25ld0VudW1JZF0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J2066+4IOyhtOyerO2VmOuKlCBlbnVtSWTsnoXri4jri6Q6ICR7bmV3RW51bUlkfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudGl0eS5lbnVtTGFiZWxzW25ld0VudW1JZF0gPSB7XG4gICAgICAgICAgICAuLi4obmV3RW51bUlkLmVuZHNXaXRoKFwiU3RhdHVzXCIpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgYWN0aXZlOiBcIuuFuOy2nFwiLFxuICAgICAgICAgICAgICAgICAgaGlkZGVuOiBcIuyIqOq5gFwiLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBcIlwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGVudW1JZDoge1xuICAgICAgICAgICAgYmVmb3JlOiBzdHJpbmc7XG4gICAgICAgICAgICBhZnRlcjogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUVudW1JZFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgZW51bUlkIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICAgICAgICBjb25zdCBpc0V4aXN0cyA9IGVudGl0eUlkcy5zb21lKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudGl0eS5lbnVtTGFiZWxzKS5pbmNsdWRlcyhlbnVtSWQuYWZ0ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpc0V4aXN0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnbTrr7gg7KG07J6s7ZWY64qUIEVudW1JZOyeheuLiOuLpDogJHtlbnVtSWQuYWZ0ZXJ9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5lbnVtTGFiZWxzW2VudW1JZC5hZnRlcl0gPSBlbnRpdHkuZW51bUxhYmVsc1tlbnVtSWQuYmVmb3JlXTtcbiAgICAgICAgICBkZWxldGUgZW50aXR5LmVudW1MYWJlbHNbZW51bUlkLmJlZm9yZV07XG5cbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBlbnRpdHlJZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBlbnRpdHkucHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKHByb3AudHlwZSA9PT0gXCJlbnVtXCIgJiYgcHJvcC5pZCA9PT0gZW51bUlkLmJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHByb3AuaWQgPSBlbnVtSWQuYWZ0ZXI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGVudW1JZDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxldGVFbnVtSWRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGVudW1JZCB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICAgICAgICBjb25zdCBpc1JlZmVyZW5jZWQgPSBlbnRpdHlJZHNcbiAgICAgICAgICAgIC5mbGF0TWFwKChlbnRpdHlJZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnByb3BzKVxuICAgICAgICAgICAgLnNvbWUoKHByb3ApID0+IHByb3AudHlwZSA9PT0gXCJlbnVtXCIgJiYgcHJvcC5pZCA9PT0gZW51bUlkKTtcbiAgICAgICAgICBpZiAoaXNSZWZlcmVuY2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW51bUlkfeulvCDssLjsobDtlZjripQg7ZSE66Gc7Y287Yuw6rCAIOyhtOyerO2VqeuLiOuLpC5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZGVsZXRlIGVudGl0eS5lbnVtTGFiZWxzW2VudW1JZF07XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICB0YXJnZXQ6IFwiZW50aXR5XCIgfCBcInByb3BcIiB8IFwiZW51bVwiIHwgXCJzdWJzZXRcIjtcbiAgICAgICAgICBwcm9wTmFtZT86IHN0cmluZztcbiAgICAgICAgICBlbnVtSWQ/OiBzdHJpbmc7XG4gICAgICAgICAgc3Vic2V0S2V5Pzogc3RyaW5nO1xuICAgICAgICAgIGNvbmU6IENvbmU7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L3VwZGF0ZUNvbmVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHRhcmdldCwgcHJvcE5hbWUsIGVudW1JZCwgc3Vic2V0S2V5LCBjb25lIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldCA9PT0gXCJlbnRpdHlcIikge1xuICAgICAgICAgICAgZW50aXR5LmNvbmUgPSBjb25lO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcInByb3BcIiAmJiBwcm9wTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IGVudGl0eS5wcm9wcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IHByb3BOYW1lKTtcbiAgICAgICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgICAgIChwcm9wIGFzIHsgY29uZT86IENvbmUgfSkuY29uZSA9IGNvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwiZW51bVwiICYmIGVudW1JZCkge1xuICAgICAgICAgICAgZW50aXR5LmVudW1Db25lc1tlbnVtSWRdID0gY29uZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJzdWJzZXRcIiAmJiBzdWJzZXRLZXkpIHtcbiAgICAgICAgICAgIGVudGl0eS5zdWJzZXRDb25lc1tzdWJzZXRLZXldID0gY29uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIHByZXNlcnZlRXhpc3Rpbmc/OiBib29sZWFuO1xuICAgICAgICAgIG9ubHlFbXB0eT86IGJvb2xlYW47XG4gICAgICAgICAgbG9jYWxlPzogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9nZW5lcmF0ZUNvbmVzXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgcHJlc2VydmVFeGlzdGluZywgb25seUVtcHR5LCBsb2NhbGUgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBFbnRpdHkg7KG07J6sIOyXrOu2gCDtmZXsnbhcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcblxuICAgICAgICAgICAgLy8gbG9jYWxlIOq4sOuzuOqwkjogU29uYW11LmNvbmZpZy5pMThuLmRlZmF1bHRMb2NhbGUg7IKs7JqpXG4gICAgICAgICAgICBjb25zdCBlZmZlY3RpdmVMb2NhbGUgPVxuICAgICAgICAgICAgICBsb2NhbGUgPz8gKFNvbmFtdS5jb25maWcuaTE4bi5kZWZhdWx0TG9jYWxlIGFzIFwia29cIiB8IFwiZW5cIiB8IFwiamFcIik7XG5cbiAgICAgICAgICAgIC8vIENvbmUg7IOd7ISxXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICAgICAgICAgIHByZXNlcnZlRXhpc3Rpbmc6IHByZXNlcnZlRXhpc3RpbmcgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgb25seUVtcHR5OiBvbmx5RW1wdHkgPz8gZmFsc2UsXG4gICAgICAgICAgICAgIGxvY2FsZTogZWZmZWN0aXZlTG9jYWxlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cbiAgICAgICAgICAgIC8vIEVudGl0eSBub3QgZm91bmRcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwi7KG07J6s7ZWY7KeAIOyViuuKlCBFbnRpdHlcIikpIHtcbiAgICAgICAgICAgICAgcmVwbHkuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eUlkfWAsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFQSSDtgqQg7JeG7J2MXG4gICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhcIkFOVEhST1BJQ19BUElfS0VZIG5vdCBmb3VuZFwiKSkge1xuICAgICAgICAgICAgICByZXBseS5zdGF0dXMoNTAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJBUEkga2V5IG5vdCBjb25maWd1cmVkXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJhdGUgbGltaXRcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwiUmF0ZSBsaW1pdCBleGNlZWRlZFwiKSkge1xuICAgICAgICAgICAgICByZXBseS5zdGF0dXMoNDI5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJSYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDquLDtg4Ag7JeQ65+sXG4gICAgICAgICAgICByZXBseS5zdGF0dXMoNTAwKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYENvbmUgZ2VuZXJhdGlvbiBmYWlsZWQ6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2dldFRhYmxlQ29sdW1uc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eUlkIH0gPSByZXF1ZXN0LnF1ZXJ5O1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBlbnRpdHkuZ2V0VGFibGVDb2x1bW5zKCk7XG4gICAgICAgIHJldHVybiB7IGNvbHVtbnMgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9taWdyYXRpb25zL3N0YXR1c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuXG4gICAgICAgIHJldHVybiB7IHN0YXR1cyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGFjdGlvbjogXCJhcHBseVwiIHwgXCJyb2xsYmFja1wiIHwgXCJzaGFkb3dcIjtcbiAgICAgICAgICB0YXJnZXRzOiAoa2V5b2YgU29uYW11REJDb25maWcpW107XG4gICAgICAgICAgZm9yY2U/OiBib29sZWFuO1xuICAgICAgICAgIGZvcmNlUmVhc29uPzogc3RyaW5nO1xuICAgICAgICAgIHJlcXVlc3Rvcj86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFxuICAgICAgICBcIi9hcGkvbWlncmF0aW9ucy9ydW5BY3Rpb25cIixcbiAgICAgICAgYXN5bmMgKHJlcXVlc3QpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdCB8IFNsYWNrQ29uZmlybVBlbmRpbmdSZXN1bHQ+ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGFjdGlvbiwgdGFyZ2V0cywgZm9yY2UsIGZvcmNlUmVhc29uLCByZXF1ZXN0b3IgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGlmIChhY3Rpb24gPT09IFwic2hhZG93XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBtaWdyYXRvci5ydW5TaGFkb3dUZXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2xhY2sg7Iq57J24IOyytO2BrCAoYXBwbHkg7Iuc7JeQ66eMKVxuICAgICAgICAgIGlmIChhY3Rpb24gPT09IFwiYXBwbHlcIikge1xuICAgICAgICAgICAgY29uc3Qgc2xhY2tDb25maXJtID0gbmV3IFNsYWNrQ29uZmlybSgpO1xuICAgICAgICAgICAgY29uc3QgcmVxdWlyZXNBcHByb3ZhbCA9IHRhcmdldHMuc29tZSgodCkgPT4gc2xhY2tDb25maXJtLmlzVGFyZ2V0UmVxdWlyZXNBcHByb3ZhbCh0KSk7XG5cbiAgICAgICAgICAgIC8vIOuhnOy7rCBEQuyduCDqsr3smrAg7Iq57J24IOyKpO2CtVxuICAgICAgICAgICAgY29uc3QgbG9jYWxIb3N0cyA9IFtcImxvY2FsaG9zdFwiLCBcIjEyNy4wLjAuMVwiLCBcIjAuMC4wLjBcIiwgXCI6OjFcIl07XG4gICAgICAgICAgICBjb25zdCBpc0xvY2FsVGFyZ2V0ID0gdGFyZ2V0cy5ldmVyeSgodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZ1t0YXJnZXRdO1xuICAgICAgICAgICAgICBjb25zdCBob3N0ID0gKHRhcmdldENvbmZpZz8uY29ubmVjdGlvbiBhcyB7IGhvc3Q/OiBzdHJpbmcgfSk/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsSG9zdHMuaW5jbHVkZXMoaG9zdC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAocmVxdWlyZXNBcHByb3ZhbCAmJiBzbGFja0NvbmZpcm0uaXNDb25maWd1cmVkKCkgJiYgIWlzTG9jYWxUYXJnZXQpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjb25ucyB9ID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG5cbiAgICAgICAgICAgICAgLy8g66qo65OgIO2DgOqynyBEQuyXkOyEnCBwZW5kaW5n7J24IOuniOydtOq3uOugiOydtOyFmOydmCDtlansp5HtlansnYQg6rWs7ZWp64uI64ukLlxuICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nTWlncmF0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgICAgICAgICAgY29ubnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY29ubikgPT4gdGFyZ2V0cy5pbmNsdWRlcyhjb25uLmNvbm5LZXkgYXMga2V5b2YgU29uYW11REJDb25maWcpKVxuICAgICAgICAgICAgICAgICAgICAuZmxhdE1hcCgoY29ubikgPT4gY29ubi5wZW5kaW5nKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgIGlmIChwZW5kaW5nTWlncmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8g6riw7KG0IOyKueyduCDsmpTssq0g7ZmV7J24XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBzbGFja0NvbmZpcm0uZ2V0RXhpc3RpbmdSZXF1ZXN0KHBlbmRpbmdNaWdyYXRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgLy8g6riw7KG0IOyalOyyreydtCDsnojsnLzrqbQg7Iq57J24IOyDge2DnCDtmZXsnbhcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgYXBwcm92ZWQsIHJlamVjdGVkIH0gPSBhd2FpdCBzbGFja0NvbmZpcm0uY2hlY2tBcHByb3ZhbChcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuY2hhbm5lbCxcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYXBwcm92ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g7Iq57J2465CoIOKGkiDsi6TtlolcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWlncmF0b3IucnVuQWN0aW9uKGFjdGlvbiwgdGFyZ2V0cyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNsYWNrQ29uZmlybS5sb2dFeGVjdXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5taWdyYXRpb25SZWplY3RlZFwiKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIOynhO2WiVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzbGFja0NvbmZpcm0uZm9yY2VBcHByb3ZhbChcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnRzLFxuICAgICAgICAgICAgICAgICAgICAgIGZvcmNlUmVhc29uID8/IFwi7IKs7JygIOyXhuydjFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWlncmF0b3IucnVuQWN0aW9uKGFjdGlvbiwgdGFyZ2V0cyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNsYWNrQ29uZmlybS5sb2dFeGVjdXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g64yA6riw7KSRXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogZXhpc3RpbmcuY2hhbm5lbCxcbiAgICAgICAgICAgICAgICAgICAgICB0czogZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIOyDiCDsirnsnbgg7JqU7LKtIOuwnOyGoVxuICAgICAgICAgICAgICAgICAgY29uc3QgeyBjaGFubmVsLCB0cyB9ID0gYXdhaXQgc2xhY2tDb25maXJtLnBvc3RBcHByb3ZhbFJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdNaWdyYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0b3IsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYXdhaXQgc2xhY2tDb25maXJtLnNhdmVSZXF1ZXN0KHBlbmRpbmdNaWdyYXRpb25zLCBjaGFubmVsLCB0cyk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGVuZGluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICB0cyxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1pZ3JhdG9yLnJ1bkFjdGlvbihhY3Rpb24sIHRhcmdldHMpO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgY2hhbm5lbDogc3RyaW5nO1xuICAgICAgICAgIHRzOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvbWlncmF0aW9ucy9jaGVja0FwcHJvdmFsXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hhbm5lbCwgdHMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgY29uc3Qgc2xhY2tDb25maXJtID0gbmV3IFNsYWNrQ29uZmlybSgpO1xuXG4gICAgICAgIGlmICghc2xhY2tDb25maXJtLmlzQ29uZmlndXJlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXBwcm92ZWQ6IHRydWUsIHJlamVjdGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNsYWNrQ29uZmlybS5jaGVja0FwcHJvdmFsKGNoYW5uZWwsIHRzKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBjaGFubmVsOiBzdHJpbmc7XG4gICAgICAgICAgdHM6IHN0cmluZztcbiAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgICByZXF1ZXN0b3I/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvbWlncmF0aW9ucy9mb3JjZUFwcHJvdmFsXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hhbm5lbCwgdHMsIHJlYXNvbiwgcmVxdWVzdG9yIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIGNvbnN0IHNsYWNrQ29uZmlybSA9IG5ldyBTbGFja0NvbmZpcm0oKTtcblxuICAgICAgICBpZiAoIXNsYWNrQ29uZmlybS5pc0NvbmZpZ3VyZWQoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLnNsYWNrQ29uZmlybU5vdENvbmZpZ3VyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgc2xhY2tDb25maXJtLmZvcmNlQXBwcm92YWwoY2hhbm5lbCwgdHMsIHJlYXNvbiwgcmVxdWVzdG9yKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGNvZGVOYW1lczogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvbWlncmF0aW9ucy9kZWxDb2Rlc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvZGVOYW1lcyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICByZXR1cm4gYXdhaXQgbWlncmF0b3IuZGVsQ29kZXMoY29kZU5hbWVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvbWlncmF0aW9ucy9nZW5lcmF0ZVByZXBhcmVkQ29kZXNcIiwgYXN5bmMgKF9yZXF1ZXN0dCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgbWlncmF0b3IuZ2VuZXJhdGVQcmVwYXJlZENvZGVzKCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWRzOiBzdHJpbmdbXTtcbiAgICAgICAgICB0ZW1wbGF0ZUtleXM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NjYWZmb2xkaW5nL2dldFN0YXR1c1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eUlkcywgdGVtcGxhdGVLZXlzOiBfdGVtcGxhdGVLZXlzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIGlmICgoZW50aXR5SWRzID8/IFtdKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5lbnRpdHlJZHNSZXF1aXJlZFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKF90ZW1wbGF0ZUtleXMgPz8gW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLnRlbXBsYXRlS2V5c1JlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNvcnRpbmdcbiAgICAgICAgZW50aXR5SWRzLnNvcnQoKGEsIGIpID0+IChhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMCkpO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUtleXMgPSBUZW1wbGF0ZUtleS5vcHRpb25zLmZpbHRlcigodGspID0+IF90ZW1wbGF0ZUtleXMuaW5jbHVkZXModGspKTtcblxuICAgICAgICBjb25zdCBjb21iaW5hdGlvbnMgPSBlbnRpdHlJZHMuZmxhdE1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGVLZXlzLm1hcCgodGVtcGxhdGVLZXkpID0+IFtlbnRpdHlJZCwgdGVtcGxhdGVLZXldKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBjb21iaW5hdGlvbnMubWFwKGFzeW5jIChbZW50aXR5SWQsIHRlbXBsYXRlS2V5XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzdWJQYXRoLCBmdWxsUGF0aCwgaXNFeGlzdHMgfSA9IGF3YWl0IFNvbmFtdS5zeW5jZXIuY2hlY2tFeGlzdHNHZW5Db2RlKFxuICAgICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICAgIHRlbXBsYXRlS2V5LFxuICAgICAgICAgICAgICBzdWJQYXRoLFxuICAgICAgICAgICAgICBmdWxsUGF0aCxcbiAgICAgICAgICAgICAgaXNFeGlzdHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4geyBzdGF0dXNlcyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgICB0ZW1wbGF0ZUtleTogc3RyaW5nO1xuICAgICAgICAgICAgZW51bUlkPzogc3RyaW5nO1xuICAgICAgICAgICAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgICAgICAgICB9W107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc2NhZmZvbGRpbmcvZ2VuZXJhdGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLm9wdGlvbnNSZXF1aXJlZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAxLiDrqqjrk6Ag7YWc7ZSM66a/7JeQ7IScIO2VhOyalO2VnCBkaWN0IO2CpOulvCDsiJjsp5FcbiAgICAgICAgY29uc3Qga2V5cyA9IG9wdGlvbnMuZmxhdE1hcCgoeyB0ZW1wbGF0ZUtleSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KHRlbXBsYXRlS2V5KTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZ2V0UmVxdWlyZWREaWN0S2V5cygpID8/IFtdO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAyLiB0YXJnZXTrs4TroZwgZW5zdXJlRGljdEtleXMg7Zi47LacICjsiJzssKgg7LKY66asKVxuICAgICAgICBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LmVuc3VyZURpY3RLZXlzKFsuLi5uZXcgU2V0KGtleXMpXSk7XG5cbiAgICAgICAgLy8gMy4g7YWc7ZSM66a/IOyDneyEsSAo67OR66CsIOyymOumrClcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgb3B0aW9ucy5tYXAoYXN5bmMgKHsgZW50aXR5SWQsIHRlbXBsYXRlS2V5LCBlbnVtSWQsIG92ZXJ3cml0ZSB9KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlS2V5IGFzIFRlbXBsYXRlS2V5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgICAgICAgZW51bUlkLFxuICAgICAgICAgICAgICAgIH0gYXMge1xuICAgICAgICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgIGVudW1JZD86IHN0cmluZztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBpZiAoaXNTb0V4Y2VwdGlvbihlKSAmJiBlLnN0YXR1c0NvZGUgPT09IDU0MSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChyZXN1bHQuZmlsdGVyKG5vbk51bGxhYmxlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmFsbEZpbGVzR2VuZXJhdGVkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIG9wdGlvbjoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIHRlbXBsYXRlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgICBlbnVtSWQ/OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zY2FmZm9sZGluZy9wcmV2aWV3XCIsIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTx7IHBhdGhBbmRDb2RlczogUGF0aEFuZENvZGVbXSB9PiA9PiB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHRlbXBsYXRlS2V5LCAuLi50ZW1wbGF0ZU9wdGlvbnMgfSA9IG9wdGlvbjtcbiAgICAgICAgICBjb25zdCBwYXRoQW5kQ29kZXMgPSBhd2FpdCBTb25hbXUuc3luY2VyLnJlbmRlclRlbXBsYXRlKFxuICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnMsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7IHBhdGhBbmRDb2RlcyB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3QoXCIvYXBpL2ZpeHR1cmVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBzb3VyY2VEQiwgdGFyZ2V0REIsIHNlYXJjaCwgZHVwbGljYXRlQ2hlY2sgfSA9IHJlcXVlc3QuYm9keSBhcyB7XG4gICAgICAgICAgc291cmNlREI6IGtleW9mIFNvbmFtdURCQ29uZmlnO1xuICAgICAgICAgIHRhcmdldERCOiBrZXlvZiBTb25hbXVEQkNvbmZpZztcbiAgICAgICAgICBzZWFyY2g6IEZpeHR1cmVTZWFyY2hPcHRpb25zO1xuICAgICAgICAgIGR1cGxpY2F0ZUNoZWNrPzogRHVwbGljYXRlQ2hlY2tPcHRpb25zO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBGaXh0dXJlTWFuYWdlci5nZXRGaXh0dXJlcyhzb3VyY2VEQiwgdGFyZ2V0REIsIHNlYXJjaCwgZHVwbGljYXRlQ2hlY2spO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9maXh0dXJlL2ltcG9ydFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRiLCBmaXh0dXJlcyB9ID0gcmVxdWVzdC5ib2R5IGFzIHtcbiAgICAgICAgICBkYjoga2V5b2YgU29uYW11REJDb25maWc7XG4gICAgICAgICAgZml4dHVyZXM6IEZpeHR1cmVSZWNvcmRbXTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gRml4dHVyZU1hbmFnZXIuaW5zZXJ0Rml4dHVyZXMoZGIsIGZpeHR1cmVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvZml4dHVyZS9hZGRGaXh0dXJlTG9hZGVyXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29kZSB9ID0gcmVxdWVzdC5ib2R5IGFzIHsgY29kZTogc3RyaW5nIH07XG5cbiAgICAgICAgcmV0dXJuIEZpeHR1cmVNYW5hZ2VyLmFkZEZpeHR1cmVMb2FkZXIoY29kZSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvaTE4bi9kaWN0aW9uYXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHNvbmFtdURpY3Rpb25hcnkuZ2V0RGljdGlvbmFyeSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL2kxOG4vZXhwb3J0XCIsIGFzeW5jIChfcmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWxlbmFtZSwgYnVmZmVyIH0gPSBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LmV4cG9ydFRvRXhjZWwoKTtcbiAgICAgICAgcmVwbHlcbiAgICAgICAgICAuaGVhZGVyKFxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRcIixcbiAgICAgICAgICApXG4gICAgICAgICAgLmhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb25cIiwgYGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiJHtmaWxlbmFtZX1cImApXG4gICAgICAgICAgLnNlbmQoYnVmZmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvaTE4bi9pbXBvcnRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcXVlc3QuZmlsZSgpO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5maWxlTm90VXBsb2FkZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGRhdGEudG9CdWZmZXIoKTtcbiAgICAgICAgcmV0dXJuIHNvbmFtdURpY3Rpb25hcnkuaW1wb3J0RnJvbUV4Y2VsKGJ1ZmZlcik7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgb2xkS2V5OiBzdHJpbmc7XG4gICAgICAgICAgbmV3S2V5OiBzdHJpbmc7XG4gICAgICAgICAgc291cmNlOiBcImVudGl0eVwiIHwgXCJwcm9qZWN0XCIgfCBcInNvbmFtdVwiO1xuICAgICAgICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9pMThuL3VwZGF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LnVwZGF0ZUVudHJ5KHJlcXVlc3QuYm9keSk7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvaTE4bi9jcmVhdGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgYXdhaXQgc29uYW11RGljdGlvbmFyeS5jcmVhdGVFbnRyeShyZXF1ZXN0LmJvZHkpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvaTE4bi9kZWxldGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgYXdhaXQgc29uYW11RGljdGlvbmFyeS5kZWxldGVFbnRyeShyZXF1ZXN0LmJvZHkua2V5KTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHsgQm9keTogeyBrZXlzOiBzdHJpbmdbXSB9IH0+KFwiL2FwaS9pMThuL2NoZWNrVXNhZ2VcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIHNvbmFtdURpY3Rpb25hcnkuY2hlY2tVc2FnZShyZXF1ZXN0LmJvZHkua2V5cyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGFza3MgQVBJXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS90YXNrcy9zdGF0dXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4geyBhY3RpdmU6IFNvbmFtdS53b3JrZmxvd3MgIT09IG51bGwgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS90YXNrcy93b3JrZmxvd0RlZmluaXRpb25zXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCFTb25hbXUud29ya2Zsb3dzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtmbG93cyBub3QgaW5pdGlhbGl6ZWQgKGRhdGFiYXNlIG5vdCBjb25maWd1cmVkKVwiKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSBTb25hbXUud29ya2Zsb3dzLndvcmtmbG93RGVmaW5pdGlvbnM7XG4gICAgICAgIHJldHVybiB7IGRlZmluaXRpb25zIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgbGltaXQ/OiBzdHJpbmc7XG4gICAgICAgICAgYWZ0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgYmVmb3JlPzogc3RyaW5nO1xuICAgICAgICAgIG9yZGVyPzogXCJhc2NcIiB8IFwiZGVzY1wiO1xuICAgICAgICAgIHN0YXR1cz86IHN0cmluZztcbiAgICAgICAgICB3b3JrZmxvd05hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgY3JlYXRlZEFmdGVyPzogc3RyaW5nO1xuICAgICAgICAgIGNyZWF0ZWRCZWZvcmU/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvdGFza3Mvd29ya2Zsb3dSdW5zXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGlmICghU29uYW11LndvcmtmbG93cylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZmxvd3Mgbm90IGluaXRpYWxpemVkIChkYXRhYmFzZSBub3QgY29uZmlndXJlZClcIik7XG4gICAgICAgIGNvbnN0IGJhY2tlbmQgPSBTb25hbXUud29ya2Zsb3dzLmJhY2tlbmQ7XG4gICAgICAgIGNvbnN0IHsgbGltaXQsIGFmdGVyLCBiZWZvcmUsIG9yZGVyLCBzdGF0dXMsIHdvcmtmbG93TmFtZSwgY3JlYXRlZEFmdGVyLCBjcmVhdGVkQmVmb3JlIH0gPVxuICAgICAgICAgIHJlcXVlc3QucXVlcnk7XG4gICAgICAgIHJldHVybiBiYWNrZW5kLmxpc3RXb3JrZmxvd1J1bnMoe1xuICAgICAgICAgIGxpbWl0OiBsaW1pdCA/IE51bWJlci5wYXJzZUludChsaW1pdCwgMTApIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGFmdGVyLFxuICAgICAgICAgIGJlZm9yZSxcbiAgICAgICAgICBvcmRlcixcbiAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA/IHN0YXR1cy5zcGxpdChcIixcIikgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd29ya2Zsb3dOYW1lOiB3b3JrZmxvd05hbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGNyZWF0ZWRBZnRlcjogY3JlYXRlZEFmdGVyID8gbmV3IERhdGUoY3JlYXRlZEFmdGVyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjcmVhdGVkQmVmb3JlOiBjcmVhdGVkQmVmb3JlID8gbmV3IERhdGUoY3JlYXRlZEJlZm9yZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBQYXJhbXM6IHsgaWQ6IHN0cmluZyB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVucy86aWRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgaWYgKCFTb25hbXUud29ya2Zsb3dzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtmbG93cyBub3QgaW5pdGlhbGl6ZWQgKGRhdGFiYXNlIG5vdCBjb25maWd1cmVkKVwiKTtcbiAgICAgICAgY29uc3QgYmFja2VuZCA9IFNvbmFtdS53b3JrZmxvd3MuYmFja2VuZDtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dSdW4gPSBhd2FpdCBiYWNrZW5kLmdldFdvcmtmbG93UnVuKHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkOiByZXF1ZXN0LnBhcmFtcy5pZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghd29ya2Zsb3dSdW4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IHJ1biBub3QgZm91bmQ6ICR7cmVxdWVzdC5wYXJhbXMuaWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmtmbG93UnVuO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgUGFyYW1zOiB7IGlkOiBzdHJpbmcgfTtcbiAgICAgIH0+KFwiL2FwaS90YXNrcy93b3JrZmxvd1J1bnMvOmlkL2NhbmNlbFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBpZiAoIVNvbmFtdS53b3JrZmxvd3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV29ya2Zsb3dzIG5vdCBpbml0aWFsaXplZCAoZGF0YWJhc2Ugbm90IGNvbmZpZ3VyZWQpXCIpO1xuICAgICAgICBjb25zdCBiYWNrZW5kID0gU29uYW11LndvcmtmbG93cy5iYWNrZW5kO1xuICAgICAgICByZXR1cm4gYmFja2VuZC5jYW5jZWxXb3JrZmxvd1J1bih7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZDogcmVxdWVzdC5wYXJhbXMuaWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgUGFyYW1zOiB7IGlkOiBzdHJpbmcgfTtcbiAgICAgIH0+KFwiL2FwaS90YXNrcy93b3JrZmxvd1J1bnMvOmlkL3BhdXNlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGlmICghU29uYW11LndvcmtmbG93cylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZmxvd3Mgbm90IGluaXRpYWxpemVkIChkYXRhYmFzZSBub3QgY29uZmlndXJlZClcIik7XG4gICAgICAgIGNvbnN0IGJhY2tlbmQgPSBTb25hbXUud29ya2Zsb3dzLmJhY2tlbmQ7XG4gICAgICAgIHJldHVybiBiYWNrZW5kLnBhdXNlV29ya2Zsb3dSdW4oe1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQ6IHJlcXVlc3QucGFyYW1zLmlkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIFBhcmFtczogeyBpZDogc3RyaW5nIH07XG4gICAgICB9PihcIi9hcGkvdGFza3Mvd29ya2Zsb3dSdW5zLzppZC9yZXN1bWVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgaWYgKCFTb25hbXUud29ya2Zsb3dzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtmbG93cyBub3QgaW5pdGlhbGl6ZWQgKGRhdGFiYXNlIG5vdCBjb25maWd1cmVkKVwiKTtcbiAgICAgICAgY29uc3QgYmFja2VuZCA9IFNvbmFtdS53b3JrZmxvd3MuYmFja2VuZDtcbiAgICAgICAgcmV0dXJuIGJhY2tlbmQucmVzdW1lV29ya2Zsb3dSdW4oe1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQ6IHJlcXVlc3QucGFyYW1zLmlkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUGFyYW1zOiB7IGlkOiBzdHJpbmcgfTtcbiAgICAgICAgUXVlcnlzdHJpbmc6IHtcbiAgICAgICAgICBsaW1pdD86IHN0cmluZztcbiAgICAgICAgICBhZnRlcj86IHN0cmluZztcbiAgICAgICAgICBiZWZvcmU/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvdGFza3Mvd29ya2Zsb3dSdW5zLzppZC9zdGVwc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBpZiAoIVNvbmFtdS53b3JrZmxvd3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV29ya2Zsb3dzIG5vdCBpbml0aWFsaXplZCAoZGF0YWJhc2Ugbm90IGNvbmZpZ3VyZWQpXCIpO1xuICAgICAgICBjb25zdCBiYWNrZW5kID0gU29uYW11LndvcmtmbG93cy5iYWNrZW5kO1xuICAgICAgICBjb25zdCB7IGxpbWl0LCBhZnRlciwgYmVmb3JlIH0gPSByZXF1ZXN0LnF1ZXJ5O1xuICAgICAgICByZXR1cm4gYmFja2VuZC5saXN0U3RlcEF0dGVtcHRzKHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkOiByZXF1ZXN0LnBhcmFtcy5pZCxcbiAgICAgICAgICBsaW1pdDogbGltaXQgPyBOdW1iZXIucGFyc2VJbnQobGltaXQsIDEwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhZnRlcixcbiAgICAgICAgICBiZWZvcmUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogSGVhbHRoIENoZWNrIEFQSVxuICAgICAgICogTUNQIOuPhOq1rOqwgCBTb25hbXUg7ISc67KE66W8IOyekOuPmSDqsJDsp4DtlZjquLAg7JyE7ZWcIOyXlOuTnO2PrOyduO2KuFxuICAgICAgICovXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9zb25hbXUvaGVhbHRoXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSByZXF1ZXN0LnNlcnZlci5zZXJ2ZXIuYWRkcmVzcygpO1xuICAgICAgICBjb25zdCBwb3J0ID0gYWRkcmVzcyAmJiB0eXBlb2YgYWRkcmVzcyA9PT0gXCJvYmplY3RcIiA/IChhZGRyZXNzIGFzIEFkZHJlc3NJbmZvKS5wb3J0IDogMDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9rOiB0cnVlLFxuICAgICAgICAgIHByb2plY3Q6IHByb2Nlc3MuY3dkKCkuc3BsaXQoXCIvXCIpLnBvcCgpIHx8IFwidW5rbm93blwiLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBGaXh0dXJlIOyDneyEsSBBUElcbiAgICAgICAqL1xuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5OiBzdHJpbmc7XG4gICAgICAgICAgY291bnQ/OiBudW1iZXI7XG4gICAgICAgICAgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgdGFyZ2V0RGI/OiBcImZpeHR1cmVcIiB8IFwidGVzdFwiO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NvbmFtdS9maXh0dXJlL2dlbmVyYXRlXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eSwgY291bnQgPSAxLCBvdmVycmlkZXMsIHRhcmdldERiID0gXCJmaXh0dXJlXCIgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAvLyDtg4Dqsp8gREIg7ISk7KCVIOqwgOyguOyYpOq4sFxuICAgICAgICBjb25zdCBkYkNvbmZpZyA9IHRhcmdldERiID09PSBcImZpeHR1cmVcIiA/IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlIDogU29uYW11LmRiQ29uZmlnLnRlc3Q7XG5cbiAgICAgICAgLy8gS25leCDsnbjsiqTthLTsiqQg7IOd7ISxXG4gICAgICAgIGNvbnN0IGRiID0gY3JlYXRlS25leEluc3RhbmNlKGRiQ29uZmlnKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEZpeHR1cmVHZW5lcmF0b3Ig7IOd7ISxXG4gICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEZpeHR1cmVHZW5lcmF0b3IoZGIsIGRiLCB0YXJnZXREYiwgRW50aXR5TWFuYWdlcik7XG5cbiAgICAgICAgICAvLyDri6jsnbwgRW50aXR5IOuwsOy5mCDsg53shLFcbiAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGF3YWl0IGdlbmVyYXRvci5nZW5lcmF0ZUJhdGNoKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBjb3VudCxcbiAgICAgICAgICAgICAgb3ZlcnJpZGVzOiBvdmVycmlkZXMgPz8ge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBjb3VudDogZml4dHVyZXMubGVuZ3RoLFxuICAgICAgICAgICAgZml4dHVyZXMsXG4gICAgICAgICAgICB0YXJnZXREYixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlcGx5LnN0YXR1cyg0MDApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIEZpeHR1cmUg642w7J207YSwIO2DkOyDiSBBUElcbiAgICAgICAqL1xuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5OiBzdHJpbmc7XG4gICAgICAgICAgc3RyYXRlZ3k6IFwic2FtcGxlXCIgfCBcInJlY2VudFwiIHwgXCJyYW5kb21cIiB8IFwicXVlcnlcIjtcbiAgICAgICAgICBsaW1pdD86IG51bWJlcjtcbiAgICAgICAgICB3aGVyZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NvbmFtdS9maXh0dXJlL2V4cGxvcmVcIiwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5LCBzdHJhdGVneSwgbGltaXQgPSAxMCwgd2hlcmUgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAvLyBGaXh0dXJlIERCIOyEpOyglSDqsIDsoLjsmKTquLBcbiAgICAgICAgY29uc3QgZml4dHVyZURiQ29uZmlnID0gU29uYW11LmRiQ29uZmlnLmZpeHR1cmU7XG5cbiAgICAgICAgLy8gS25leCDsnbjsiqTthLTsiqQg7IOd7ISxXG4gICAgICAgIGNvbnN0IGZpeHR1cmVEYiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShmaXh0dXJlRGJDb25maWcpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gRGF0YUV4cGxvcmVyIOyDneyEsVxuICAgICAgICAgIGNvbnN0IGV4cGxvcmVyID0gbmV3IERhdGFFeHBsb3JlcihmaXh0dXJlRGIsIEVudGl0eU1hbmFnZXIpO1xuXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGV4cGxvcmVyLmV4cGxvcmUoZW50aXR5LCB7XG4gICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgd2hlcmUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgIHN0cmF0ZWd5LFxuICAgICAgICAgICAgY291bnQ6IGRhdGEubGVuZ3RoLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlcGx5LnN0YXR1cyg0MDApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBhd2FpdCBmaXh0dXJlRGIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBGaXh0dXJlIOuNsOydtO2EsCDqsIDsoLjsmKTquLAgKGZldGNoKSBBUElcbiAgICAgICAqIHByb2R1Y3Rpb24vZGV2ZWxvcG1lbnQgRELsl5DshJwg7Iuk7KCcIOuNsOydtO2EsOulvCBmaXh0dXJlIERC66GcIGltcG9ydFxuICAgICAgICovXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHk6IHN0cmluZztcbiAgICAgICAgICBzdHJhdGVneT86IFwic2FtcGxlXCIgfCBcInJlY2VudFwiIHwgXCJyYW5kb21cIiB8IFwicXVlcnlcIjtcbiAgICAgICAgICBsaW1pdD86IG51bWJlcjtcbiAgICAgICAgICBpbmNsdWRlUmVsYXRpb25zPzogYm9vbGVhbjtcbiAgICAgICAgICBtYXhEZXB0aD86IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zb25hbXUvZml4dHVyZS9mZXRjaFwiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBzdHJhdGVneSA9IFwicmVjZW50XCIsXG4gICAgICAgICAgbGltaXQgPSAxMCxcbiAgICAgICAgICBpbmNsdWRlUmVsYXRpb25zID0gdHJ1ZSxcbiAgICAgICAgICBtYXhEZXB0aCA9IDIsXG4gICAgICAgIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgLy8gU291cmNlIERCIChwcm9kdWN0aW9uL2RldmVsb3BtZW50KSAtIOydveq4sCDsoITsmqlcbiAgICAgICAgY29uc3Qgc291cmNlRGIgPSBEQi5nZXREQihcInJcIik7XG5cbiAgICAgICAgLy8gVGFyZ2V0IERCIChmaXh0dXJlKVxuICAgICAgICBjb25zdCBmaXh0dXJlRGIgPSBjcmVhdGVLbmV4SW5zdGFuY2UoU29uYW11LmRiQ29uZmlnLmZpeHR1cmUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gRml4dHVyZUdlbmVyYXRvciDsg53shLFcbiAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihzb3VyY2VEYiwgZml4dHVyZURiLCBcImZpeHR1cmVcIiwgRW50aXR5TWFuYWdlcik7XG5cbiAgICAgICAgICAvLyBwcm9kdWN0aW9uIOuNsOydtO2EsOulvCBmaXh0dXJlIERC66GcIGltcG9ydFxuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZW5lcmF0b3IuaW1wb3J0RnJvbVNvdXJjZShlbnRpdHksIHtcbiAgICAgICAgICAgIHN0cmF0ZWd5LFxuICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICBpbmNsdWRlUmVsYXRpb25zLFxuICAgICAgICAgICAgbWF4RGVwdGgsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgIHN0cmF0ZWd5LFxuICAgICAgICAgICAgY291bnQ6IHJlc3VsdHMubGVuZ3RoLFxuICAgICAgICAgICAgaW1wb3J0ZWQ6IHJlc3VsdHMsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXBseS5zdGF0dXMoNDAwKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gc291cmNlRGLripQgU29uYW116rCAIOq0gOumrO2VmOuvgOuhnCBkZXN0cm957ZWY7KeAIOyViuydjFxuICAgICAgICAgIGF3YWl0IGZpeHR1cmVEYi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIEZpeHR1cmUg642w7J207YSwIOyCreygnCAoY2xlYW4pIEFQSVxuICAgICAgICogRksg7Iic7ISc66W8IOqzoOugpO2VmOyXrCDslYjsoITtlZjqsowg7IKt7KCcXG4gICAgICAgKi9cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0aWVzPzogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc29uYW11L2ZpeHR1cmUvY2xlYW5cIiwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXRpZXMgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAvLyBGaXh0dXJlIERCIOyXsOqysFxuICAgICAgICBjb25zdCBmaXh0dXJlRGIgPSBjcmVhdGVLbmV4SW5zdGFuY2UoU29uYW11LmRiQ29uZmlnLmZpeHR1cmUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8g7IKt7KCc7ZWgIEVudGl0eSDrqqnroZ0g6rKw7KCVXG4gICAgICAgICAgY29uc3QgdGFyZ2V0RW50aXRpZXMgPVxuICAgICAgICAgICAgZW50aXRpZXMgJiYgZW50aXRpZXMubGVuZ3RoID4gMCA/IGVudGl0aWVzIDogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcblxuICAgICAgICAgIC8vIEVudGl0eSBJROulvCDthYzsnbTruJTrqoXsnLzroZwg67OA7ZmYIChzbmFrZV9jYXNlIOuzteyImO2YlSlcbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWVzID0gdGFyZ2V0RW50aXRpZXMubWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgcmV0dXJuIGVudGl0eS50YWJsZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFBvc3RncmVTUUw6IFRSVU5DQVRFIENBU0NBREXroZwgRksg7Iic7IScIOustOq0gO2VmOqyjCDslYjsoITtlZjqsowg7IKt7KCcXG4gICAgICAgICAgLy8gQ0FTQ0FERSDsmLXshZjsnLzroZwg7J2Y7KG07ISxIOyeiOuKlCDrjbDsnbTthLDrj4Qg7ZWo6ruYIOyCreygnFxuICAgICAgICAgIGF3YWl0IGZpeHR1cmVEYi5yYXcoXG4gICAgICAgICAgICBgVFJVTkNBVEUgVEFCTEUgJHt0YWJsZU5hbWVzLm1hcCgodCkgPT4gYFwiJHt0fVwiYCkuam9pbihcIiwgXCIpfSBSRVNUQVJUIElERU5USVRZIENBU0NBREVgLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGNsZWFuZWQ6IHRhYmxlTmFtZXMsXG4gICAgICAgICAgICBjb3VudDogdGFibGVOYW1lcy5sZW5ndGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXBseS5zdGF0dXMoNDAwKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYXdhaXQgZml4dHVyZURiLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENERCBBUElcbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL2NkZC9kYXNoYm9hcmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0RGFzaGJvYXJkKCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvY2RkL3RyZWVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0Q2RkVHJlZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHsgQm9keTogeyBmaWxlUGF0aDogc3RyaW5nIH0gfT4oXCIvYXBpL2NkZC9yZWFkQ29udGVudFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGZpbGVQYXRoIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGVudChmaWxlUGF0aCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8eyBCb2R5OiB7IGZpbGVQYXRoOiBzdHJpbmcgfSB9PihcIi9hcGkvY2RkL2VkaXRDb250ZW50XCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmlsZVBhdGggfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgcmV0dXJuIGVkaXRDb250ZW50KGZpbGVQYXRoKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7IEJvZHk6IHsgZmlsZVBhdGg6IHN0cmluZyB9IH0+KFwiL2FwaS9jZGQvb3BlblNvdXJjZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGZpbGVQYXRoIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIG9wZW5Tb3VyY2VGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIENERCBTY2hlbWEgQVBJXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9jZGQvc2NoZW1hc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBsaXN0U2NoZW1hcygpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHsgQm9keTogeyBzY2hlbWFLZXk6IHN0cmluZyB9IH0+KFwiL2FwaS9jZGQvcmVhZFNjaGVtYVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IHNjaGVtYUtleSB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICByZXR1cm4gcmVhZFNjaGVtYShzY2hlbWFLZXkpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHsgQm9keTogeyBzY2hlbWFLZXk6IHN0cmluZyB9IH0+KFwiL2FwaS9jZGQvZWRpdFNjaGVtYVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IHNjaGVtYUtleSB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICByZXR1cm4gZWRpdFNjaGVtYShzY2hlbWFLZXkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHVpLXdlYiDruYzrk5wg7YyM7J28IOyEnOu5mVxuICAgICAgY29uc3QgdWlEaXN0UGF0aCA9IHBhdGgucmVzb2x2ZShpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uL3VpLXdlYlwiKTtcblxuICAgICAgLy8g7KCV7KCBIO2MjOydvCDshJzruZk6IOujqO2KuCDtj7TrjZQg7KCE7LK0IChhc3NldHMsIHNldHRpbmcuc3ZnIOuTsSlcbiAgICAgIHNlcnZlci5yZWdpc3Rlcihhd2FpdCBpbXBvcnQoXCJAZmFzdGlmeS9zdGF0aWNcIiksIHtcbiAgICAgICAgcm9vdDogdWlEaXN0UGF0aCxcbiAgICAgICAgcHJlZml4OiBcIi9cIixcbiAgICAgICAgZGVjb3JhdGVSZXBseTogZmFsc2UsXG4gICAgICAgIHdpbGRjYXJkOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTUEEgZmFsbGJhY2sgLSDsoJXsoIEg7YyM7J287J20IOyXhuuKlCDrqqjrk6Ag6rK966Gc64qUIGluZGV4Lmh0bWzroZxcbiAgICAgIHNlcnZlci5nZXQoXCIqXCIsIGFzeW5jIChfcmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgcmVwbHkuaGVhZGVycyh7IFwiQ29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSkuc2VuZChcbiAgICAgICAgICBmc1xuICAgICAgICAgICAgLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUodWlEaXN0UGF0aCwgXCJpbmRleC5odG1sXCIpKVxuICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC5yZXBsYWNlKFwie3twcm9qZWN0TmFtZX19XCIsIFNvbmFtdS5jb25maWcucHJvamVjdE5hbWUgPz8gXCJVbmtub3duU29uYW11UHJvamVjdFwiKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgeyBwcmVmaXg6IFwiL3NvbmFtdS11aVwiIH0sXG4gICk7XG59XG4iXSwibmFtZXMiOlsiZXhlY1N5bmMiLCJmcyIsImluZmxlY3Rpb24iLCJwYXRoIiwicmFuZ2UiLCJTb25hbXUiLCJEQiIsImNyZWF0ZUtuZXhJbnN0YW5jZSIsIlNEIiwic29uYW11RGljdGlvbmFyeSIsIkVudGl0eU1hbmFnZXIiLCJCYWRSZXF1ZXN0RXhjZXB0aW9uIiwiaXNTb0V4Y2VwdGlvbiIsIlNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiIsIk1pZ3JhdG9yIiwiU2xhY2tDb25maXJtIiwiVGVtcGxhdGVNYW5hZ2VyIiwiRGF0YUV4cGxvcmVyIiwiRml4dHVyZUdlbmVyYXRvciIsIkZpeHR1cmVNYW5hZ2VyIiwiQlVJTFRfSU5fVFlQRV9JRFMiLCJUZW1wbGF0ZUtleSIsIm5vbk51bGxhYmxlIiwic2V0QWlBcGkiLCJlZGl0Q29udGVudCIsImVkaXRTY2hlbWEiLCJnZXRDZGRUcmVlIiwiZ2V0RGFzaGJvYXJkIiwibGlzdFNjaGVtYXMiLCJvcGVuU291cmNlRmlsZSIsInJlYWRDb250ZW50IiwicmVhZFNjaGVtYSIsInNvbmFtdVVJQXBpUGx1Z2luIiwiZmFzdGlmeSIsInJlZ2lzdGVyIiwic2VydmVyIiwibWlncmF0b3IiLCJ3YWl0Rm9ySE1SQ29tcGxldGVkIiwiZm4iLCJ3YWl0UHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGFuZGxlciIsImNsZWFyVGltZW91dCIsInRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwic3luY2VyIiwiZXZlbnRFbWl0dGVyIiwib2ZmIiwib25jZSIsInJlc3VsdCIsImdldCIsImNvbmZpZyIsInJlcXVlc3QiLCJlbnRpdHlJZCIsInByZXNldCIsImFic1BhdGgiLCJxdWVyeSIsInRhcmdldFBhdGgiLCJlbnRpdHkiLCJuYW1lcyIsImFwaVJvb3RQYXRoIiwiZmlsZW5hbWUiLCJwYXJlbnRGcyIsIm9yaWdpbiIsImdsb3NzYXJ5IiwiTWFwIiwiZ2V0QWxsSWRzIiwidGl0bGUiLCJzZXQiLCJ1bmRlcnNjb3JlIiwiaWQiLCJwbHVyYWxpemUiLCJwcm9wcyIsImZvckVhY2giLCJwcm9wIiwiaGFzIiwibmFtZSIsImRlc2MiLCJyZXBsYWNlIiwic3VnZ2VzdGVkIiwid29yZHMiLCJzcGxpdCIsImNvbWJpbmF0aW9ucyIsImxlbmd0aCIsImZsYXRNYXAiLCJsZW4iLCJpZHgiLCJ3Iiwic2xpY2UiLCJqb2luIiwiUkVQTEFDRURfUFJFRklYIiwicmVtYWluQXJyIiwiY29tYiIsInJlbWFpblN0ciIsImluY2x1ZGVzIiwibWFwIiwiciIsInN0YXJ0c1dpdGgiLCJ0b1VwcGVyQ2FzZSIsImVudGl0eUlkcyIsImZsYXR0ZW5TdWJzZXRSb3dzIiwic3Vic2V0Um93cyIsInN1YnNldFJvdyIsImNoaWxkcmVuIiwic1JvdyIsImVudGl0aWVzIiwiYWxsIiwiZ2V0U3Vic2V0Um93cyIsInNvcnQiLCJhIiwiYiIsImFJZCIsInBhcmVudElkIiwiYklkIiwidW5kZWZpbmVkIiwiZmlsdGVyIiwicmVsb2FkIiwiYXV0b2xvYWRUeXBlcyIsInR5cGVJZHMiLCJwcm9qZWN0VHlwZUlkcyIsIk9iamVjdCIsImVudHJpZXMiLCJ0eXBlcyIsIl90eXBlSWQiLCJ6b2RUeXBlIiwiX3pvZCIsImRlZiIsInR5cGUiLCJ0eXBlSWQiLCJfem9kVHlwZSIsImJ1aWx0SW5UeXBlSWRzIiwiYWxsVHlwZUlkcyIsImVudW1JZHMiLCJrZXlzIiwiZW51bUxhYmVscyIsInBvc3QiLCJmb3JtIiwiYm9keSIsImNyZWF0ZUVudGl0eSIsImRlbEVudGl0eSIsIm5ld1ZhbHVlcyIsInRhYmxlIiwic2F2ZSIsInN1YnNldEtleSIsImZpZWxkcyIsImZpZWxkc0ludGVybmFsIiwic3Vic2V0cyIsInN1YnNldHNJbnRlcm5hbCIsInVwZGF0ZWQiLCJ1cGRhdGVkSW50ZXJuYWwiLCJhdCIsIm5ld1Byb3AiLCJjcmVhdGVQcm9wIiwibW9kaWZ5UHJvcCIsImRlbFByb3AiLCJ0byIsIm1vdmVQcm9wIiwiaW5kZXhlcyIsIm5ld0VudW1JZCIsIkVycm9yIiwiZW5kc1dpdGgiLCJhY3RpdmUiLCJoaWRkZW4iLCJlbnVtSWQiLCJpc0V4aXN0cyIsInNvbWUiLCJhZnRlciIsImJlZm9yZSIsImlzUmVmZXJlbmNlZCIsInRhcmdldCIsInByb3BOYW1lIiwiY29uZSIsImZpbmQiLCJwIiwiZW51bUNvbmVzIiwic3Vic2V0Q29uZXMiLCJyZXBseSIsInByZXNlcnZlRXhpc3RpbmciLCJvbmx5RW1wdHkiLCJsb2NhbGUiLCJlZmZlY3RpdmVMb2NhbGUiLCJpMThuIiwiZGVmYXVsdExvY2FsZSIsImdlbmVyYXRlQ29uZXMiLCJlcnJvciIsIm1lc3NhZ2UiLCJTdHJpbmciLCJzdGF0dXMiLCJzdWNjZXNzIiwiY29sdW1ucyIsImdldFRhYmxlQ29sdW1ucyIsImdldFN0YXR1cyIsImFjdGlvbiIsInRhcmdldHMiLCJmb3JjZSIsImZvcmNlUmVhc29uIiwicmVxdWVzdG9yIiwicnVuU2hhZG93VGVzdCIsInNsYWNrQ29uZmlybSIsInJlcXVpcmVzQXBwcm92YWwiLCJ0IiwiaXNUYXJnZXRSZXF1aXJlc0FwcHJvdmFsIiwibG9jYWxIb3N0cyIsImlzTG9jYWxUYXJnZXQiLCJldmVyeSIsInRhcmdldENvbmZpZyIsImRiQ29uZmlnIiwiaG9zdCIsImNvbm5lY3Rpb24iLCJ0b0xvd2VyQ2FzZSIsImlzQ29uZmlndXJlZCIsImNvbm5zIiwicGVuZGluZ01pZ3JhdGlvbnMiLCJTZXQiLCJjb25uIiwiY29ubktleSIsInBlbmRpbmciLCJleGlzdGluZyIsImdldEV4aXN0aW5nUmVxdWVzdCIsImFwcHJvdmVkIiwicmVqZWN0ZWQiLCJjaGVja0FwcHJvdmFsIiwiY2hhbm5lbCIsInRzIiwicnVuQWN0aW9uIiwibG9nRXhlY3V0aW9uIiwiZm9yY2VBcHByb3ZhbCIsInBvc3RBcHByb3ZhbFJlcXVlc3QiLCJzYXZlUmVxdWVzdCIsInJlYXNvbiIsImNvZGVOYW1lcyIsImRlbENvZGVzIiwiX3JlcXVlc3R0IiwiZ2VuZXJhdGVQcmVwYXJlZENvZGVzIiwidGVtcGxhdGVLZXlzIiwiX3RlbXBsYXRlS2V5cyIsIm9wdGlvbnMiLCJ0ayIsInRlbXBsYXRlS2V5Iiwic3RhdHVzZXMiLCJzdWJQYXRoIiwiZnVsbFBhdGgiLCJjaGVja0V4aXN0c0dlbkNvZGUiLCJ0ZW1wbGF0ZSIsImdldFJlcXVpcmVkRGljdEtleXMiLCJlbnN1cmVEaWN0S2V5cyIsIm92ZXJ3cml0ZSIsImdlbmVyYXRlVGVtcGxhdGUiLCJlIiwic3RhdHVzQ29kZSIsImNvbnNvbGUiLCJvcHRpb24iLCJ0ZW1wbGF0ZU9wdGlvbnMiLCJwYXRoQW5kQ29kZXMiLCJyZW5kZXJUZW1wbGF0ZSIsInNvdXJjZURCIiwidGFyZ2V0REIiLCJzZWFyY2giLCJkdXBsaWNhdGVDaGVjayIsImdldEZpeHR1cmVzIiwiZGIiLCJmaXh0dXJlcyIsImluc2VydEZpeHR1cmVzIiwiY29kZSIsImFkZEZpeHR1cmVMb2FkZXIiLCJnZXREaWN0aW9uYXJ5IiwiX3JlcXVlc3QiLCJidWZmZXIiLCJleHBvcnRUb0V4Y2VsIiwiaGVhZGVyIiwic2VuZCIsImRhdGEiLCJmaWxlIiwidG9CdWZmZXIiLCJpbXBvcnRGcm9tRXhjZWwiLCJ1cGRhdGVFbnRyeSIsImNyZWF0ZUVudHJ5IiwiZGVsZXRlRW50cnkiLCJrZXkiLCJjaGVja1VzYWdlIiwid29ya2Zsb3dzIiwiZGVmaW5pdGlvbnMiLCJ3b3JrZmxvd0RlZmluaXRpb25zIiwiYmFja2VuZCIsImxpbWl0Iiwib3JkZXIiLCJ3b3JrZmxvd05hbWUiLCJjcmVhdGVkQWZ0ZXIiLCJjcmVhdGVkQmVmb3JlIiwibGlzdFdvcmtmbG93UnVucyIsIk51bWJlciIsInBhcnNlSW50IiwiRGF0ZSIsIndvcmtmbG93UnVuIiwiZ2V0V29ya2Zsb3dSdW4iLCJ3b3JrZmxvd1J1bklkIiwicGFyYW1zIiwiY2FuY2VsV29ya2Zsb3dSdW4iLCJwYXVzZVdvcmtmbG93UnVuIiwicmVzdW1lV29ya2Zsb3dSdW4iLCJsaXN0U3RlcEF0dGVtcHRzIiwiYWRkcmVzcyIsInBvcnQiLCJvayIsInByb2plY3QiLCJwcm9jZXNzIiwiY3dkIiwicG9wIiwidGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJjb3VudCIsIm92ZXJyaWRlcyIsInRhcmdldERiIiwiZml4dHVyZSIsInRlc3QiLCJnZW5lcmF0b3IiLCJnZW5lcmF0ZUJhdGNoIiwiZGVzdHJveSIsInN0cmF0ZWd5Iiwid2hlcmUiLCJmaXh0dXJlRGJDb25maWciLCJmaXh0dXJlRGIiLCJleHBsb3JlciIsImV4cGxvcmUiLCJpbmNsdWRlUmVsYXRpb25zIiwibWF4RGVwdGgiLCJzb3VyY2VEYiIsImdldERCIiwicmVzdWx0cyIsImltcG9ydEZyb21Tb3VyY2UiLCJpbXBvcnRlZCIsInRhcmdldEVudGl0aWVzIiwidGFibGVOYW1lcyIsInJhdyIsImNsZWFuZWQiLCJmaWxlUGF0aCIsInNjaGVtYUtleSIsInVpRGlzdFBhdGgiLCJkaXJuYW1lIiwicm9vdCIsInByZWZpeCIsImRlY29yYXRlUmVwbHkiLCJ3aWxkY2FyZCIsImhlYWRlcnMiLCJyZWFkRmlsZVN5bmMiLCJ0b1N0cmluZyIsInByb2plY3ROYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFRLFFBQVEsZ0JBQWdCO0FBRXpDLE9BQU9DLFFBQVEsS0FBSztBQUNwQixPQUFPQyxnQkFBZ0IsYUFBYTtBQUVwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsS0FBSyxRQUFRLFVBQVU7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUFTQyxFQUFFLFFBQTZCLG9CQUFpQjtBQUN6RCxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBbUI7QUFDdEQsU0FBU0MsRUFBRSxRQUFRLGdCQUFhO0FBQ2hDLFNBQVNDLGdCQUFnQixRQUFRLCtCQUE0QjtBQUU3RCxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBQ3pELFNBQ0VDLG1CQUFtQixFQUNuQkMsYUFBYSxFQUNiQywyQkFBMkIsUUFDdEIsaUNBQThCO0FBQ3JDLFNBQStCQyxRQUFRLFFBQVEsMkJBQXdCO0FBQ3ZFLFNBQVNDLFlBQVksUUFBd0MsZ0NBQTZCO0FBQzFGLFNBQVNDLGVBQWUsUUFBUSxrQ0FBK0I7QUFDL0QsU0FBU0MsWUFBWSxRQUFRLDhCQUEyQjtBQUN4RCxTQUFTQyxnQkFBZ0IsUUFBUSxrQ0FBK0I7QUFDaEUsU0FBcUNDLGNBQWMsUUFBUSxnQ0FBNkI7QUFDeEYsU0FDRUMsaUJBQWlCLEVBU2pCQyxXQUFXLFFBQ04sb0JBQWlCO0FBQ3hCLFNBQVNDLFdBQVcsUUFBUSxvQkFBaUI7QUFDN0MsU0FBU0MsUUFBUSxRQUFRLGNBQVc7QUFDcEMsU0FDRUMsV0FBVyxFQUNYQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxXQUFXLEVBQ1hDLGNBQWMs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
1149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQWRkcmVzc0luZm8gfSBmcm9tIFwibmV0XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcmFuZ2UgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCLCB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgc29uYW11RGljdGlvbmFyeSB9IGZyb20gXCIuLi9kaWN0L3NvbmFtdS1kaWN0aW9uYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eSB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgaXNTb0V4Y2VwdGlvbixcbiAgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uLFxufSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIE1pZ3JhdGlvblJlc3VsdCwgTWlncmF0b3IgfSBmcm9tIFwiLi4vbWlncmF0aW9uL21pZ3JhdG9yXCI7XG5pbXBvcnQgeyBTbGFja0NvbmZpcm0sIHR5cGUgU2xhY2tDb25maXJtUGVuZGluZ1Jlc3VsdCB9IGZyb20gXCIuLi9taWdyYXRpb24vc2xhY2stY29uZmlybVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IEZpeHR1cmVHZW5lcmF0b3IgfSBmcm9tIFwiLi4vdGVzdGluZy9maXh0dXJlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHlwZSBEdXBsaWNhdGVDaGVja09wdGlvbnMsIEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgdHlwZSBDb25lLFxuICB0eXBlIEVudGl0eUluZGV4LFxuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5U3Vic2V0Um93LFxuICB0eXBlIEZpeHR1cmVSZWNvcmQsXG4gIHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMsXG4gIHR5cGUgRmxhdHRlblN1YnNldFJvdyxcbiAgdHlwZSBQYXRoQW5kQ29kZSxcbiAgVGVtcGxhdGVLZXksXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHNldEFpQXBpIH0gZnJvbSBcIi4vYWktYXBpXCI7XG5pbXBvcnQge1xuICBlZGl0Q29udGVudCxcbiAgZWRpdFNjaGVtYSxcbiAgZ2V0Q2RkVHJlZSxcbiAgZ2V0RGFzaGJvYXJkLFxuICBsaXN0U2NoZW1hcyxcbiAgb3BlblNvdXJjZUZpbGUsXG4gIHJlYWRDb250ZW50LFxuICByZWFkU2NoZW1hLFxufSBmcm9tIFwiLi9jZGQtc2VydmljZVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc29uYW11VUlBcGlQbHVnaW4oZmFzdGlmeTogRmFzdGlmeUluc3RhbmNlKSB7XG4gIGZhc3RpZnkucmVnaXN0ZXIoXG4gICAgYXN5bmMgKHNlcnZlcikgPT4ge1xuICAgICAgLy8gbWlncmF0b3JcbiAgICAgIGNvbnN0IG1pZ3JhdG9yID0gbmV3IE1pZ3JhdG9yKCk7XG5cbiAgICAgIC8vIHdhaXRGb3JITVJDb21wbGV0ZWRcbiAgICAgIGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JITVJDb21wbGV0ZWQ8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3Qgd2FpdFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIFNvbmFtdS5zeW5jZXIuZXZlbnRFbWl0dGVyLm9mZihcIm9uSE1SQ29tcGxldGVkXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sIDE1MDApO1xuXG4gICAgICAgICAgU29uYW11LnN5bmNlci5ldmVudEVtaXR0ZXIub25jZShcIm9uSE1SQ29tcGxldGVkXCIsIGhhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBhd2FpdCB3YWl0UHJvbWlzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2V0QWlBcGkoc2VydmVyKTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvc29uYW11L2NvbmZpZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBTb25hbXUuY29uZmlnO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGVudGl0eUlkPzogc3RyaW5nO1xuICAgICAgICAgIHByZXNldD86IFwidHlwZXNcIiB8IFwiZW50aXR5Lmpzb25cIiB8IFwiZ2VuZXJhdGVkXCI7XG4gICAgICAgICAgYWJzUGF0aD86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS90b29scy9vcGVuVnNjb2RlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHByZXNldCwgYWJzUGF0aCB9ID0gcmVxdWVzdC5xdWVyeTtcblxuICAgICAgICBjb25zdCB0YXJnZXRQYXRoID0gKCgpID0+IHtcbiAgICAgICAgICBpZiAoZW50aXR5SWQgJiYgcHJlc2V0KSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWVzIH0gPSBlbnRpdHk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgYXBpUm9vdFBhdGggfSA9IFNvbmFtdTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gKCgpID0+IHtcbiAgICAgICAgICAgICAgc3dpdGNoIChwcmVzZXQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidHlwZXNcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lcy5mc30udHlwZXMudHNgO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnRpdHkuanNvblwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWVzLmZzfS5lbnRpdHkuanNvbmA7XG4gICAgICAgICAgICAgICAgY2FzZSBcImdlbmVyYXRlZFwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWVzLmZzfS5nZW5lcmF0ZWQudHNgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2FwaVJvb3RQYXRofS9zcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMucGFyZW50RnN9LyR7ZmlsZW5hbWV9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFhYnNQYXRoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLnByZXNldE9yQWJzUGF0aFJlcXVpcmVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhYnNQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgZXhlY1N5bmMoYGNvZGUgJHt0YXJnZXRQYXRofWApO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIG9yaWdpbjogc3RyaW5nO1xuICAgICAgICAgIGVudGl0eUlkPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3Rvb2xzL2dldFN1Z2dlc3Rpb25cIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBvcmlnaW4sIGVudGl0eUlkIH0gPSByZXF1ZXN0LnF1ZXJ5O1xuXG4gICAgICAgIC8vIOy5mO2ZmCDsmqnslrTsp5FcbiAgICAgICAgY29uc3QgZ2xvc3NhcnkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gICAgICAgICAgW1wic3RhdHVzXCIsIFwi7IOB7YOcXCJdLFxuICAgICAgICAgIFtcInR5cGVcIiwgXCLtg4DsnoVcIl0sXG4gICAgICAgICAgW1wiaW1hZ2VcIiwgXCLsnbTrr7jsp4BcIl0sXG4gICAgICAgICAgW1wiaW1hZ2VzXCIsIFwi7J2066+47KeA66as7Iqk7Yq4XCJdLFxuICAgICAgICAgIFtcInVybFwiLCBcIlVSTFwiXSxcbiAgICAgICAgICBbXCJpZFwiLCBcIklEXCJdLFxuICAgICAgICAgIFtcIm5hbWVcIiwgYHtFbnRpdHlJRH3rqoVgXSxcbiAgICAgICAgICBbXCJ0aXRsZVwiLCBcIntFbnRpdHlJRH3rqoVcIl0sXG4gICAgICAgICAgW1wicGFyZW50XCIsIFwi7IOB7JyEe0VudGl0eUlEfVwiXSxcbiAgICAgICAgICBbXCJkZXNjXCIsIFwi7ISk66qFXCJdLFxuICAgICAgICAgIFtcImF0XCIsIFwi7J287IucXCJdLFxuICAgICAgICAgIFtcImNyZWF0ZWRcIiwgXCLrk7HroZ1cIl0sXG4gICAgICAgICAgW1widXBkYXRlZFwiLCBcIuyImOyglVwiXSxcbiAgICAgICAgICBbXCJkZWxldGVkXCIsIFwi7IKt7KCcXCJdLFxuICAgICAgICAgIFtcImJ5XCIsIFwi7Jyg7KCAXCJdLFxuICAgICAgICAgIFtcImRhdGVcIiwgXCLsnbzsnpBcIl0sXG4gICAgICAgICAgW1widGltZVwiLCBcIuyLnOqwhFwiXSxcbiAgICAgICAgICBbXCJrb1wiLCBcIijtlZzquIApXCJdLFxuICAgICAgICAgIFtcImVuXCIsIFwiKOyYgeusuClcIl0sXG4gICAgICAgICAgW1wia3J3XCIsIFwiKOybkClcIl0sXG4gICAgICAgICAgW1widXNkXCIsIFwiKFVTRClcIl0sXG4gICAgICAgICAgW1wiY29sb3JcIiwgXCLsu6zrn6xcIl0sXG4gICAgICAgICAgW1wiY29kZVwiLCBcIuy9lOuTnFwiXSxcbiAgICAgICAgICBbXCJ4XCIsIFwiWOyijO2RnFwiXSxcbiAgICAgICAgICBbXCJ5XCIsIFwiWeyijO2RnFwiXSxcbiAgICAgICAgICBbXCJjdXJyZW50XCIsIFwi7ZiE7J6sXCJdLFxuICAgICAgICAgIFtcInN0b2NrXCIsIFwi7J6s6rOgXCJdLFxuICAgICAgICAgIFtcInRvdGFsXCIsIFwi7LSdXCJdLFxuICAgICAgICAgIFtcImFkbWluXCIsIFwi6rSA66as7J6QXCJdLFxuICAgICAgICAgIFtcImdyb3VwXCIsIFwi6re466O5XCJdLFxuICAgICAgICAgIFtcIml0ZW1cIiwgXCLslYTsnbTthZxcIl0sXG4gICAgICAgICAgW1wiY250XCIsIFwi7IiY65+JXCJdLFxuICAgICAgICAgIFtcInByaWNlXCIsIFwi6rCA6rKpXCJdLFxuICAgICAgICAgIFtcInByZXNldFwiLCBcIu2UhOumrOyFi1wiXSxcbiAgICAgICAgICBbXCJhY2N0XCIsIFwi6rOE7KKMXCJdLFxuICAgICAgICAgIFtcInRlbFwiLCBcIuyghO2ZlOuyiO2YuFwiXSxcbiAgICAgICAgICBbXCJub1wiLCBcIuuyiO2YuFwiXSxcbiAgICAgICAgICBbXCJib2R5XCIsIFwi64K07JqpXCJdLFxuICAgICAgICAgIFtcImNvbnRlbnRcIiwgXCLrgrTsmqlcIl0sXG4gICAgICAgICAgW1wib3JkZXJub1wiLCBcIuygleugrOyInOyEnFwiXSxcbiAgICAgICAgICBbXCJwcmlvcml0eVwiLCBcIuyasOyEoOyInOychFwiXSxcbiAgICAgICAgICBbXCJ0ZXh0XCIsIFwi7YWN7Iqk7Yq4XCJdLFxuICAgICAgICAgIFtcImtleVwiLCBcIu2CpFwiXSxcbiAgICAgICAgICBbXCJzdW1cIiwgXCLtlansgrBcIl0sXG4gICAgICAgICAgW1wiZXhwZWN0ZWRcIiwgXCLsmIjsg4FcIl0sXG4gICAgICAgICAgW1wiYWN0dWFsXCIsIFwi7Iuk7KCcXCJdLFxuICAgICAgICBdKTtcbiAgICAgICAgLy8g7KCE7LK0IOyXlO2LsO2LsCDsiJztmoztlZjrqbAsIOyXlO2LsO2LsCDtg4DsnbTti4Dqs7wg7ZSE66GtIOyEpOuqheydhCDsuZjtmZgg7Jqp7Ja07KeR7JeQIOy2lOqwgFxuICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkpIHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgaWYgKChlbnRpdHkudGl0bGUgPz8gXCJcIikgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGdsb3NzYXJ5LnNldChpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5LmlkKSwgZW50aXR5LnRpdGxlKTtcbiAgICAgICAgICAgIGdsb3NzYXJ5LnNldChcbiAgICAgICAgICAgICAgaW5mbGVjdGlvbi51bmRlcnNjb3JlKGluZmxlY3Rpb24ucGx1cmFsaXplKGVudGl0eS5pZCkpLFxuICAgICAgICAgICAgICBgJHtlbnRpdHkudGl0bGV966as7Iqk7Yq4YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50aXR5LnByb3BzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgIGlmIChnbG9zc2FyeS5oYXMocHJvcC5uYW1lKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcC5kZXNjKSB7XG4gICAgICAgICAgICAgIGdsb3NzYXJ5LnNldChwcm9wLm5hbWUsIHByb3AuZGVzYy5yZXBsYWNlKGVudGl0eS50aXRsZSA/PyBcIlwiLCBcIntFbnRpdHlJRH1cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VnZ2VzdGVkID0gKCgpID0+IHtcbiAgICAgICAgICAvLyDri6jslrQg67aE66asLCDqsIDriqXtlZwg7KGw7ZWpIOyDneyEsVxuICAgICAgICAgIGNvbnN0IHdvcmRzID0gb3JpZ2luLnNwbGl0KFwiX1wiKTtcbiAgICAgICAgICBjb25zdCBjb21iaW5hdGlvbnMgPSBbLi4ucmFuZ2Uod29yZHMubGVuZ3RoLCAwLCAtMSldLmZsYXRNYXAoKGxlbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4ucmFuZ2UoMCwgd29yZHMubGVuZ3RoIC0gbGVuICsgMSwgKGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICAgICAgICB3OiB3b3Jkcy5zbGljZShpZHgsIGlkeCArIGxlbikuam9pbihcIl9cIiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8g7KGw7ZWp7J2EIOyInO2ajO2VmOupsCwg7LmY7ZmYIOyaqeyWtOynkeyXkCDsnojripQg64uo7Ja06rCAIO2PrO2VqOuQnCDqsr3smrAsIOy5mO2ZmCDsmqnslrTroZwg7LmY7ZmYXG4gICAgICAgICAgY29uc3QgUkVQTEFDRURfUFJFRklYID0gXCIjUkVQTEFDRUQvL1wiOyAvLyDsuZjtmZjrkJwg64uo7Ja066W8IGpvaW4g7J207ZuE7JeQ64+EIOyLneuzhO2VmOq4sCDsnITtlbQgcHJlZml4IOy2lOqwgFxuICAgICAgICAgIGxldCByZW1haW5BcnI6IHN0cmluZ1tdID0gWy4uLndvcmRzXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbWIgb2YgY29tYmluYXRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCByZW1haW5TdHIgPSByZW1haW5BcnIuam9pbihcIl9cIik7XG4gICAgICAgICAgICBpZiAocmVtYWluU3RyLmluY2x1ZGVzKGNvbWIudykgJiYgZ2xvc3NhcnkuaGFzKGNvbWIudykpIHtcbiAgICAgICAgICAgICAgcmVtYWluQXJyID0gcmVtYWluU3RyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tYi53LCBSRVBMQUNFRF9QUkVGSVggKyBnbG9zc2FyeS5nZXQoY29tYi53KSlcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCJfXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZW1haW5BcnJcbiAgICAgICAgICAgIC5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHIuc3RhcnRzV2l0aChSRVBMQUNFRF9QUkVGSVgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIucmVwbGFjZShSRVBMQUNFRF9QUkVGSVgsIFwiXCIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3tFbnRpdHlJRH0vZywgZW50aXR5SWQgPyBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkudGl0bGUgOiBcIlwiKTtcbiAgICAgICAgfSkoKTtcblxuICAgICAgICByZXR1cm4geyBzdWdnZXN0ZWQgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9lbnRpdHkvZmluZE1hbnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGZsYXR0ZW5TdWJzZXRSb3dzKHN1YnNldFJvd3M6IEVudGl0eVN1YnNldFJvd1tdKTogRmxhdHRlblN1YnNldFJvd1tdIHtcbiAgICAgICAgICByZXR1cm4gc3Vic2V0Um93cy5mbGF0TWFwKChzdWJzZXRSb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIC4uLnNSb3cgfSA9IHN1YnNldFJvdztcbiAgICAgICAgICAgIHJldHVybiBbc1JvdywgLi4uZmxhdHRlblN1YnNldFJvd3MoY2hpbGRyZW4pXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVudGl0aWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgZW50aXR5SWRzLm1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNldFJvd3MgPSBlbnRpdHkuZ2V0U3Vic2V0Um93cygpO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5lbnRpdHksXG4gICAgICAgICAgICAgIGZsYXR0ZW5TdWJzZXRSb3dzOiBmbGF0dGVuU3Vic2V0Um93cyhzdWJzZXRSb3dzKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgZW50aXRpZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFJZCA9IGEucGFyZW50SWQgPz8gYS5pZDtcbiAgICAgICAgICBjb25zdCBiSWQgPSBiLnBhcmVudElkID8/IGIuaWQ7XG4gICAgICAgICAgaWYgKGFJZCA8IGJJZCkgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhSWQgPiBiSWQpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhSWQgPT09IGJJZCkge1xuICAgICAgICAgICAgaWYgKGEucGFyZW50SWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGIucGFyZW50SWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBlbnRpdGllcyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGZpbHRlcj86IFwiZW51bXNcIiB8IFwidHlwZXNcIjtcbiAgICAgICAgICByZWxvYWQ/OiBcIjFcIjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvdHlwZUlkc1wiLCBhc3luYyAocmVxdWVzdCk6IFByb21pc2U8eyB0eXBlSWRzOiBzdHJpbmdbXSB9PiA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyLCByZWxvYWQgfSA9IHJlcXVlc3QucXVlcnk7XG5cbiAgICAgICAgaWYgKHJlbG9hZCA9PT0gXCIxXCIpIHtcbiAgICAgICAgICBhd2FpdCBTb25hbXUuc3luY2VyLmF1dG9sb2FkVHlwZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGVJZHMgPSAoKCkgPT4ge1xuICAgICAgICAgIC8vIO2UhOuhnOygne2KuOyXkOyEnCDsoJXsnZjtlZwg7YOA7J6F65OkXG4gICAgICAgICAgY29uc3QgcHJvamVjdFR5cGVJZHMgPSBPYmplY3QuZW50cmllcyhTb25hbXUuc3luY2VyLnR5cGVzKVxuICAgICAgICAgICAgLmZpbHRlcigoW190eXBlSWQsIHpvZFR5cGVdKSA9PiAoem9kVHlwZS5fem9kLmRlZi50eXBlIGFzIHN0cmluZykgIT09IFwiZW51bVwiKVxuICAgICAgICAgICAgLm1hcCgoW3R5cGVJZCwgX3pvZFR5cGVdKSA9PiB0eXBlSWQpO1xuXG4gICAgICAgICAgLy8g64K07J6lIO2DgOyeheuTpCAoc29uYW11IOy9lOyWtOyXkOyEnCDsoJzqs7UpXG4gICAgICAgICAgY29uc3QgYnVpbHRJblR5cGVJZHMgPSBbLi4uQlVJTFRfSU5fVFlQRV9JRFNdO1xuXG4gICAgICAgICAgLy8g66qo65OgIO2DgOyehSDrs5HtlalcbiAgICAgICAgICBjb25zdCBhbGxUeXBlSWRzID0gWy4uLmJ1aWx0SW5UeXBlSWRzLCAuLi5wcm9qZWN0VHlwZUlkc107XG5cbiAgICAgICAgICBpZiAoZmlsdGVyID09PSBcInR5cGVzXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxUeXBlSWRzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudW1JZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpLmZsYXRNYXAoKGVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGZpbHRlciA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gZW51bUlkcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGxUeXBlSWRzLCAuLi5lbnVtSWRzXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlSWRzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGZvcm06IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgICAgICAgIHBhcmVudElkPzogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2NyZWF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBmb3JtIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyAuLi5mb3JtLCBlbnRpdHlJZDogZm9ybS5pZCB9KTtcblxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgU29uYW11LnN5bmNlci5kZWxFbnRpdHkoZW50aXR5SWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIG5ld1ZhbHVlczoge1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgICAgICAgICBwYXJlbnRJZD86IHN0cmluZztcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlFbnRpdHlCYXNlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBuZXdWYWx1ZXMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LnRpdGxlID0gbmV3VmFsdWVzLnRpdGxlO1xuICAgICAgICAgIGVudGl0eS50YWJsZSA9IG5ld1ZhbHVlcy50YWJsZTtcbiAgICAgICAgICBlbnRpdHkucGFyZW50SWQgPSBuZXdWYWx1ZXMucGFyZW50SWQ7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIHN1YnNldEtleTogc3RyaW5nO1xuICAgICAgICAgIGZpZWxkczogc3RyaW5nW107XG4gICAgICAgICAgZmllbGRzSW50ZXJuYWw/OiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5U3Vic2V0XCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBzdWJzZXRLZXksIGZpZWxkcywgZmllbGRzSW50ZXJuYWwgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XSA9IGZpZWxkcztcbiAgICAgICAgICBpZiAoZmllbGRzSW50ZXJuYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkc0ludGVybmFsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZW50aXR5LnN1YnNldHNJbnRlcm5hbFtzdWJzZXRLZXldID0gZmllbGRzSW50ZXJuYWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWxldGUgZW50aXR5LnN1YnNldHNJbnRlcm5hbFtzdWJzZXRLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIHsgdXBkYXRlZDogZmllbGRzLCB1cGRhdGVkSW50ZXJuYWw6IGZpZWxkc0ludGVybmFsIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgc3Vic2V0S2V5OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2RlbFN1YnNldFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgc3Vic2V0S2V5IH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldEtleV07XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIG5ld1Byb3A6IEVudGl0eVByb3A7XG4gICAgICAgICAgYXQ/OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2NyZWF0ZVByb3BcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGF0LCBuZXdQcm9wIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5jcmVhdGVQcm9wKG5ld1Byb3AsIGF0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBuZXdQcm9wOiBFbnRpdHlQcm9wO1xuICAgICAgICAgIGF0OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeVByb3BcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGF0LCBuZXdQcm9wIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5Lm1vZGlmeVByb3AobmV3UHJvcCwgYXQpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgYXQ6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZGVsUHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuZGVsUHJvcChhdCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgYXQ6IG51bWJlcjtcbiAgICAgICAgICB0bzogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb3ZlUHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQsIHRvIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5Lm1vdmVQcm9wKGF0LCB0byk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBpbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlJbmRleGVzXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBpbmRleGVzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5pbmRleGVzID0gaW5kZXhlcztcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIHsgdXBkYXRlZDogaW5kZXhlcyB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGVudW1MYWJlbHM6IEVudGl0eVtcImVudW1MYWJlbHNcIl07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUVudW1MYWJlbHNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGVudW1MYWJlbHMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmVudW1MYWJlbHMgPSBlbnVtTGFiZWxzO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4geyB1cGRhdGVkOiBlbnVtTGFiZWxzIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgbmV3RW51bUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2NyZWF0ZUVudW1JZFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgbmV3RW51bUlkIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAgICAgaWYgKGVudGl0eS5lbnVtTGFiZWxzW25ld0VudW1JZF0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J2066+4IOyhtOyerO2VmOuKlCBlbnVtSWTsnoXri4jri6Q6ICR7bmV3RW51bUlkfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudGl0eS5lbnVtTGFiZWxzW25ld0VudW1JZF0gPSB7XG4gICAgICAgICAgICAuLi4obmV3RW51bUlkLmVuZHNXaXRoKFwiU3RhdHVzXCIpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgYWN0aXZlOiBcIuuFuOy2nFwiLFxuICAgICAgICAgICAgICAgICAgaGlkZGVuOiBcIuyIqOq5gFwiLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBcIlwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGVudW1JZDoge1xuICAgICAgICAgICAgYmVmb3JlOiBzdHJpbmc7XG4gICAgICAgICAgICBhZnRlcjogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUVudW1JZFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgZW51bUlkIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICAgICAgICBjb25zdCBpc0V4aXN0cyA9IGVudGl0eUlkcy5zb21lKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudGl0eS5lbnVtTGFiZWxzKS5pbmNsdWRlcyhlbnVtSWQuYWZ0ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpc0V4aXN0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnbTrr7gg7KG07J6s7ZWY64qUIEVudW1JZOyeheuLiOuLpDogJHtlbnVtSWQuYWZ0ZXJ9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5lbnVtTGFiZWxzW2VudW1JZC5hZnRlcl0gPSBlbnRpdHkuZW51bUxhYmVsc1tlbnVtSWQuYmVmb3JlXTtcbiAgICAgICAgICBkZWxldGUgZW50aXR5LmVudW1MYWJlbHNbZW51bUlkLmJlZm9yZV07XG5cbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBlbnRpdHlJZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBlbnRpdHkucHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKHByb3AudHlwZSA9PT0gXCJlbnVtXCIgJiYgcHJvcC5pZCA9PT0gZW51bUlkLmJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHByb3AuaWQgPSBlbnVtSWQuYWZ0ZXI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGVudW1JZDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxldGVFbnVtSWRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGVudW1JZCB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICAgICAgICBjb25zdCBpc1JlZmVyZW5jZWQgPSBlbnRpdHlJZHNcbiAgICAgICAgICAgIC5mbGF0TWFwKChlbnRpdHlJZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnByb3BzKVxuICAgICAgICAgICAgLnNvbWUoKHByb3ApID0+IHByb3AudHlwZSA9PT0gXCJlbnVtXCIgJiYgcHJvcC5pZCA9PT0gZW51bUlkKTtcbiAgICAgICAgICBpZiAoaXNSZWZlcmVuY2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW51bUlkfeulvCDssLjsobDtlZjripQg7ZSE66Gc7Y287Yuw6rCAIOyhtOyerO2VqeuLiOuLpC5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZGVsZXRlIGVudGl0eS5lbnVtTGFiZWxzW2VudW1JZF07XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICB0YXJnZXQ6IFwiZW50aXR5XCIgfCBcInByb3BcIiB8IFwiZW51bVwiIHwgXCJzdWJzZXRcIjtcbiAgICAgICAgICBwcm9wTmFtZT86IHN0cmluZztcbiAgICAgICAgICBlbnVtSWQ/OiBzdHJpbmc7XG4gICAgICAgICAgc3Vic2V0S2V5Pzogc3RyaW5nO1xuICAgICAgICAgIGNvbmU6IENvbmU7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L3VwZGF0ZUNvbmVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHRhcmdldCwgcHJvcE5hbWUsIGVudW1JZCwgc3Vic2V0S2V5LCBjb25lIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldCA9PT0gXCJlbnRpdHlcIikge1xuICAgICAgICAgICAgZW50aXR5LmNvbmUgPSBjb25lO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcInByb3BcIiAmJiBwcm9wTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IGVudGl0eS5wcm9wcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IHByb3BOYW1lKTtcbiAgICAgICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgICAgIChwcm9wIGFzIHsgY29uZT86IENvbmUgfSkuY29uZSA9IGNvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwiZW51bVwiICYmIGVudW1JZCkge1xuICAgICAgICAgICAgZW50aXR5LmVudW1Db25lc1tlbnVtSWRdID0gY29uZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJzdWJzZXRcIiAmJiBzdWJzZXRLZXkpIHtcbiAgICAgICAgICAgIGVudGl0eS5zdWJzZXRDb25lc1tzdWJzZXRLZXldID0gY29uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIHByZXNlcnZlRXhpc3Rpbmc/OiBib29sZWFuO1xuICAgICAgICAgIG9ubHlFbXB0eT86IGJvb2xlYW47XG4gICAgICAgICAgbG9jYWxlPzogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9nZW5lcmF0ZUNvbmVzXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgcHJlc2VydmVFeGlzdGluZywgb25seUVtcHR5LCBsb2NhbGUgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBFbnRpdHkg7KG07J6sIOyXrOu2gCDtmZXsnbhcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcblxuICAgICAgICAgICAgLy8gbG9jYWxlIOq4sOuzuOqwkjogU29uYW11LmNvbmZpZy5pMThuLmRlZmF1bHRMb2NhbGUg7IKs7JqpXG4gICAgICAgICAgICBjb25zdCBlZmZlY3RpdmVMb2NhbGUgPVxuICAgICAgICAgICAgICBsb2NhbGUgPz8gKFNvbmFtdS5jb25maWcuaTE4bi5kZWZhdWx0TG9jYWxlIGFzIFwia29cIiB8IFwiZW5cIiB8IFwiamFcIik7XG5cbiAgICAgICAgICAgIC8vIENvbmUg7IOd7ISxXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICAgICAgICAgIHByZXNlcnZlRXhpc3Rpbmc6IHByZXNlcnZlRXhpc3RpbmcgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgb25seUVtcHR5OiBvbmx5RW1wdHkgPz8gZmFsc2UsXG4gICAgICAgICAgICAgIGxvY2FsZTogZWZmZWN0aXZlTG9jYWxlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cbiAgICAgICAgICAgIC8vIEVudGl0eSBub3QgZm91bmRcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwi7KG07J6s7ZWY7KeAIOyViuuKlCBFbnRpdHlcIikpIHtcbiAgICAgICAgICAgICAgcmVwbHkuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eUlkfWAsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFQSSDtgqQg7JeG7J2MXG4gICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhcIkFOVEhST1BJQ19BUElfS0VZIG5vdCBmb3VuZFwiKSkge1xuICAgICAgICAgICAgICByZXBseS5zdGF0dXMoNTAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJBUEkga2V5IG5vdCBjb25maWd1cmVkXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJhdGUgbGltaXRcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwiUmF0ZSBsaW1pdCBleGNlZWRlZFwiKSkge1xuICAgICAgICAgICAgICByZXBseS5zdGF0dXMoNDI5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJSYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDquLDtg4Ag7JeQ65+sXG4gICAgICAgICAgICByZXBseS5zdGF0dXMoNTAwKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogYENvbmUgZ2VuZXJhdGlvbiBmYWlsZWQ6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2dldFRhYmxlQ29sdW1uc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eUlkIH0gPSByZXF1ZXN0LnF1ZXJ5O1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBlbnRpdHkuZ2V0VGFibGVDb2x1bW5zKCk7XG4gICAgICAgIHJldHVybiB7IGNvbHVtbnMgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9taWdyYXRpb25zL3N0YXR1c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuXG4gICAgICAgIHJldHVybiB7IHN0YXR1cyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGFjdGlvbjogXCJhcHBseVwiIHwgXCJyb2xsYmFja1wiIHwgXCJzaGFkb3dcIjtcbiAgICAgICAgICB0YXJnZXRzOiAoa2V5b2YgU29uYW11REJDb25maWcpW107XG4gICAgICAgICAgZm9yY2U/OiBib29sZWFuO1xuICAgICAgICAgIGZvcmNlUmVhc29uPzogc3RyaW5nO1xuICAgICAgICAgIHJlcXVlc3Rvcj86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFxuICAgICAgICBcIi9hcGkvbWlncmF0aW9ucy9ydW5BY3Rpb25cIixcbiAgICAgICAgYXN5bmMgKHJlcXVlc3QpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdCB8IFNsYWNrQ29uZmlybVBlbmRpbmdSZXN1bHQ+ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGFjdGlvbiwgdGFyZ2V0cywgZm9yY2UsIGZvcmNlUmVhc29uLCByZXF1ZXN0b3IgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGlmIChhY3Rpb24gPT09IFwic2hhZG93XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBtaWdyYXRvci5ydW5TaGFkb3dUZXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2xhY2sg7Iq57J24IOyytO2BrCAoYXBwbHkg7Iuc7JeQ66eMKVxuICAgICAgICAgIGlmIChhY3Rpb24gPT09IFwiYXBwbHlcIikge1xuICAgICAgICAgICAgY29uc3Qgc2xhY2tDb25maXJtID0gbmV3IFNsYWNrQ29uZmlybSgpO1xuICAgICAgICAgICAgY29uc3QgcmVxdWlyZXNBcHByb3ZhbCA9IHRhcmdldHMuc29tZSgodCkgPT4gc2xhY2tDb25maXJtLmlzVGFyZ2V0UmVxdWlyZXNBcHByb3ZhbCh0KSk7XG5cbiAgICAgICAgICAgIC8vIOuhnOy7rCBEQuyduCDqsr3smrAg7Iq57J24IOyKpO2CtVxuICAgICAgICAgICAgY29uc3QgbG9jYWxIb3N0cyA9IFtcImxvY2FsaG9zdFwiLCBcIjEyNy4wLjAuMVwiLCBcIjAuMC4wLjBcIiwgXCI6OjFcIl07XG4gICAgICAgICAgICBjb25zdCBpc0xvY2FsVGFyZ2V0ID0gdGFyZ2V0cy5ldmVyeSgodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZ1t0YXJnZXRdO1xuICAgICAgICAgICAgICBjb25zdCBob3N0ID0gKHRhcmdldENvbmZpZz8uY29ubmVjdGlvbiBhcyB7IGhvc3Q/OiBzdHJpbmcgfSk/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsSG9zdHMuaW5jbHVkZXMoaG9zdC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAocmVxdWlyZXNBcHByb3ZhbCAmJiBzbGFja0NvbmZpcm0uaXNDb25maWd1cmVkKCkgJiYgIWlzTG9jYWxUYXJnZXQpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjb25ucyB9ID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG5cbiAgICAgICAgICAgICAgLy8g66qo65OgIO2DgOqynyBEQuyXkOyEnCBwZW5kaW5n7J24IOuniOydtOq3uOugiOydtOyFmOydmCDtlansp5HtlansnYQg6rWs7ZWp64uI64ukLlxuICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nTWlncmF0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgICAgICAgICAgY29ubnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY29ubikgPT4gdGFyZ2V0cy5pbmNsdWRlcyhjb25uLmNvbm5LZXkgYXMga2V5b2YgU29uYW11REJDb25maWcpKVxuICAgICAgICAgICAgICAgICAgICAuZmxhdE1hcCgoY29ubikgPT4gY29ubi5wZW5kaW5nKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgIGlmIChwZW5kaW5nTWlncmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8g6riw7KG0IOyKueyduCDsmpTssq0g7ZmV7J24XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBzbGFja0NvbmZpcm0uZ2V0RXhpc3RpbmdSZXF1ZXN0KHBlbmRpbmdNaWdyYXRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgLy8g6riw7KG0IOyalOyyreydtCDsnojsnLzrqbQg7Iq57J24IOyDge2DnCDtmZXsnbhcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgYXBwcm92ZWQsIHJlamVjdGVkIH0gPSBhd2FpdCBzbGFja0NvbmZpcm0uY2hlY2tBcHByb3ZhbChcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuY2hhbm5lbCxcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYXBwcm92ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g7Iq57J2465CoIOKGkiDsi6TtlolcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWlncmF0b3IucnVuQWN0aW9uKGFjdGlvbiwgdGFyZ2V0cyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNsYWNrQ29uZmlybS5sb2dFeGVjdXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5taWdyYXRpb25SZWplY3RlZFwiKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIOynhO2WiVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzbGFja0NvbmZpcm0uZm9yY2VBcHByb3ZhbChcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnRzLFxuICAgICAgICAgICAgICAgICAgICAgIGZvcmNlUmVhc29uID8/IFwi7IKs7JygIOyXhuydjFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWlncmF0b3IucnVuQWN0aW9uKGFjdGlvbiwgdGFyZ2V0cyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNsYWNrQ29uZmlybS5sb2dFeGVjdXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g64yA6riw7KSRXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogZXhpc3RpbmcuY2hhbm5lbCxcbiAgICAgICAgICAgICAgICAgICAgICB0czogZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIOyDiCDsirnsnbgg7JqU7LKtIOuwnOyGoVxuICAgICAgICAgICAgICAgICAgY29uc3QgeyBjaGFubmVsLCB0cyB9ID0gYXdhaXQgc2xhY2tDb25maXJtLnBvc3RBcHByb3ZhbFJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdNaWdyYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0b3IsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYXdhaXQgc2xhY2tDb25maXJtLnNhdmVSZXF1ZXN0KHBlbmRpbmdNaWdyYXRpb25zLCBjaGFubmVsLCB0cyk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGVuZGluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICB0cyxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1pZ3JhdG9yLnJ1bkFjdGlvbihhY3Rpb24sIHRhcmdldHMpO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgY2hhbm5lbDogc3RyaW5nO1xuICAgICAgICAgIHRzOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvbWlncmF0aW9ucy9jaGVja0FwcHJvdmFsXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hhbm5lbCwgdHMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgY29uc3Qgc2xhY2tDb25maXJtID0gbmV3IFNsYWNrQ29uZmlybSgpO1xuXG4gICAgICAgIGlmICghc2xhY2tDb25maXJtLmlzQ29uZmlndXJlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXBwcm92ZWQ6IHRydWUsIHJlamVjdGVkOiBmYWxzZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNsYWNrQ29uZmlybS5jaGVja0FwcHJvdmFsKGNoYW5uZWwsIHRzKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBjaGFubmVsOiBzdHJpbmc7XG4gICAgICAgICAgdHM6IHN0cmluZztcbiAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgICByZXF1ZXN0b3I/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvbWlncmF0aW9ucy9mb3JjZUFwcHJvdmFsXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hhbm5lbCwgdHMsIHJlYXNvbiwgcmVxdWVzdG9yIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIGNvbnN0IHNsYWNrQ29uZmlybSA9IG5ldyBTbGFja0NvbmZpcm0oKTtcblxuICAgICAgICBpZiAoIXNsYWNrQ29uZmlybS5pc0NvbmZpZ3VyZWQoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLnNsYWNrQ29uZmlybU5vdENvbmZpZ3VyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgc2xhY2tDb25maXJtLmZvcmNlQXBwcm92YWwoY2hhbm5lbCwgdHMsIHJlYXNvbiwgcmVxdWVzdG9yKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGNvZGVOYW1lczogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvbWlncmF0aW9ucy9kZWxDb2Rlc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvZGVOYW1lcyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICByZXR1cm4gYXdhaXQgbWlncmF0b3IuZGVsQ29kZXMoY29kZU5hbWVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvbWlncmF0aW9ucy9nZW5lcmF0ZVByZXBhcmVkQ29kZXNcIiwgYXN5bmMgKF9yZXF1ZXN0dCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgbWlncmF0b3IuZ2VuZXJhdGVQcmVwYXJlZENvZGVzKCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWRzOiBzdHJpbmdbXTtcbiAgICAgICAgICB0ZW1wbGF0ZUtleXM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NjYWZmb2xkaW5nL2dldFN0YXR1c1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eUlkcywgdGVtcGxhdGVLZXlzOiBfdGVtcGxhdGVLZXlzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIGlmICgoZW50aXR5SWRzID8/IFtdKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5lbnRpdHlJZHNSZXF1aXJlZFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKF90ZW1wbGF0ZUtleXMgPz8gW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLnRlbXBsYXRlS2V5c1JlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNvcnRpbmdcbiAgICAgICAgZW50aXR5SWRzLnNvcnQoKGEsIGIpID0+IChhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMCkpO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUtleXMgPSBUZW1wbGF0ZUtleS5vcHRpb25zLmZpbHRlcigodGspID0+IF90ZW1wbGF0ZUtleXMuaW5jbHVkZXModGspKTtcblxuICAgICAgICBjb25zdCBjb21iaW5hdGlvbnMgPSBlbnRpdHlJZHMuZmxhdE1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGVLZXlzLm1hcCgodGVtcGxhdGVLZXkpID0+IFtlbnRpdHlJZCwgdGVtcGxhdGVLZXldKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBjb21iaW5hdGlvbnMubWFwKGFzeW5jIChbZW50aXR5SWQsIHRlbXBsYXRlS2V5XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzdWJQYXRoLCBmdWxsUGF0aCwgaXNFeGlzdHMgfSA9IGF3YWl0IFNvbmFtdS5zeW5jZXIuY2hlY2tFeGlzdHNHZW5Db2RlKFxuICAgICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICAgIHRlbXBsYXRlS2V5LFxuICAgICAgICAgICAgICBzdWJQYXRoLFxuICAgICAgICAgICAgICBmdWxsUGF0aCxcbiAgICAgICAgICAgICAgaXNFeGlzdHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4geyBzdGF0dXNlcyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgICB0ZW1wbGF0ZUtleTogc3RyaW5nO1xuICAgICAgICAgICAgZW51bUlkPzogc3RyaW5nO1xuICAgICAgICAgICAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgICAgICAgICB9W107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc2NhZmZvbGRpbmcvZ2VuZXJhdGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLm9wdGlvbnNSZXF1aXJlZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAxLiDrqqjrk6Ag7YWc7ZSM66a/7JeQ7IScIO2VhOyalO2VnCBkaWN0IO2CpOulvCDsiJjsp5FcbiAgICAgICAgY29uc3Qga2V5cyA9IG9wdGlvbnMuZmxhdE1hcCgoeyB0ZW1wbGF0ZUtleSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KHRlbXBsYXRlS2V5KTtcbiAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuZ2V0UmVxdWlyZWREaWN0S2V5cygpID8/IFtdO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAyLiB0YXJnZXTrs4TroZwgZW5zdXJlRGljdEtleXMg7Zi47LacICjsiJzssKgg7LKY66asKVxuICAgICAgICBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LmVuc3VyZURpY3RLZXlzKFsuLi5uZXcgU2V0KGtleXMpXSk7XG5cbiAgICAgICAgLy8gMy4g7YWc7ZSM66a/IOyDneyEsSAo67OR66CsIOyymOumrClcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgb3B0aW9ucy5tYXAoYXN5bmMgKHsgZW50aXR5SWQsIHRlbXBsYXRlS2V5LCBlbnVtSWQsIG92ZXJ3cml0ZSB9KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlS2V5IGFzIFRlbXBsYXRlS2V5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgICAgICAgZW51bUlkLFxuICAgICAgICAgICAgICAgIH0gYXMge1xuICAgICAgICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgIGVudW1JZD86IHN0cmluZztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBpZiAoaXNTb0V4Y2VwdGlvbihlKSAmJiBlLnN0YXR1c0NvZGUgPT09IDU0MSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChyZXN1bHQuZmlsdGVyKG5vbk51bGxhYmxlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmFsbEZpbGVzR2VuZXJhdGVkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIG9wdGlvbjoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIHRlbXBsYXRlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgICBlbnVtSWQ/OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zY2FmZm9sZGluZy9wcmV2aWV3XCIsIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTx7IHBhdGhBbmRDb2RlczogUGF0aEFuZENvZGVbXSB9PiA9PiB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHRlbXBsYXRlS2V5LCAuLi50ZW1wbGF0ZU9wdGlvbnMgfSA9IG9wdGlvbjtcbiAgICAgICAgICBjb25zdCBwYXRoQW5kQ29kZXMgPSBhd2FpdCBTb25hbXUuc3luY2VyLnJlbmRlclRlbXBsYXRlKFxuICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnMsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7IHBhdGhBbmRDb2RlcyB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3QoXCIvYXBpL2ZpeHR1cmVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBzb3VyY2VEQiwgdGFyZ2V0REIsIHNlYXJjaCwgZHVwbGljYXRlQ2hlY2sgfSA9IHJlcXVlc3QuYm9keSBhcyB7XG4gICAgICAgICAgc291cmNlREI6IGtleW9mIFNvbmFtdURCQ29uZmlnO1xuICAgICAgICAgIHRhcmdldERCOiBrZXlvZiBTb25hbXVEQkNvbmZpZztcbiAgICAgICAgICBzZWFyY2g6IEZpeHR1cmVTZWFyY2hPcHRpb25zO1xuICAgICAgICAgIGR1cGxpY2F0ZUNoZWNrPzogRHVwbGljYXRlQ2hlY2tPcHRpb25zO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBGaXh0dXJlTWFuYWdlci5nZXRGaXh0dXJlcyhzb3VyY2VEQiwgdGFyZ2V0REIsIHNlYXJjaCwgZHVwbGljYXRlQ2hlY2spO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9maXh0dXJlL2ltcG9ydFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRiLCBmaXh0dXJlcyB9ID0gcmVxdWVzdC5ib2R5IGFzIHtcbiAgICAgICAgICBkYjoga2V5b2YgU29uYW11REJDb25maWc7XG4gICAgICAgICAgZml4dHVyZXM6IEZpeHR1cmVSZWNvcmRbXTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gRml4dHVyZU1hbmFnZXIuaW5zZXJ0Rml4dHVyZXMoZGIsIGZpeHR1cmVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvZml4dHVyZS9hZGRGaXh0dXJlTG9hZGVyXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29kZSB9ID0gcmVxdWVzdC5ib2R5IGFzIHsgY29kZTogc3RyaW5nIH07XG5cbiAgICAgICAgcmV0dXJuIEZpeHR1cmVNYW5hZ2VyLmFkZEZpeHR1cmVMb2FkZXIoY29kZSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvaTE4bi9kaWN0aW9uYXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHNvbmFtdURpY3Rpb25hcnkuZ2V0RGljdGlvbmFyeSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL2kxOG4vZXhwb3J0XCIsIGFzeW5jIChfcmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWxlbmFtZSwgYnVmZmVyIH0gPSBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LmV4cG9ydFRvRXhjZWwoKTtcbiAgICAgICAgcmVwbHlcbiAgICAgICAgICAuaGVhZGVyKFxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgICAgIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRcIixcbiAgICAgICAgICApXG4gICAgICAgICAgLmhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb25cIiwgYGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiJHtmaWxlbmFtZX1cImApXG4gICAgICAgICAgLnNlbmQoYnVmZmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvaTE4bi9pbXBvcnRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcXVlc3QuZmlsZSgpO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5maWxlTm90VXBsb2FkZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGRhdGEudG9CdWZmZXIoKTtcbiAgICAgICAgcmV0dXJuIHNvbmFtdURpY3Rpb25hcnkuaW1wb3J0RnJvbUV4Y2VsKGJ1ZmZlcik7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgb2xkS2V5OiBzdHJpbmc7XG4gICAgICAgICAgbmV3S2V5OiBzdHJpbmc7XG4gICAgICAgICAgc291cmNlOiBcImVudGl0eVwiIHwgXCJwcm9qZWN0XCIgfCBcInNvbmFtdVwiO1xuICAgICAgICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9pMThuL3VwZGF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LnVwZGF0ZUVudHJ5KHJlcXVlc3QuYm9keSk7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvaTE4bi9jcmVhdGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgYXdhaXQgc29uYW11RGljdGlvbmFyeS5jcmVhdGVFbnRyeShyZXF1ZXN0LmJvZHkpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvaTE4bi9kZWxldGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgYXdhaXQgc29uYW11RGljdGlvbmFyeS5kZWxldGVFbnRyeShyZXF1ZXN0LmJvZHkua2V5KTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHsgQm9keTogeyBrZXlzOiBzdHJpbmdbXSB9IH0+KFwiL2FwaS9pMThuL2NoZWNrVXNhZ2VcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIHNvbmFtdURpY3Rpb25hcnkuY2hlY2tVc2FnZShyZXF1ZXN0LmJvZHkua2V5cyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGFza3MgQVBJXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS90YXNrcy9zdGF0dXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFNvbmFtdS53b3JrZmxvd3M7XG4gICAgICAgICAgcmV0dXJuIHsgYWN0aXZlOiB0cnVlIH07XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL3Rhc2tzL3dvcmtmbG93RGVmaW5pdGlvbnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9ucyA9IFNvbmFtdS53b3JrZmxvd3Mud29ya2Zsb3dEZWZpbml0aW9ucztcbiAgICAgICAgcmV0dXJuIHsgZGVmaW5pdGlvbnMgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUXVlcnlzdHJpbmc6IHtcbiAgICAgICAgICBsaW1pdD86IHN0cmluZztcbiAgICAgICAgICBhZnRlcj86IHN0cmluZztcbiAgICAgICAgICBiZWZvcmU/OiBzdHJpbmc7XG4gICAgICAgICAgb3JkZXI/OiBcImFzY1wiIHwgXCJkZXNjXCI7XG4gICAgICAgICAgc3RhdHVzPzogc3RyaW5nO1xuICAgICAgICAgIHdvcmtmbG93TmFtZT86IHN0cmluZztcbiAgICAgICAgICBjcmVhdGVkQWZ0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgY3JlYXRlZEJlZm9yZT86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS90YXNrcy93b3JrZmxvd1J1bnNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFja2VuZCA9IFNvbmFtdS53b3JrZmxvd3MuYmFja2VuZDtcbiAgICAgICAgY29uc3QgeyBsaW1pdCwgYWZ0ZXIsIGJlZm9yZSwgb3JkZXIsIHN0YXR1cywgd29ya2Zsb3dOYW1lLCBjcmVhdGVkQWZ0ZXIsIGNyZWF0ZWRCZWZvcmUgfSA9XG4gICAgICAgICAgcmVxdWVzdC5xdWVyeTtcbiAgICAgICAgcmV0dXJuIGJhY2tlbmQubGlzdFdvcmtmbG93UnVucyh7XG4gICAgICAgICAgbGltaXQ6IGxpbWl0ID8gTnVtYmVyLnBhcnNlSW50KGxpbWl0LCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWZ0ZXIsXG4gICAgICAgICAgYmVmb3JlLFxuICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgIHN0YXR1czogc3RhdHVzID8gc3RhdHVzLnNwbGl0KFwiLFwiKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3b3JrZmxvd05hbWU6IHdvcmtmbG93TmFtZSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgY3JlYXRlZEFmdGVyOiBjcmVhdGVkQWZ0ZXIgPyBuZXcgRGF0ZShjcmVhdGVkQWZ0ZXIpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNyZWF0ZWRCZWZvcmU6IGNyZWF0ZWRCZWZvcmUgPyBuZXcgRGF0ZShjcmVhdGVkQmVmb3JlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFBhcmFtczogeyBpZDogc3RyaW5nIH07XG4gICAgICB9PihcIi9hcGkvdGFza3Mvd29ya2Zsb3dSdW5zLzppZFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWNrZW5kID0gU29uYW11LndvcmtmbG93cy5iYWNrZW5kO1xuICAgICAgICBjb25zdCB3b3JrZmxvd1J1biA9IGF3YWl0IGJhY2tlbmQuZ2V0V29ya2Zsb3dSdW4oe1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQ6IHJlcXVlc3QucGFyYW1zLmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF3b3JrZmxvd1J1bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgcnVuIG5vdCBmb3VuZDogJHtyZXF1ZXN0LnBhcmFtcy5pZH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd29ya2Zsb3dSdW47XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBQYXJhbXM6IHsgaWQ6IHN0cmluZyB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVucy86aWQvY2FuY2VsXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmQgPSBTb25hbXUud29ya2Zsb3dzLmJhY2tlbmQ7XG4gICAgICAgIHJldHVybiBiYWNrZW5kLmNhbmNlbFdvcmtmbG93UnVuKHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkOiByZXF1ZXN0LnBhcmFtcy5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBQYXJhbXM6IHsgaWQ6IHN0cmluZyB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVucy86aWQvcGF1c2VcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFja2VuZCA9IFNvbmFtdS53b3JrZmxvd3MuYmFja2VuZDtcbiAgICAgICAgcmV0dXJuIGJhY2tlbmQucGF1c2VXb3JrZmxvd1J1bih7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZDogcmVxdWVzdC5wYXJhbXMuaWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgUGFyYW1zOiB7IGlkOiBzdHJpbmcgfTtcbiAgICAgIH0+KFwiL2FwaS90YXNrcy93b3JrZmxvd1J1bnMvOmlkL3Jlc3VtZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWNrZW5kID0gU29uYW11LndvcmtmbG93cy5iYWNrZW5kO1xuICAgICAgICByZXR1cm4gYmFja2VuZC5yZXN1bWVXb3JrZmxvd1J1bih7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZDogcmVxdWVzdC5wYXJhbXMuaWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBQYXJhbXM6IHsgaWQ6IHN0cmluZyB9O1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGxpbWl0Pzogc3RyaW5nO1xuICAgICAgICAgIGFmdGVyPzogc3RyaW5nO1xuICAgICAgICAgIGJlZm9yZT86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS90YXNrcy93b3JrZmxvd1J1bnMvOmlkL3N0ZXBzXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmQgPSBTb25hbXUud29ya2Zsb3dzLmJhY2tlbmQ7XG4gICAgICAgIGNvbnN0IHsgbGltaXQsIGFmdGVyLCBiZWZvcmUgfSA9IHJlcXVlc3QucXVlcnk7XG4gICAgICAgIHJldHVybiBiYWNrZW5kLmxpc3RTdGVwQXR0ZW1wdHMoe1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQ6IHJlcXVlc3QucGFyYW1zLmlkLFxuICAgICAgICAgIGxpbWl0OiBsaW1pdCA/IE51bWJlci5wYXJzZUludChsaW1pdCwgMTApIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGFmdGVyLFxuICAgICAgICAgIGJlZm9yZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBIZWFsdGggQ2hlY2sgQVBJXG4gICAgICAgKiBNQ1Ag64+E6rWs6rCAIFNvbmFtdSDshJzrsoTrpbwg7J6Q64+ZIOqwkOyngO2VmOq4sCDsnITtlZwg7JeU65Oc7Y+s7J247Yq4XG4gICAgICAgKi9cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL3NvbmFtdS9oZWFsdGhcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IHJlcXVlc3Quc2VydmVyLnNlcnZlci5hZGRyZXNzKCk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSBhZGRyZXNzICYmIHR5cGVvZiBhZGRyZXNzID09PSBcIm9iamVjdFwiID8gKGFkZHJlc3MgYXMgQWRkcmVzc0luZm8pLnBvcnQgOiAwO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2s6IHRydWUsXG4gICAgICAgICAgcHJvamVjdDogcHJvY2Vzcy5jd2QoKS5zcGxpdChcIi9cIikucG9wKCkgfHwgXCJ1bmtub3duXCIsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIEZpeHR1cmUg7IOd7ISxIEFQSVxuICAgICAgICovXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHk6IHN0cmluZztcbiAgICAgICAgICBjb3VudD86IG51bWJlcjtcbiAgICAgICAgICBvdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICB0YXJnZXREYj86IFwiZml4dHVyZVwiIHwgXCJ0ZXN0XCI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc29uYW11L2ZpeHR1cmUvZ2VuZXJhdGVcIiwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5LCBjb3VudCA9IDEsIG92ZXJyaWRlcywgdGFyZ2V0RGIgPSBcImZpeHR1cmVcIiB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgIC8vIO2DgOqynyBEQiDshKTsoJUg6rCA7KC47Jik6riwXG4gICAgICAgIGNvbnN0IGRiQ29uZmlnID0gdGFyZ2V0RGIgPT09IFwiZml4dHVyZVwiID8gU29uYW11LmRiQ29uZmlnLmZpeHR1cmUgOiBTb25hbXUuZGJDb25maWcudGVzdDtcblxuICAgICAgICAvLyBLbmV4IOyduOyKpO2EtOyKpCDsg53shLFcbiAgICAgICAgY29uc3QgZGIgPSBjcmVhdGVLbmV4SW5zdGFuY2UoZGJDb25maWcpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gRml4dHVyZUdlbmVyYXRvciDsg53shLFcbiAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihkYiwgZGIsIHRhcmdldERiLCBFbnRpdHlNYW5hZ2VyKTtcblxuICAgICAgICAgIC8vIOuLqOydvCBFbnRpdHkg67Cw7LmYIOyDneyEsVxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVzID0gYXdhaXQgZ2VuZXJhdG9yLmdlbmVyYXRlQmF0Y2goW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGNvdW50LFxuICAgICAgICAgICAgICBvdmVycmlkZXM6IG92ZXJyaWRlcyA/PyB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgIGNvdW50OiBmaXh0dXJlcy5sZW5ndGgsXG4gICAgICAgICAgICBmaXh0dXJlcyxcbiAgICAgICAgICAgIHRhcmdldERiLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVwbHkuc3RhdHVzKDQwMCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRml4dHVyZSDrjbDsnbTthLAg7YOQ7IOJIEFQSVxuICAgICAgICovXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHk6IHN0cmluZztcbiAgICAgICAgICBzdHJhdGVneTogXCJzYW1wbGVcIiB8IFwicmVjZW50XCIgfCBcInJhbmRvbVwiIHwgXCJxdWVyeVwiO1xuICAgICAgICAgIGxpbWl0PzogbnVtYmVyO1xuICAgICAgICAgIHdoZXJlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc29uYW11L2ZpeHR1cmUvZXhwbG9yZVwiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgY29uc3QgeyBlbnRpdHksIHN0cmF0ZWd5LCBsaW1pdCA9IDEwLCB3aGVyZSB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgIC8vIEZpeHR1cmUgREIg7ISk7KCVIOqwgOyguOyYpOq4sFxuICAgICAgICBjb25zdCBmaXh0dXJlRGJDb25maWcgPSBTb25hbXUuZGJDb25maWcuZml4dHVyZTtcblxuICAgICAgICAvLyBLbmV4IOyduOyKpO2EtOyKpCDsg53shLFcbiAgICAgICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKGZpeHR1cmVEYkNvbmZpZyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBEYXRhRXhwbG9yZXIg7IOd7ISxXG4gICAgICAgICAgY29uc3QgZXhwbG9yZXIgPSBuZXcgRGF0YUV4cGxvcmVyKGZpeHR1cmVEYiwgRW50aXR5TWFuYWdlcik7XG5cbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZXhwbG9yZXIuZXhwbG9yZShlbnRpdHksIHtcbiAgICAgICAgICAgIHN0cmF0ZWd5LFxuICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICB3aGVyZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgICAgICBjb3VudDogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVwbHkuc3RhdHVzKDQwMCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGZpeHR1cmVEYi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIEZpeHR1cmUg642w7J207YSwIOqwgOyguOyYpOq4sCAoZmV0Y2gpIEFQSVxuICAgICAgICogcHJvZHVjdGlvbi9kZXZlbG9wbWVudCBEQuyXkOyEnCDsi6TsoJwg642w7J207YSw66W8IGZpeHR1cmUgRELroZwgaW1wb3J0XG4gICAgICAgKi9cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eTogc3RyaW5nO1xuICAgICAgICAgIHN0cmF0ZWd5PzogXCJzYW1wbGVcIiB8IFwicmVjZW50XCIgfCBcInJhbmRvbVwiIHwgXCJxdWVyeVwiO1xuICAgICAgICAgIGxpbWl0PzogbnVtYmVyO1xuICAgICAgICAgIGluY2x1ZGVSZWxhdGlvbnM/OiBib29sZWFuO1xuICAgICAgICAgIG1heERlcHRoPzogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NvbmFtdS9maXh0dXJlL2ZldGNoXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIHN0cmF0ZWd5ID0gXCJyZWNlbnRcIixcbiAgICAgICAgICBsaW1pdCA9IDEwLFxuICAgICAgICAgIGluY2x1ZGVSZWxhdGlvbnMgPSB0cnVlLFxuICAgICAgICAgIG1heERlcHRoID0gMixcbiAgICAgICAgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAvLyBTb3VyY2UgREIgKHByb2R1Y3Rpb24vZGV2ZWxvcG1lbnQpIC0g7J296riwIOyghOyaqVxuICAgICAgICBjb25zdCBzb3VyY2VEYiA9IERCLmdldERCKFwiclwiKTtcblxuICAgICAgICAvLyBUYXJnZXQgREIgKGZpeHR1cmUpXG4gICAgICAgIGNvbnN0IGZpeHR1cmVEYiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShTb25hbXUuZGJDb25maWcuZml4dHVyZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBGaXh0dXJlR2VuZXJhdG9yIOyDneyEsVxuICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBGaXh0dXJlR2VuZXJhdG9yKHNvdXJjZURiLCBmaXh0dXJlRGIsIFwiZml4dHVyZVwiLCBFbnRpdHlNYW5hZ2VyKTtcblxuICAgICAgICAgIC8vIHByb2R1Y3Rpb24g642w7J207YSw66W8IGZpeHR1cmUgRELroZwgaW1wb3J0XG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGdlbmVyYXRvci5pbXBvcnRGcm9tU291cmNlKGVudGl0eSwge1xuICAgICAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIGluY2x1ZGVSZWxhdGlvbnMsXG4gICAgICAgICAgICBtYXhEZXB0aCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgICAgICBjb3VudDogcmVzdWx0cy5sZW5ndGgsXG4gICAgICAgICAgICBpbXBvcnRlZDogcmVzdWx0cyxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlcGx5LnN0YXR1cyg0MDApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAvLyBzb3VyY2VEYuuKlCBTb25hbXXqsIAg6rSA66as7ZWY66+A66GcIGRlc3Ryb3ntlZjsp4Ag7JWK7J2MXG4gICAgICAgICAgYXdhaXQgZml4dHVyZURiLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRml4dHVyZSDrjbDsnbTthLAg7IKt7KCcIChjbGVhbikgQVBJXG4gICAgICAgKiBGSyDsiJzshJzrpbwg6rOg66Ck7ZWY7JesIOyViOyghO2VmOqyjCDsgq3soJxcbiAgICAgICAqL1xuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXRpZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zb25hbXUvZml4dHVyZS9jbGVhblwiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgY29uc3QgeyBlbnRpdGllcyB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgIC8vIEZpeHR1cmUgREIg7Jew6rKwXG4gICAgICAgIGNvbnN0IGZpeHR1cmVEYiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShTb25hbXUuZGJDb25maWcuZml4dHVyZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyDsgq3soJztlaAgRW50aXR5IOuqqeuhnSDqsrDsoJVcbiAgICAgICAgICBjb25zdCB0YXJnZXRFbnRpdGllcyA9XG4gICAgICAgICAgICBlbnRpdGllcyAmJiBlbnRpdGllcy5sZW5ndGggPiAwID8gZW50aXRpZXMgOiBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuXG4gICAgICAgICAgLy8gRW50aXR5IElE66W8IO2FjOydtOu4lOuqheycvOuhnCDrs4DtmZggKHNuYWtlX2Nhc2Ug67O17IiY7ZiVKVxuICAgICAgICAgIGNvbnN0IHRhYmxlTmFtZXMgPSB0YXJnZXRFbnRpdGllcy5tYXAoKGVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gZW50aXR5LnRhYmxlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gUG9zdGdyZVNRTDogVFJVTkNBVEUgQ0FTQ0FEReuhnCBGSyDsiJzshJwg66y06rSA7ZWY6rKMIOyViOyghO2VmOqyjCDsgq3soJxcbiAgICAgICAgICAvLyBDQVNDQURFIOyYteyFmOycvOuhnCDsnZjsobTshLEg7J6I64qUIOuNsOydtO2EsOuPhCDtlajqu5gg7IKt7KCcXG4gICAgICAgICAgYXdhaXQgZml4dHVyZURiLnJhdyhcbiAgICAgICAgICAgIGBUUlVOQ0FURSBUQUJMRSAke3RhYmxlTmFtZXMubWFwKCh0KSA9PiBgXCIke3R9XCJgKS5qb2luKFwiLCBcIil9IFJFU1RBUlQgSURFTlRJVFkgQ0FTQ0FERWAsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgY2xlYW5lZDogdGFibGVOYW1lcyxcbiAgICAgICAgICAgIGNvdW50OiB0YWJsZU5hbWVzLmxlbmd0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlcGx5LnN0YXR1cyg0MDApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBhd2FpdCBmaXh0dXJlRGIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQ0REIEFQSVxuICAgICAgc2VydmVyLmdldChcIi9hcGkvY2RkL2Rhc2hib2FyZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXREYXNoYm9hcmQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9jZGQvdHJlZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXRDZGRUcmVlKCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8eyBCb2R5OiB7IGZpbGVQYXRoOiBzdHJpbmcgfSB9PihcIi9hcGkvY2RkL3JlYWRDb250ZW50XCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmlsZVBhdGggfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZW50KGZpbGVQYXRoKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7IEJvZHk6IHsgZmlsZVBhdGg6IHN0cmluZyB9IH0+KFwiL2FwaS9jZGQvZWRpdENvbnRlbnRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWxlUGF0aCB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICByZXR1cm4gZWRpdENvbnRlbnQoZmlsZVBhdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHsgQm9keTogeyBmaWxlUGF0aDogc3RyaW5nIH0gfT4oXCIvYXBpL2NkZC9vcGVuU291cmNlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmlsZVBhdGggfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgb3BlblNvdXJjZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICB9KTtcblxuICAgICAgLy8gQ0REIFNjaGVtYSBBUElcbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL2NkZC9zY2hlbWFzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGxpc3RTY2hlbWFzKCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8eyBCb2R5OiB7IHNjaGVtYUtleTogc3RyaW5nIH0gfT4oXCIvYXBpL2NkZC9yZWFkU2NoZW1hXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hS2V5IH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIHJldHVybiByZWFkU2NoZW1hKHNjaGVtYUtleSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8eyBCb2R5OiB7IHNjaGVtYUtleTogc3RyaW5nIH0gfT4oXCIvYXBpL2NkZC9lZGl0U2NoZW1hXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hS2V5IH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIHJldHVybiBlZGl0U2NoZW1hKHNjaGVtYUtleSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gdWktd2ViIOu5jOuTnCDtjIzsnbwg7ISc67mZXG4gICAgICBjb25zdCB1aURpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi4vdWktd2ViXCIpO1xuXG4gICAgICAvLyDsoJXsoIEg7YyM7J28IOyEnOu5mTog66Oo7Yq4IO2PtOuNlCDsoITssrQgKGFzc2V0cywgc2V0dGluZy5zdmcg65OxKVxuICAgICAgc2VydmVyLnJlZ2lzdGVyKGF3YWl0IGltcG9ydChcIkBmYXN0aWZ5L3N0YXRpY1wiKSwge1xuICAgICAgICByb290OiB1aURpc3RQYXRoLFxuICAgICAgICBwcmVmaXg6IFwiL1wiLFxuICAgICAgICBkZWNvcmF0ZVJlcGx5OiBmYWxzZSxcbiAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNQQSBmYWxsYmFjayAtIOygleyggSDtjIzsnbzsnbQg7JeG64qUIOuqqOuToCDqsr3roZzripQgaW5kZXguaHRtbOuhnFxuICAgICAgc2VydmVyLmdldChcIipcIiwgYXN5bmMgKF9yZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICByZXBseS5oZWFkZXJzKHsgXCJDb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9KS5zZW5kKFxuICAgICAgICAgIGZzXG4gICAgICAgICAgICAucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZSh1aURpc3RQYXRoLCBcImluZGV4Lmh0bWxcIikpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJ7e3Byb2plY3ROYW1lfX1cIiwgU29uYW11LmNvbmZpZy5wcm9qZWN0TmFtZSA/PyBcIlVua25vd25Tb25hbXVQcm9qZWN0XCIpLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB7IHByZWZpeDogXCIvc29uYW11LXVpXCIgfSxcbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJleGVjU3luYyIsImZzIiwiaW5mbGVjdGlvbiIsInBhdGgiLCJyYW5nZSIsIlNvbmFtdSIsIkRCIiwiY3JlYXRlS25leEluc3RhbmNlIiwiU0QiLCJzb25hbXVEaWN0aW9uYXJ5IiwiRW50aXR5TWFuYWdlciIsIkJhZFJlcXVlc3RFeGNlcHRpb24iLCJpc1NvRXhjZXB0aW9uIiwiU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIiwiTWlncmF0b3IiLCJTbGFja0NvbmZpcm0iLCJUZW1wbGF0ZU1hbmFnZXIiLCJEYXRhRXhwbG9yZXIiLCJGaXh0dXJlR2VuZXJhdG9yIiwiRml4dHVyZU1hbmFnZXIiLCJCVUlMVF9JTl9UWVBFX0lEUyIsIlRlbXBsYXRlS2V5Iiwibm9uTnVsbGFibGUiLCJzZXRBaUFwaSIsImVkaXRDb250ZW50IiwiZWRpdFNjaGVtYSIsImdldENkZFRyZWUiLCJnZXREYXNoYm9hcmQiLCJsaXN0U2NoZW1hcyIsIm9wZW5Tb3VyY2VGaWxlIiwicmVhZENvbnRlbnQiLCJyZWFkU2NoZW1hIiwic29uYW11VUlBcGlQbHVnaW4iLCJmYXN0aWZ5IiwicmVnaXN0ZXIiLCJzZXJ2ZXIiLCJtaWdyYXRvciIsIndhaXRGb3JITVJDb21wbGV0ZWQiLCJmbiIsIndhaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYW5kbGVyIiwiY2xlYXJUaW1lb3V0IiwidGltZW91dCIsInNldFRpbWVvdXQiLCJzeW5jZXIiLCJldmVudEVtaXR0ZXIiLCJvZmYiLCJvbmNlIiwicmVzdWx0IiwiZ2V0IiwiY29uZmlnIiwicmVxdWVzdCIsImVudGl0eUlkIiwicHJlc2V0IiwiYWJzUGF0aCIsInF1ZXJ5IiwidGFyZ2V0UGF0aCIsImVudGl0eSIsIm5hbWVzIiwiYXBpUm9vdFBhdGgiLCJmaWxlbmFtZSIsInBhcmVudEZzIiwib3JpZ2luIiwiZ2xvc3NhcnkiLCJNYXAiLCJnZXRBbGxJZHMiLCJ0aXRsZSIsInNldCIsInVuZGVyc2NvcmUiLCJpZCIsInBsdXJhbGl6ZSIsInByb3BzIiwiZm9yRWFjaCIsInByb3AiLCJoYXMiLCJuYW1lIiwiZGVzYyIsInJlcGxhY2UiLCJzdWdnZXN0ZWQiLCJ3b3JkcyIsInNwbGl0IiwiY29tYmluYXRpb25zIiwibGVuZ3RoIiwiZmxhdE1hcCIsImxlbiIsImlkeCIsInciLCJzbGljZSIsImpvaW4iLCJSRVBMQUNFRF9QUkVGSVgiLCJyZW1haW5BcnIiLCJjb21iIiwicmVtYWluU3RyIiwiaW5jbHVkZXMiLCJtYXAiLCJyIiwic3RhcnRzV2l0aCIsInRvVXBwZXJDYXNlIiwiZW50aXR5SWRzIiwiZmxhdHRlblN1YnNldFJvd3MiLCJzdWJzZXRSb3dzIiwic3Vic2V0Um93IiwiY2hpbGRyZW4iLCJzUm93IiwiZW50aXRpZXMiLCJhbGwiLCJnZXRTdWJzZXRSb3dzIiwic29ydCIsImEiLCJiIiwiYUlkIiwicGFyZW50SWQiLCJiSWQiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJyZWxvYWQiLCJhdXRvbG9hZFR5cGVzIiwidHlwZUlkcyIsInByb2plY3RUeXBlSWRzIiwiT2JqZWN0IiwiZW50cmllcyIsInR5cGVzIiwiX3R5cGVJZCIsInpvZFR5cGUiLCJfem9kIiwiZGVmIiwidHlwZSIsInR5cGVJZCIsIl96b2RUeXBlIiwiYnVpbHRJblR5cGVJZHMiLCJhbGxUeXBlSWRzIiwiZW51bUlkcyIsImtleXMiLCJlbnVtTGFiZWxzIiwicG9zdCIsImZvcm0iLCJib2R5IiwiY3JlYXRlRW50aXR5IiwiZGVsRW50aXR5IiwibmV3VmFsdWVzIiwidGFibGUiLCJzYXZlIiwic3Vic2V0S2V5IiwiZmllbGRzIiwiZmllbGRzSW50ZXJuYWwiLCJzdWJzZXRzIiwic3Vic2V0c0ludGVybmFsIiwidXBkYXRlZCIsInVwZGF0ZWRJbnRlcm5hbCIsImF0IiwibmV3UHJvcCIsImNyZWF0ZVByb3AiLCJtb2RpZnlQcm9wIiwiZGVsUHJvcCIsInRvIiwibW92ZVByb3AiLCJpbmRleGVzIiwibmV3RW51bUlkIiwiRXJyb3IiLCJlbmRzV2l0aCIsImFjdGl2ZSIsImhpZGRlbiIsImVudW1JZCIsImlzRXhpc3RzIiwic29tZSIsImFmdGVyIiwiYmVmb3JlIiwiaXNSZWZlcmVuY2VkIiwidGFyZ2V0IiwicHJvcE5hbWUiLCJjb25lIiwiZmluZCIsInAiLCJlbnVtQ29uZXMiLCJzdWJzZXRDb25lcyIsInJlcGx5IiwicHJlc2VydmVFeGlzdGluZyIsIm9ubHlFbXB0eSIsImxvY2FsZSIsImVmZmVjdGl2ZUxvY2FsZSIsImkxOG4iLCJkZWZhdWx0TG9jYWxlIiwiZ2VuZXJhdGVDb25lcyIsImVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsInN0YXR1cyIsInN1Y2Nlc3MiLCJjb2x1bW5zIiwiZ2V0VGFibGVDb2x1bW5zIiwiZ2V0U3RhdHVzIiwiYWN0aW9uIiwidGFyZ2V0cyIsImZvcmNlIiwiZm9yY2VSZWFzb24iLCJyZXF1ZXN0b3IiLCJydW5TaGFkb3dUZXN0Iiwic2xhY2tDb25maXJtIiwicmVxdWlyZXNBcHByb3ZhbCIsInQiLCJpc1RhcmdldFJlcXVpcmVzQXBwcm92YWwiLCJsb2NhbEhvc3RzIiwiaXNMb2NhbFRhcmdldCIsImV2ZXJ5IiwidGFyZ2V0Q29uZmlnIiwiZGJDb25maWciLCJob3N0IiwiY29ubmVjdGlvbiIsInRvTG93ZXJDYXNlIiwiaXNDb25maWd1cmVkIiwiY29ubnMiLCJwZW5kaW5nTWlncmF0aW9ucyIsIlNldCIsImNvbm4iLCJjb25uS2V5IiwicGVuZGluZyIsImV4aXN0aW5nIiwiZ2V0RXhpc3RpbmdSZXF1ZXN0IiwiYXBwcm92ZWQiLCJyZWplY3RlZCIsImNoZWNrQXBwcm92YWwiLCJjaGFubmVsIiwidHMiLCJydW5BY3Rpb24iLCJsb2dFeGVjdXRpb24iLCJmb3JjZUFwcHJvdmFsIiwicG9zdEFwcHJvdmFsUmVxdWVzdCIsInNhdmVSZXF1ZXN0IiwicmVhc29uIiwiY29kZU5hbWVzIiwiZGVsQ29kZXMiLCJfcmVxdWVzdHQiLCJnZW5lcmF0ZVByZXBhcmVkQ29kZXMiLCJ0ZW1wbGF0ZUtleXMiLCJfdGVtcGxhdGVLZXlzIiwib3B0aW9ucyIsInRrIiwidGVtcGxhdGVLZXkiLCJzdGF0dXNlcyIsInN1YlBhdGgiLCJmdWxsUGF0aCIsImNoZWNrRXhpc3RzR2VuQ29kZSIsInRlbXBsYXRlIiwiZ2V0UmVxdWlyZWREaWN0S2V5cyIsImVuc3VyZURpY3RLZXlzIiwib3ZlcndyaXRlIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImUiLCJzdGF0dXNDb2RlIiwiY29uc29sZSIsIm9wdGlvbiIsInRlbXBsYXRlT3B0aW9ucyIsInBhdGhBbmRDb2RlcyIsInJlbmRlclRlbXBsYXRlIiwic291cmNlREIiLCJ0YXJnZXREQiIsInNlYXJjaCIsImR1cGxpY2F0ZUNoZWNrIiwiZ2V0Rml4dHVyZXMiLCJkYiIsImZpeHR1cmVzIiwiaW5zZXJ0Rml4dHVyZXMiLCJjb2RlIiwiYWRkRml4dHVyZUxvYWRlciIsImdldERpY3Rpb25hcnkiLCJfcmVxdWVzdCIsImJ1ZmZlciIsImV4cG9ydFRvRXhjZWwiLCJoZWFkZXIiLCJzZW5kIiwiZGF0YSIsImZpbGUiLCJ0b0J1ZmZlciIsImltcG9ydEZyb21FeGNlbCIsInVwZGF0ZUVudHJ5IiwiY3JlYXRlRW50cnkiLCJkZWxldGVFbnRyeSIsImtleSIsImNoZWNrVXNhZ2UiLCJ3b3JrZmxvd3MiLCJkZWZpbml0aW9ucyIsIndvcmtmbG93RGVmaW5pdGlvbnMiLCJiYWNrZW5kIiwibGltaXQiLCJvcmRlciIsIndvcmtmbG93TmFtZSIsImNyZWF0ZWRBZnRlciIsImNyZWF0ZWRCZWZvcmUiLCJsaXN0V29ya2Zsb3dSdW5zIiwiTnVtYmVyIiwicGFyc2VJbnQiLCJEYXRlIiwid29ya2Zsb3dSdW4iLCJnZXRXb3JrZmxvd1J1biIsIndvcmtmbG93UnVuSWQiLCJwYXJhbXMiLCJjYW5jZWxXb3JrZmxvd1J1biIsInBhdXNlV29ya2Zsb3dSdW4iLCJyZXN1bWVXb3JrZmxvd1J1biIsImxpc3RTdGVwQXR0ZW1wdHMiLCJhZGRyZXNzIiwicG9ydCIsIm9rIiwicHJvamVjdCIsInByb2Nlc3MiLCJjd2QiLCJwb3AiLCJ0aW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImNvdW50Iiwib3ZlcnJpZGVzIiwidGFyZ2V0RGIiLCJmaXh0dXJlIiwidGVzdCIsImdlbmVyYXRvciIsImdlbmVyYXRlQmF0Y2giLCJkZXN0cm95Iiwic3RyYXRlZ3kiLCJ3aGVyZSIsImZpeHR1cmVEYkNvbmZpZyIsImZpeHR1cmVEYiIsImV4cGxvcmVyIiwiZXhwbG9yZSIsImluY2x1ZGVSZWxhdGlvbnMiLCJtYXhEZXB0aCIsInNvdXJjZURiIiwiZ2V0REIiLCJyZXN1bHRzIiwiaW1wb3J0RnJvbVNvdXJjZSIsImltcG9ydGVkIiwidGFyZ2V0RW50aXRpZXMiLCJ0YWJsZU5hbWVzIiwicmF3IiwiY2xlYW5lZCIsImZpbGVQYXRoIiwic2NoZW1hS2V5IiwidWlEaXN0UGF0aCIsImRpcm5hbWUiLCJyb290IiwicHJlZml4IiwiZGVjb3JhdGVSZXBseSIsIndpbGRjYXJkIiwiaGVhZGVycyIsInJlYWRGaWxlU3luYyIsInRvU3RyaW5nIiwicHJvamVjdE5hbWUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsUUFBUSxnQkFBZ0I7QUFFekMsT0FBT0MsUUFBUSxLQUFLO0FBQ3BCLE9BQU9DLGdCQUFnQixhQUFhO0FBRXBDLE9BQU9DLFVBQVUsT0FBTztBQUN4QixTQUFTQyxLQUFLLFFBQVEsVUFBVTtBQUNoQyxTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBQ3ZDLFNBQVNDLEVBQUUsUUFBNkIsb0JBQWlCO0FBQ3pELFNBQVNDLGtCQUFrQixRQUFRLHNCQUFtQjtBQUN0RCxTQUFTQyxFQUFFLFFBQVEsZ0JBQWE7QUFDaEMsU0FBU0MsZ0JBQWdCLFFBQVEsK0JBQTRCO0FBRTdELFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FDRUMsbUJBQW1CLEVBQ25CQyxhQUFhLEVBQ2JDLDJCQUEyQixRQUN0QixpQ0FBOEI7QUFDckMsU0FBK0JDLFFBQVEsUUFBUSwyQkFBd0I7QUFDdkUsU0FBU0MsWUFBWSxRQUF3QyxnQ0FBNkI7QUFDMUYsU0FBU0MsZUFBZSxRQUFRLGtDQUErQjtBQUMvRCxTQUFTQyxZQUFZLFFBQVEsOEJBQTJCO0FBQ3hELFNBQVNDLGdCQUFnQixRQUFRLGtDQUErQjtBQUNoRSxTQUFxQ0MsY0FBYyxRQUFRLGdDQUE2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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.8.21",
3
+ "version": "0.8.22",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "typescript",
@@ -123,10 +123,10 @@
123
123
  "tsicli": "^1.0.5",
124
124
  "vite": "7.3.0",
125
125
  "vitest": "^4.0.10",
126
- "@sonamu-kit/hmr-hook": "^0.4.1",
126
+ "@sonamu-kit/hmr-runner": "^0.1.1",
127
127
  "@sonamu-kit/tasks": "^0.2.0",
128
- "@sonamu-kit/ts-loader": "^2.1.3",
129
- "@sonamu-kit/hmr-runner": "^0.1.1"
128
+ "@sonamu-kit/hmr-hook": "^0.4.1",
129
+ "@sonamu-kit/ts-loader": "^2.1.3"
130
130
  },
131
131
  "devDependencies": {
132
132
  "@biomejs/biome": "^2.3.13",
package/src/api/config.ts CHANGED
@@ -83,7 +83,7 @@ export type SonamuConfig<TSinkId extends string = string, TFilterId extends stri
83
83
  targets: string[]; // "web", "app" 등
84
84
  };
85
85
 
86
- database?: {
86
+ database: {
87
87
  // 데이터베이스(pg는 pg 모듈, pgnative는 pg-native 모듈의 설치가 필요합니다.)
88
88
  database?: "pg" | "pgnative";
89
89
  // 기본 데이터베이스 이름