@cloudsnorkel/cdk-github-runners 0.14.23 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/.jsii +5397 -252
  2. package/API.md +1048 -24
  3. package/README.md +52 -0
  4. package/assets/delete-failed-runner.lambda/index.js +105 -9
  5. package/assets/idle-runner-repear.lambda/index.js +136 -14
  6. package/assets/image-builders/aws-image-builder/delete-resources.lambda/index.js +1 -1
  7. package/assets/image-builders/build-image.lambda/index.js +1 -1
  8. package/assets/providers/ami-root-device.lambda/index.js +1 -1
  9. package/assets/setup.lambda/index.html +7 -7
  10. package/assets/setup.lambda/index.js +101 -8
  11. package/assets/status.lambda/index.js +104 -8
  12. package/assets/token-retriever.lambda/index.js +104 -8
  13. package/assets/warm-runner-manager.lambda/index.js +5892 -0
  14. package/assets/webhook-handler.lambda/index.js +109 -11
  15. package/assets/webhook-redelivery.lambda/index.js +122 -24
  16. package/lib/access.js +1 -1
  17. package/lib/delete-failed-runner.lambda.js +2 -2
  18. package/lib/idle-runner-repear.lambda.js +33 -7
  19. package/lib/image-builders/api.js +1 -1
  20. package/lib/image-builders/aws-image-builder/base-image.d.ts +13 -0
  21. package/lib/image-builders/aws-image-builder/base-image.js +36 -3
  22. package/lib/image-builders/aws-image-builder/builder.js +4 -4
  23. package/lib/image-builders/aws-image-builder/delete-resources.lambda.js +2 -2
  24. package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
  25. package/lib/image-builders/aws-image-builder/deprecated/container.js +1 -1
  26. package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
  27. package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
  28. package/lib/image-builders/build-image.lambda.js +2 -2
  29. package/lib/image-builders/codebuild-deprecated.js +1 -1
  30. package/lib/image-builders/components.js +3 -3
  31. package/lib/image-builders/static.js +1 -1
  32. package/lib/index.d.ts +1 -0
  33. package/lib/index.js +2 -1
  34. package/lib/lambda-github.d.ts +1 -1
  35. package/lib/lambda-github.js +3 -2
  36. package/lib/lambda-helpers.js +4 -4
  37. package/lib/providers/ami-root-device.lambda.js +2 -2
  38. package/lib/providers/codebuild.d.ts +16 -0
  39. package/lib/providers/codebuild.js +16 -5
  40. package/lib/providers/common.js +3 -3
  41. package/lib/providers/composite.js +1 -1
  42. package/lib/providers/ec2.d.ts +5 -0
  43. package/lib/providers/ec2.js +42 -29
  44. package/lib/providers/ecs.d.ts +17 -0
  45. package/lib/providers/ecs.js +43 -38
  46. package/lib/providers/fargate.js +10 -32
  47. package/lib/providers/lambda.js +2 -2
  48. package/lib/runner.d.ts +25 -2
  49. package/lib/runner.js +119 -17
  50. package/lib/secrets.js +1 -1
  51. package/lib/setup.lambda.js +2 -2
  52. package/lib/utils.d.ts +10 -1
  53. package/lib/utils.js +15 -1
  54. package/lib/warm-runner-manager-function.d.ts +18 -0
  55. package/lib/warm-runner-manager-function.js +24 -0
  56. package/lib/warm-runner-manager.lambda.d.ts +41 -0
  57. package/lib/warm-runner-manager.lambda.js +487 -0
  58. package/lib/warm-runner.d.ts +147 -0
  59. package/lib/warm-runner.js +210 -0
  60. package/lib/webhook-handler.lambda.js +5 -3
  61. package/lib/webhook-redelivery.lambda.js +17 -16
  62. package/lib/webhook.d.ts +4 -0
  63. package/lib/webhook.js +2 -1
  64. package/node_modules/cron-parser/LICENSE +21 -0
  65. package/node_modules/cron-parser/README.md +408 -0
  66. package/node_modules/cron-parser/dist/CronDate.js +518 -0
  67. package/node_modules/cron-parser/dist/CronExpression.js +520 -0
  68. package/node_modules/cron-parser/dist/CronExpressionParser.js +382 -0
  69. package/node_modules/cron-parser/dist/CronFieldCollection.js +371 -0
  70. package/node_modules/cron-parser/dist/CronFileParser.js +109 -0
  71. package/node_modules/cron-parser/dist/fields/CronDayOfMonth.js +44 -0
  72. package/node_modules/cron-parser/dist/fields/CronDayOfWeek.js +51 -0
  73. package/node_modules/cron-parser/dist/fields/CronField.js +214 -0
  74. package/node_modules/cron-parser/dist/fields/CronHour.js +40 -0
  75. package/node_modules/cron-parser/dist/fields/CronMinute.js +40 -0
  76. package/node_modules/cron-parser/dist/fields/CronMonth.js +44 -0
  77. package/node_modules/cron-parser/dist/fields/CronSecond.js +40 -0
  78. package/node_modules/cron-parser/dist/fields/index.js +24 -0
  79. package/node_modules/cron-parser/dist/fields/types.js +2 -0
  80. package/node_modules/cron-parser/dist/index.js +31 -0
  81. package/node_modules/cron-parser/dist/types/CronDate.d.ts +288 -0
  82. package/node_modules/cron-parser/dist/types/CronExpression.d.ts +118 -0
  83. package/node_modules/cron-parser/dist/types/CronExpressionParser.d.ts +70 -0
  84. package/node_modules/cron-parser/dist/types/CronFieldCollection.d.ts +153 -0
  85. package/node_modules/cron-parser/dist/types/CronFileParser.d.ts +30 -0
  86. package/node_modules/cron-parser/dist/types/fields/CronDayOfMonth.d.ts +25 -0
  87. package/node_modules/cron-parser/dist/types/fields/CronDayOfWeek.d.ts +30 -0
  88. package/node_modules/cron-parser/dist/types/fields/CronField.d.ts +130 -0
  89. package/node_modules/cron-parser/dist/types/fields/CronHour.d.ts +23 -0
  90. package/node_modules/cron-parser/dist/types/fields/CronMinute.d.ts +23 -0
  91. package/node_modules/cron-parser/dist/types/fields/CronMonth.d.ts +24 -0
  92. package/node_modules/cron-parser/dist/types/fields/CronSecond.d.ts +23 -0
  93. package/node_modules/cron-parser/dist/types/fields/index.d.ts +8 -0
  94. package/node_modules/cron-parser/dist/types/fields/types.d.ts +18 -0
  95. package/node_modules/cron-parser/dist/types/index.d.ts +8 -0
  96. package/node_modules/cron-parser/dist/types/utils/random.d.ts +10 -0
  97. package/node_modules/cron-parser/dist/utils/random.js +38 -0
  98. package/node_modules/cron-parser/package.json +117 -0
  99. package/node_modules/luxon/LICENSE.md +7 -0
  100. package/node_modules/luxon/README.md +55 -0
  101. package/node_modules/luxon/build/amd/luxon.js +8741 -0
  102. package/node_modules/luxon/build/amd/luxon.js.map +1 -0
  103. package/node_modules/luxon/build/cjs-browser/luxon.js +8739 -0
  104. package/node_modules/luxon/build/cjs-browser/luxon.js.map +1 -0
  105. package/node_modules/luxon/build/es6/luxon.mjs +8133 -0
  106. package/node_modules/luxon/build/es6/luxon.mjs.map +1 -0
  107. package/node_modules/luxon/build/global/luxon.js +8744 -0
  108. package/node_modules/luxon/build/global/luxon.js.map +1 -0
  109. package/node_modules/luxon/build/global/luxon.min.js +1 -0
  110. package/node_modules/luxon/build/global/luxon.min.js.map +1 -0
  111. package/node_modules/luxon/build/node/luxon.js +7792 -0
  112. package/node_modules/luxon/build/node/luxon.js.map +1 -0
  113. package/node_modules/luxon/package.json +87 -0
  114. package/node_modules/luxon/src/datetime.js +2603 -0
  115. package/node_modules/luxon/src/duration.js +1009 -0
  116. package/node_modules/luxon/src/errors.js +61 -0
  117. package/node_modules/luxon/src/impl/conversions.js +206 -0
  118. package/node_modules/luxon/src/impl/diff.js +95 -0
  119. package/node_modules/luxon/src/impl/digits.js +94 -0
  120. package/node_modules/luxon/src/impl/english.js +233 -0
  121. package/node_modules/luxon/src/impl/formats.js +176 -0
  122. package/node_modules/luxon/src/impl/formatter.js +434 -0
  123. package/node_modules/luxon/src/impl/invalid.js +14 -0
  124. package/node_modules/luxon/src/impl/locale.js +569 -0
  125. package/node_modules/luxon/src/impl/regexParser.js +335 -0
  126. package/node_modules/luxon/src/impl/tokenParser.js +505 -0
  127. package/node_modules/luxon/src/impl/util.js +330 -0
  128. package/node_modules/luxon/src/impl/zoneUtil.js +34 -0
  129. package/node_modules/luxon/src/info.js +205 -0
  130. package/node_modules/luxon/src/interval.js +669 -0
  131. package/node_modules/luxon/src/luxon.js +26 -0
  132. package/node_modules/luxon/src/package.json +4 -0
  133. package/node_modules/luxon/src/settings.js +180 -0
  134. package/node_modules/luxon/src/zone.js +97 -0
  135. package/node_modules/luxon/src/zones/IANAZone.js +235 -0
  136. package/node_modules/luxon/src/zones/fixedOffsetZone.js +150 -0
  137. package/node_modules/luxon/src/zones/invalidZone.js +53 -0
  138. package/node_modules/luxon/src/zones/systemZone.js +61 -0
  139. package/package.json +33 -24
@@ -12,32 +12,33 @@ async function newDeliveryFailures(octokit, sinceId) {
12
12
  const deliveries = new Map();
13
13
  const successfulDeliveries = new Set();
14
14
  const timeLimitMs = 1000 * 60 * 30; // don't look at deliveries over 30 minutes old
15
- let lastId = 0;
15
+ let lastId = 0n;
16
16
  let processedCount = 0;
17
17
  for await (const response of octokit.paginate.iterator('GET /app/hook/deliveries')) {
18
18
  if (response.status !== 200) {
19
19
  throw new Error('Failed to fetch webhook deliveries');
20
20
  }
21
21
  for (const delivery of response.data) {
22
+ const deliveryId = BigInt(delivery.id);
22
23
  const deliveredAt = new Date(delivery.delivered_at);
23
24
  const success = delivery.status === 'OK';
24
- if (delivery.id <= sinceId) {
25
+ if (deliveryId <= sinceId) {
25
26
  // stop processing if we reach the last processed delivery ID
26
27
  console.info({
27
28
  notice: 'Reached last processed delivery ID',
28
- sinceId: sinceId,
29
- deliveryId: delivery.id,
29
+ sinceId: String(sinceId),
30
+ deliveryId: String(deliveryId),
30
31
  guid: delivery.guid,
31
32
  processedCount,
32
33
  });
33
34
  return { deliveries, lastId };
34
35
  }
35
- lastId = Math.max(lastId, delivery.id);
36
+ lastId = deliveryId > lastId ? deliveryId : lastId;
36
37
  if (deliveredAt.getTime() < Date.now() - timeLimitMs) {
37
38
  // stop processing if the delivery is too old (for first iteration and performance of further iterations)
38
39
  console.info({
39
40
  notice: 'Stopping at old delivery',
40
- deliveryId: delivery.id,
41
+ deliveryId: String(deliveryId),
41
42
  guid: delivery.guid,
42
43
  deliveredAt: deliveredAt,
43
44
  processedCount,
@@ -46,7 +47,7 @@ async function newDeliveryFailures(octokit, sinceId) {
46
47
  }
47
48
  console.debug({
48
49
  notice: 'Processing webhook delivery',
49
- deliveryId: delivery.id,
50
+ deliveryId: String(deliveryId),
50
51
  guid: delivery.guid,
51
52
  status: delivery.status,
52
53
  deliveredAt: delivery.delivered_at,
@@ -61,7 +62,7 @@ async function newDeliveryFailures(octokit, sinceId) {
61
62
  // do not redeliver deliveries that were already successful
62
63
  continue;
63
64
  }
64
- deliveries.set(delivery.guid, { id: delivery.id, deliveredAt, redelivery: delivery.redelivery });
65
+ deliveries.set(delivery.guid, { id: deliveryId, deliveredAt, redelivery: delivery.redelivery });
65
66
  }
66
67
  }
67
68
  console.info({
@@ -73,7 +74,7 @@ async function newDeliveryFailures(octokit, sinceId) {
73
74
  });
74
75
  return { deliveries, lastId };
75
76
  }
76
- let lastDeliveryIdProcessed = 0;
77
+ let lastDeliveryIdProcessed = 0n;
77
78
  const failures = new Map();
78
79
  /**
79
80
  * Clear the cache of webhook delivery failures.
@@ -83,7 +84,7 @@ const failures = new Map();
83
84
  * @internal
84
85
  */
85
86
  function clearFailuresCache() {
86
- lastDeliveryIdProcessed = 0;
87
+ lastDeliveryIdProcessed = 0n;
87
88
  failures.clear();
88
89
  }
89
90
  async function handler() {
@@ -100,14 +101,14 @@ async function handler() {
100
101
  // 1. if this is not a redelivery, save the delivery ID and time, and finally retry
101
102
  // 2. if this is a redelivery, check if the original delivery is still within the time limit and retry if it is
102
103
  const { deliveries, lastId } = await newDeliveryFailures(octokit, lastDeliveryIdProcessed);
103
- lastDeliveryIdProcessed = Math.max(lastDeliveryIdProcessed, lastId);
104
+ lastDeliveryIdProcessed = lastId > lastDeliveryIdProcessed ? lastId : lastDeliveryIdProcessed;
104
105
  const timeLimitMs = 1000 * 60 * 60 * 3; // retry for up to 3 hours
105
106
  for (const [guid, details] of deliveries) {
106
107
  if (!details.redelivery) {
107
108
  failures.set(guid, { id: details.id, firstDeliveredAt: details.deliveredAt });
108
109
  console.log({
109
110
  notice: 'Redelivering failed delivery',
110
- deliveryId: details.id,
111
+ deliveryId: String(details.id),
111
112
  guid: guid,
112
113
  firstDeliveredAt: details.deliveredAt,
113
114
  });
@@ -120,7 +121,7 @@ async function handler() {
120
121
  if (new Date().getTime() - originalFailure.firstDeliveredAt.getTime() < timeLimitMs) {
121
122
  console.log({
122
123
  notice: 'Redelivering failed delivery',
123
- deliveryId: details.id,
124
+ deliveryId: String(details.id),
124
125
  guid: guid,
125
126
  firstDeliveredAt: originalFailure.firstDeliveredAt,
126
127
  });
@@ -130,7 +131,7 @@ async function handler() {
130
131
  failures.delete(guid); // no need to keep track of this anymore
131
132
  console.log({
132
133
  notice: 'Skipping redelivery of old failed delivery',
133
- deliveryId: details.id,
134
+ deliveryId: String(details.id),
134
135
  guid: guid,
135
136
  firstDeliveredAt: originalFailure?.firstDeliveredAt,
136
137
  });
@@ -139,11 +140,11 @@ async function handler() {
139
140
  else {
140
141
  console.log({
141
142
  notice: 'Skipping redelivery of old failed delivery',
142
- deliveryId: details.id,
143
+ deliveryId: String(details.id),
143
144
  guid: guid,
144
145
  });
145
146
  }
146
147
  }
147
148
  }
148
149
  }
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay1yZWRlbGl2ZXJ5LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWJob29rLXJlZGVsaXZlcnkubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0ZBLGdEQUdDO0FBRUQsMEJBeURDO0FBNUpELG1EQUEyRDtBQUUzRDs7OztHQUlHO0FBQ0gsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE9BQWdCLEVBQUUsT0FBZTtJQUNsRSxNQUFNLFVBQVUsR0FBd0UsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNsRyxNQUFNLG9CQUFvQixHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3BELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsK0NBQStDO0lBQ25GLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztJQUV2QixJQUFJLEtBQUssRUFBRSxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7UUFDbkYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO1lBRXpDLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsNkRBQTZEO2dCQUM3RCxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLE1BQU0sRUFBRSxv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QUMsRUFBRTt3QkFDdEIsSUFBSSxFQUFFLElBQUk7d0JBQ1YsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLGdCQUFnQjtxQkFDbkQsQ0FBQyxDQUFDO29CQUNILE1BQU0sSUFBQSx5QkFBUyxFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsd0NBQXdDO29CQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDO3dCQUNWLE1BQU0sRUFBRSw0Q0FBNEM7d0JBQ3BELFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRTt3QkFDdEIsSUFBSSxFQUFFLElBQUk7d0JBQ1YsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQjtxQkFDcEQsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDVixNQUFNLEVBQUUsNENBQTRDO29CQUNwRCxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ3RCLElBQUksRUFBRSxJQUFJO2lCQUNYLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tICdAb2N0b2tpdC9yZXN0JztcbmltcG9ydCB7IGdldEFwcE9jdG9raXQsIHJlZGVsaXZlciB9IGZyb20gJy4vbGFtYmRhLWdpdGh1Yic7XG5cbi8qKlxuICogR2V0IHdlYmhvb2sgZGVsaXZlcnkgZmFpbHVyZXMgc2luY2UgdGhlIGxhc3QgcHJvY2Vzc2VkIGRlbGl2ZXJ5IElELlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5hc3luYyBmdW5jdGlvbiBuZXdEZWxpdmVyeUZhaWx1cmVzKG9jdG9raXQ6IE9jdG9raXQsIHNpbmNlSWQ6IG51bWJlcikge1xuICBjb25zdCBkZWxpdmVyaWVzOiBNYXA8c3RyaW5nLCB7IGlkOiBudW1iZXI7IGRlbGl2ZXJlZEF0OiBEYXRlOyByZWRlbGl2ZXJ5OiBib29sZWFuIH0+ID0gbmV3IE1hcCgpO1xuICBjb25zdCBzdWNjZXNzZnVsRGVsaXZlcmllczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHRpbWVMaW1pdE1zID0gMTAwMCAqIDYwICogMzA7IC8vIGRvbid0IGxvb2sgYXQgZGVsaXZlcmllcyBvdmVyIDMwIG1pbnV0ZXMgb2xkXG4gIGxldCBsYXN0SWQgPSAwO1xuICBsZXQgcHJvY2Vzc2VkQ291bnQgPSAwO1xuXG4gIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2Ygb2N0b2tpdC5wYWdpbmF0ZS5pdGVyYXRvcignR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzJykpIHtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIHdlYmhvb2sgZGVsaXZlcmllcycpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVsaXZlcnkgb2YgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgY29uc3QgZGVsaXZlcmVkQXQgPSBuZXcgRGF0ZShkZWxpdmVyeS5kZWxpdmVyZWRfYXQpO1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IGRlbGl2ZXJ5LnN0YXR1cyA9PT0gJ09LJztcblxuICAgICAgaWYgKGRlbGl2ZXJ5LmlkIDw9IHNpbmNlSWQpIHtcbiAgICAgICAgLy8gc3RvcCBwcm9jZXNzaW5nIGlmIHdlIHJlYWNoIHRoZSBsYXN0IHByb2Nlc3NlZCBkZWxpdmVyeSBJRFxuICAgICAgICBjb25zb2xlLmluZm8oe1xuICAgICAgICAgIG5vdGljZTogJ1JlYWNoZWQgbGFzdCBwcm9jZXNzZWQgZGVsaXZlcnkgSUQnLFxuICAgICAgICAgIHNpbmNlSWQ6IHNpbmNlSWQsXG4gICAgICAgICAgZGVsaXZlcnlJZDogZGVsaXZlcnkuaWQsXG4gICAgICAgICAgZ3VpZDogZGVsaXZlcnkuZ3VpZCxcbiAgICAgICAgICBwcm9jZXNzZWRDb3VudCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IGRlbGl2ZXJpZXMsIGxhc3RJZCB9O1xuICAgICAgfVxuXG4gICAgICBsYXN0SWQgPSBNYXRoLm1heChsYXN0SWQsIGRlbGl2ZXJ5LmlkKTtcblxuICAgICAgaWYgKGRlbGl2ZXJlZEF0LmdldFRpbWUoKSA8IERhdGUubm93KCkgLSB0aW1lTGltaXRNcykge1xuICAgICAgICAvLyBzdG9wIHByb2Nlc3NpbmcgaWYgdGhlIGRlbGl2ZXJ5IGlzIHRvbyBvbGQgKGZvciBmaXJzdCBpdGVyYXRpb24gYW5kIHBlcmZvcm1hbmNlIG9mIGZ1cnRoZXIgaXRlcmF0aW9ucylcbiAgICAgICAgY29uc29sZS5pbmZvKHtcbiAgICAgICAgICBub3RpY2U6ICdTdG9wcGluZyBhdCBvbGQgZGVsaXZlcnknLFxuICAgICAgICAgIGRlbGl2ZXJ5SWQ6IGRlbGl2ZXJ5LmlkLFxuICAgICAgICAgIGd1aWQ6IGRlbGl2ZXJ5Lmd1aWQsXG4gICAgICAgICAgZGVsaXZlcmVkQXQ6IGRlbGl2ZXJlZEF0LFxuICAgICAgICAgIHByb2Nlc3NlZENvdW50LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgZGVsaXZlcmllcywgbGFzdElkIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoe1xuICAgICAgICBub3RpY2U6ICdQcm9jZXNzaW5nIHdlYmhvb2sgZGVsaXZlcnknLFxuICAgICAgICBkZWxpdmVyeUlkOiBkZWxpdmVyeS5pZCxcbiAgICAgICAgZ3VpZDogZGVsaXZlcnkuZ3VpZCxcbiAgICAgICAgc3RhdHVzOiBkZWxpdmVyeS5zdGF0dXMsXG4gICAgICAgIGRlbGl2ZXJlZEF0OiBkZWxpdmVyeS5kZWxpdmVyZWRfYXQsXG4gICAgICAgIHJlZGVsaXZlcnk6IGRlbGl2ZXJ5LnJlZGVsaXZlcnksXG4gICAgICB9KTtcbiAgICAgIHByb2Nlc3NlZENvdW50Kys7XG5cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHN1Y2Nlc3NmdWxEZWxpdmVyaWVzLmFkZChkZWxpdmVyeS5ndWlkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWNjZXNzZnVsRGVsaXZlcmllcy5oYXMoZGVsaXZlcnkuZ3VpZCkpIHtcbiAgICAgICAgLy8gZG8gbm90IHJlZGVsaXZlciBkZWxpdmVyaWVzIHRoYXQgd2VyZSBhbHJlYWR5IHN1Y2Nlc3NmdWxcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGRlbGl2ZXJpZXMuc2V0KGRlbGl2ZXJ5Lmd1aWQsIHsgaWQ6IGRlbGl2ZXJ5LmlkLCBkZWxpdmVyZWRBdCwgcmVkZWxpdmVyeTogZGVsaXZlcnkucmVkZWxpdmVyeSB9KTtcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmluZm8oe1xuICAgIG5vdGljZTogJ05vIG1vcmUgd2ViaG9vayBkZWxpdmVyaWVzIHRvIHByb2Nlc3MnLFxuICAgIGRlbGl2ZXJ5SWQ6ICdET05FJyxcbiAgICBndWlkOiAnRE9ORScsXG4gICAgZGVsaXZlcmVkQXQ6ICdET05FJyxcbiAgICBwcm9jZXNzZWRDb3VudCxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgZGVsaXZlcmllcywgbGFzdElkIH07XG59XG5cbmxldCBsYXN0RGVsaXZlcnlJZFByb2Nlc3NlZCA9IDA7XG5jb25zdCBmYWlsdXJlczogTWFwPHN0cmluZywgeyBpZDogbnVtYmVyOyBmaXJzdERlbGl2ZXJlZEF0OiBEYXRlIH0+ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIENsZWFyIHRoZSBjYWNoZSBvZiB3ZWJob29rIGRlbGl2ZXJ5IGZhaWx1cmVzLlxuICpcbiAqIEZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMgb25seS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRmFpbHVyZXNDYWNoZSgpIHtcbiAgbGFzdERlbGl2ZXJ5SWRQcm9jZXNzZWQgPSAwO1xuICBmYWlsdXJlcy5jbGVhcigpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgY29uc3Qgb2N0b2tpdCA9IGF3YWl0IGdldEFwcE9jdG9raXQoKTtcbiAgaWYgKCFvY3Rva2l0KSB7XG4gICAgY29uc29sZS5pbmZvKHtcbiAgICAgIG5vdGljZTogJ1NraXBwaW5nIHdlYmhvb2sgcmVkZWxpdmVyeScsXG4gICAgICByZWFzb246ICdBcHAgaW5zdGFsbGF0aW9uIG1pZ2h0IG5vdCBiZSBjb25maWd1cmVkIG9yIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZC4nLFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZldGNoIGRlbGl2ZXJpZXMgc2luY2UgdGhlIGxhc3QgcHJvY2Vzc2VkIGRlbGl2ZXJ5IElEXG4gIC8vIGZvciBhbnkgZmFpbHVyZXM6XG4gIC8vICAxLiBpZiB0aGlzIGlzIG5vdCBhIHJlZGVsaXZlcnksIHNhdmUgdGhlIGRlbGl2ZXJ5IElEIGFuZCB0aW1lLCBhbmQgZmluYWxseSByZXRyeVxuICAvLyAgMi4gaWYgdGhpcyBpcyBhIHJlZGVsaXZlcnksIGNoZWNrIGlmIHRoZSBvcmlnaW5hbCBkZWxpdmVyeSBpcyBzdGlsbCB3aXRoaW4gdGhlIHRpbWUgbGltaXQgYW5kIHJldHJ5IGlmIGl0IGlzXG4gIGNvbnN0IHsgZGVsaXZlcmllcywgbGFzdElkIH0gPSBhd2FpdCBuZXdEZWxpdmVyeUZhaWx1cmVzKG9jdG9raXQsIGxhc3REZWxpdmVyeUlkUHJvY2Vzc2VkKTtcbiAgbGFzdERlbGl2ZXJ5SWRQcm9jZXNzZWQgPSBNYXRoLm1heChsYXN0RGVsaXZlcnlJZFByb2Nlc3NlZCwgbGFzdElkKTtcbiAgY29uc3QgdGltZUxpbWl0TXMgPSAxMDAwICogNjAgKiA2MCAqIDM7IC8vIHJldHJ5IGZvciB1cCB0byAzIGhvdXJzXG4gIGZvciAoY29uc3QgW2d1aWQsIGRldGFpbHNdIG9mIGRlbGl2ZXJpZXMpIHtcbiAgICBpZiAoIWRldGFpbHMucmVkZWxpdmVyeSkge1xuICAgICAgZmFpbHVyZXMuc2V0KGd1aWQsIHsgaWQ6IGRldGFpbHMuaWQsIGZpcnN0RGVsaXZlcmVkQXQ6IGRldGFpbHMuZGVsaXZlcmVkQXQgfSk7XG4gICAgICBjb25zb2xlLmxvZyh7XG4gICAgICAgIG5vdGljZTogJ1JlZGVsaXZlcmluZyBmYWlsZWQgZGVsaXZlcnknLFxuICAgICAgICBkZWxpdmVyeUlkOiBkZXRhaWxzLmlkLFxuICAgICAgICBndWlkOiBndWlkLFxuICAgICAgICBmaXJzdERlbGl2ZXJlZEF0OiBkZXRhaWxzLmRlbGl2ZXJlZEF0LFxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZWRlbGl2ZXIob2N0b2tpdCwgZGV0YWlscy5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHRoaXMgaXMgYSByZWRlbGl2ZXJ5LCBjaGVjayBpZiB0aGUgb3JpZ2luYWwgZGVsaXZlcnkgaXMgc3RpbGwgd2l0aGluIHRoZSB0aW1lIGxpbWl0XG4gICAgICBjb25zdCBvcmlnaW5hbEZhaWx1cmUgPSBmYWlsdXJlcy5nZXQoZ3VpZCk7XG4gICAgICBpZiAob3JpZ2luYWxGYWlsdXJlKSB7XG4gICAgICAgIGlmIChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIG9yaWdpbmFsRmFpbHVyZS5maXJzdERlbGl2ZXJlZEF0LmdldFRpbWUoKSA8IHRpbWVMaW1pdE1zKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coe1xuICAgICAgICAgICAgbm90aWNlOiAnUmVkZWxpdmVyaW5nIGZhaWxlZCBkZWxpdmVyeScsXG4gICAgICAgICAgICBkZWxpdmVyeUlkOiBkZXRhaWxzLmlkLFxuICAgICAgICAgICAgZ3VpZDogZ3VpZCxcbiAgICAgICAgICAgIGZpcnN0RGVsaXZlcmVkQXQ6IG9yaWdpbmFsRmFpbHVyZS5maXJzdERlbGl2ZXJlZEF0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF3YWl0IHJlZGVsaXZlcihvY3Rva2l0LCBkZXRhaWxzLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmYWlsdXJlcy5kZWxldGUoZ3VpZCk7IC8vIG5vIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGlzIGFueW1vcmVcbiAgICAgICAgICBjb25zb2xlLmxvZyh7XG4gICAgICAgICAgICBub3RpY2U6ICdTa2lwcGluZyByZWRlbGl2ZXJ5IG9mIG9sZCBmYWlsZWQgZGVsaXZlcnknLFxuICAgICAgICAgICAgZGVsaXZlcnlJZDogZGV0YWlscy5pZCxcbiAgICAgICAgICAgIGd1aWQ6IGd1aWQsXG4gICAgICAgICAgICBmaXJzdERlbGl2ZXJlZEF0OiBvcmlnaW5hbEZhaWx1cmU/LmZpcnN0RGVsaXZlcmVkQXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICBub3RpY2U6ICdTa2lwcGluZyByZWRlbGl2ZXJ5IG9mIG9sZCBmYWlsZWQgZGVsaXZlcnknLFxuICAgICAgICAgIGRlbGl2ZXJ5SWQ6IGRldGFpbHMuaWQsXG4gICAgICAgICAgZ3VpZDogZ3VpZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay1yZWRlbGl2ZXJ5LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWJob29rLXJlZGVsaXZlcnkubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0dBLGdEQUdDO0FBRUQsMEJBeURDO0FBN0pELG1EQUEyRDtBQUUzRDs7OztHQUlHO0FBQ0gsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE9BQWdCLEVBQUUsT0FBZTtJQUNsRSxNQUFNLFVBQVUsR0FBd0UsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNsRyxNQUFNLG9CQUFvQixHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3BELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsK0NBQStDO0lBQ25GLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFFdkIsSUFBSSxLQUFLLEVBQUUsTUFBTSxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDO1FBQ25GLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELEtBQUssTUFBTSxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO1lBRXpDLElBQUksVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUMxQiw2REFB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T0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7b0JBQ3BGLE9BQU8sQ0FBQyxHQUFHLENBQUM7d0JBQ1YsTUFBTSxFQUFFLDhCQUE4Qjt3QkFDdEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUM5QixJQUFJLEVBQUUsSUFBSTt3QkFDVixnQkFBZ0IsRUFBRSxlQUFlLENBQUMsZ0JBQWdCO3FCQUNuRCxDQUFDLENBQUM7b0JBQ0gsTUFBTSxJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7b0JBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUM7d0JBQ1YsTUFBTSxFQUFFLDRDQUE0Qzt3QkFDcEQsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUM5QixJQUFJLEVBQUUsSUFBSTt3QkFDVixnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCO3FCQUNwRCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNWLE1BQU0sRUFBRSw0Q0FBNEM7b0JBQ3BELFVBQVUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxFQUFFLElBQUk7aUJBQ1gsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gJ0BvY3Rva2l0L3Jlc3QnO1xuaW1wb3J0IHsgZ2V0QXBwT2N0b2tpdCwgcmVkZWxpdmVyIH0gZnJvbSAnLi9sYW1iZGEtZ2l0aHViJztcblxuLyoqXG4gKiBHZXQgd2ViaG9vayBkZWxpdmVyeSBmYWlsdXJlcyBzaW5jZSB0aGUgbGFzdCBwcm9jZXNzZWQgZGVsaXZlcnkgSUQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG5ld0RlbGl2ZXJ5RmFpbHVyZXMob2N0b2tpdDogT2N0b2tpdCwgc2luY2VJZDogYmlnaW50KSB7XG4gIGNvbnN0IGRlbGl2ZXJpZXM6IE1hcDxzdHJpbmcsIHsgaWQ6IGJpZ2ludDsgZGVsaXZlcmVkQXQ6IERhdGU7IHJlZGVsaXZlcnk6IGJvb2xlYW4gfT4gPSBuZXcgTWFwKCk7XG4gIGNvbnN0IHN1Y2Nlc3NmdWxEZWxpdmVyaWVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgY29uc3QgdGltZUxpbWl0TXMgPSAxMDAwICogNjAgKiAzMDsgLy8gZG9uJ3QgbG9vayBhdCBkZWxpdmVyaWVzIG92ZXIgMzAgbWludXRlcyBvbGRcbiAgbGV0IGxhc3RJZCA9IDBuO1xuICBsZXQgcHJvY2Vzc2VkQ291bnQgPSAwO1xuXG4gIGZvciBhd2FpdCAoY29uc3QgcmVzcG9uc2Ugb2Ygb2N0b2tpdC5wYWdpbmF0ZS5pdGVyYXRvcignR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzJykpIHtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIHdlYmhvb2sgZGVsaXZlcmllcycpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVsaXZlcnkgb2YgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgY29uc3QgZGVsaXZlcnlJZCA9IEJpZ0ludChkZWxpdmVyeS5pZCk7XG4gICAgICBjb25zdCBkZWxpdmVyZWRBdCA9IG5ldyBEYXRlKGRlbGl2ZXJ5LmRlbGl2ZXJlZF9hdCk7XG4gICAgICBjb25zdCBzdWNjZXNzID0gZGVsaXZlcnkuc3RhdHVzID09PSAnT0snO1xuXG4gICAgICBpZiAoZGVsaXZlcnlJZCA8PSBzaW5jZUlkKSB7XG4gICAgICAgIC8vIHN0b3AgcHJvY2Vzc2luZyBpZiB3ZSByZWFjaCB0aGUgbGFzdCBwcm9jZXNzZWQgZGVsaXZlcnkgSURcbiAgICAgICAgY29uc29sZS5pbmZvKHtcbiAgICAgICAgICBub3RpY2U6ICdSZWFjaGVkIGxhc3QgcHJvY2Vzc2VkIGRlbGl2ZXJ5IElEJyxcbiAgICAgICAgICBzaW5jZUlkOiBTdHJpbmcoc2luY2VJZCksXG4gICAgICAgICAgZGVsaXZlcnlJZDogU3RyaW5nKGRlbGl2ZXJ5SWQpLFxuICAgICAgICAgIGd1aWQ6IGRlbGl2ZXJ5Lmd1aWQsXG4gICAgICAgICAgcHJvY2Vzc2VkQ291bnQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBkZWxpdmVyaWVzLCBsYXN0SWQgfTtcbiAgICAgIH1cblxuICAgICAgbGFzdElkID0gZGVsaXZlcnlJZCA+IGxhc3RJZCA/IGRlbGl2ZXJ5SWQgOiBsYXN0SWQ7XG5cbiAgICAgIGlmIChkZWxpdmVyZWRBdC5nZXRUaW1lKCkgPCBEYXRlLm5vdygpIC0gdGltZUxpbWl0TXMpIHtcbiAgICAgICAgLy8gc3RvcCBwcm9jZXNzaW5nIGlmIHRoZSBkZWxpdmVyeSBpcyB0b28gb2xkIChmb3IgZmlyc3QgaXRlcmF0aW9uIGFuZCBwZXJmb3JtYW5jZSBvZiBmdXJ0aGVyIGl0ZXJhdGlvbnMpXG4gICAgICAgIGNvbnNvbGUuaW5mbyh7XG4gICAgICAgICAgbm90aWNlOiAnU3RvcHBpbmcgYXQgb2xkIGRlbGl2ZXJ5JyxcbiAgICAgICAgICBkZWxpdmVyeUlkOiBTdHJpbmcoZGVsaXZlcnlJZCksXG4gICAgICAgICAgZ3VpZDogZGVsaXZlcnkuZ3VpZCxcbiAgICAgICAgICBkZWxpdmVyZWRBdDogZGVsaXZlcmVkQXQsXG4gICAgICAgICAgcHJvY2Vzc2VkQ291bnQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBkZWxpdmVyaWVzLCBsYXN0SWQgfTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5kZWJ1Zyh7XG4gICAgICAgIG5vdGljZTogJ1Byb2Nlc3Npbmcgd2ViaG9vayBkZWxpdmVyeScsXG4gICAgICAgIGRlbGl2ZXJ5SWQ6IFN0cmluZyhkZWxpdmVyeUlkKSxcbiAgICAgICAgZ3VpZDogZGVsaXZlcnkuZ3VpZCxcbiAgICAgICAgc3RhdHVzOiBkZWxpdmVyeS5zdGF0dXMsXG4gICAgICAgIGRlbGl2ZXJlZEF0OiBkZWxpdmVyeS5kZWxpdmVyZWRfYXQsXG4gICAgICAgIHJlZGVsaXZlcnk6IGRlbGl2ZXJ5LnJlZGVsaXZlcnksXG4gICAgICB9KTtcbiAgICAgIHByb2Nlc3NlZENvdW50Kys7XG5cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHN1Y2Nlc3NmdWxEZWxpdmVyaWVzLmFkZChkZWxpdmVyeS5ndWlkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWNjZXNzZnVsRGVsaXZlcmllcy5oYXMoZGVsaXZlcnkuZ3VpZCkpIHtcbiAgICAgICAgLy8gZG8gbm90IHJlZGVsaXZlciBkZWxpdmVyaWVzIHRoYXQgd2VyZSBhbHJlYWR5IHN1Y2Nlc3NmdWxcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGRlbGl2ZXJpZXMuc2V0KGRlbGl2ZXJ5Lmd1aWQsIHsgaWQ6IGRlbGl2ZXJ5SWQsIGRlbGl2ZXJlZEF0LCByZWRlbGl2ZXJ5OiBkZWxpdmVyeS5yZWRlbGl2ZXJ5IH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUuaW5mbyh7XG4gICAgbm90aWNlOiAnTm8gbW9yZSB3ZWJob29rIGRlbGl2ZXJpZXMgdG8gcHJvY2VzcycsXG4gICAgZGVsaXZlcnlJZDogJ0RPTkUnLFxuICAgIGd1aWQ6ICdET05FJyxcbiAgICBkZWxpdmVyZWRBdDogJ0RPTkUnLFxuICAgIHByb2Nlc3NlZENvdW50LFxuICB9KTtcblxuICByZXR1cm4geyBkZWxpdmVyaWVzLCBsYXN0SWQgfTtcbn1cblxubGV0IGxhc3REZWxpdmVyeUlkUHJvY2Vzc2VkID0gMG47XG5jb25zdCBmYWlsdXJlczogTWFwPHN0cmluZywgeyBpZDogYmlnaW50OyBmaXJzdERlbGl2ZXJlZEF0OiBEYXRlIH0+ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIENsZWFyIHRoZSBjYWNoZSBvZiB3ZWJob29rIGRlbGl2ZXJ5IGZhaWx1cmVzLlxuICpcbiAqIEZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMgb25seS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRmFpbHVyZXNDYWNoZSgpIHtcbiAgbGFzdERlbGl2ZXJ5SWRQcm9jZXNzZWQgPSAwbjtcbiAgZmFpbHVyZXMuY2xlYXIoKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gIGNvbnN0IG9jdG9raXQgPSBhd2FpdCBnZXRBcHBPY3Rva2l0KCk7XG4gIGlmICghb2N0b2tpdCkge1xuICAgIGNvbnNvbGUuaW5mbyh7XG4gICAgICBub3RpY2U6ICdTa2lwcGluZyB3ZWJob29rIHJlZGVsaXZlcnknLFxuICAgICAgcmVhc29uOiAnQXBwIGluc3RhbGxhdGlvbiBtaWdodCBub3QgYmUgY29uZmlndXJlZCBvciB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWQuJyxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBmZXRjaCBkZWxpdmVyaWVzIHNpbmNlIHRoZSBsYXN0IHByb2Nlc3NlZCBkZWxpdmVyeSBJRFxuICAvLyBmb3IgYW55IGZhaWx1cmVzOlxuICAvLyAgMS4gaWYgdGhpcyBpcyBub3QgYSByZWRlbGl2ZXJ5LCBzYXZlIHRoZSBkZWxpdmVyeSBJRCBhbmQgdGltZSwgYW5kIGZpbmFsbHkgcmV0cnlcbiAgLy8gIDIuIGlmIHRoaXMgaXMgYSByZWRlbGl2ZXJ5LCBjaGVjayBpZiB0aGUgb3JpZ2luYWwgZGVsaXZlcnkgaXMgc3RpbGwgd2l0aGluIHRoZSB0aW1lIGxpbWl0IGFuZCByZXRyeSBpZiBpdCBpc1xuICBjb25zdCB7IGRlbGl2ZXJpZXMsIGxhc3RJZCB9ID0gYXdhaXQgbmV3RGVsaXZlcnlGYWlsdXJlcyhvY3Rva2l0LCBsYXN0RGVsaXZlcnlJZFByb2Nlc3NlZCk7XG4gIGxhc3REZWxpdmVyeUlkUHJvY2Vzc2VkID0gbGFzdElkID4gbGFzdERlbGl2ZXJ5SWRQcm9jZXNzZWQgPyBsYXN0SWQgOiBsYXN0RGVsaXZlcnlJZFByb2Nlc3NlZDtcbiAgY29uc3QgdGltZUxpbWl0TXMgPSAxMDAwICogNjAgKiA2MCAqIDM7IC8vIHJldHJ5IGZvciB1cCB0byAzIGhvdXJzXG4gIGZvciAoY29uc3QgW2d1aWQsIGRldGFpbHNdIG9mIGRlbGl2ZXJpZXMpIHtcbiAgICBpZiAoIWRldGFpbHMucmVkZWxpdmVyeSkge1xuICAgICAgZmFpbHVyZXMuc2V0KGd1aWQsIHsgaWQ6IGRldGFpbHMuaWQsIGZpcnN0RGVsaXZlcmVkQXQ6IGRldGFpbHMuZGVsaXZlcmVkQXQgfSk7XG4gICAgICBjb25zb2xlLmxvZyh7XG4gICAgICAgIG5vdGljZTogJ1JlZGVsaXZlcmluZyBmYWlsZWQgZGVsaXZlcnknLFxuICAgICAgICBkZWxpdmVyeUlkOiBTdHJpbmcoZGV0YWlscy5pZCksXG4gICAgICAgIGd1aWQ6IGd1aWQsXG4gICAgICAgIGZpcnN0RGVsaXZlcmVkQXQ6IGRldGFpbHMuZGVsaXZlcmVkQXQsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHJlZGVsaXZlcihvY3Rva2l0LCBkZXRhaWxzLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhpcyBpcyBhIHJlZGVsaXZlcnksIGNoZWNrIGlmIHRoZSBvcmlnaW5hbCBkZWxpdmVyeSBpcyBzdGlsbCB3aXRoaW4gdGhlIHRpbWUgbGltaXRcbiAgICAgIGNvbnN0IG9yaWdpbmFsRmFpbHVyZSA9IGZhaWx1cmVzLmdldChndWlkKTtcbiAgICAgIGlmIChvcmlnaW5hbEZhaWx1cmUpIHtcbiAgICAgICAgaWYgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gb3JpZ2luYWxGYWlsdXJlLmZpcnN0RGVsaXZlcmVkQXQuZ2V0VGltZSgpIDwgdGltZUxpbWl0TXMpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7XG4gICAgICAgICAgICBub3RpY2U6ICdSZWRlbGl2ZXJpbmcgZmFpbGVkIGRlbGl2ZXJ5JyxcbiAgICAgICAgICAgIGRlbGl2ZXJ5SWQ6IFN0cmluZyhkZXRhaWxzLmlkKSxcbiAgICAgICAgICAgIGd1aWQ6IGd1aWQsXG4gICAgICAgICAgICBmaXJzdERlbGl2ZXJlZEF0OiBvcmlnaW5hbEZhaWx1cmUuZmlyc3REZWxpdmVyZWRBdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCByZWRlbGl2ZXIob2N0b2tpdCwgZGV0YWlscy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFpbHVyZXMuZGVsZXRlKGd1aWQpOyAvLyBubyBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBhbnltb3JlXG4gICAgICAgICAgY29uc29sZS5sb2coe1xuICAgICAgICAgICAgbm90aWNlOiAnU2tpcHBpbmcgcmVkZWxpdmVyeSBvZiBvbGQgZmFpbGVkIGRlbGl2ZXJ5JyxcbiAgICAgICAgICAgIGRlbGl2ZXJ5SWQ6IFN0cmluZyhkZXRhaWxzLmlkKSxcbiAgICAgICAgICAgIGd1aWQ6IGd1aWQsXG4gICAgICAgICAgICBmaXJzdERlbGl2ZXJlZEF0OiBvcmlnaW5hbEZhaWx1cmU/LmZpcnN0RGVsaXZlcmVkQXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICBub3RpY2U6ICdTa2lwcGluZyByZWRlbGl2ZXJ5IG9mIG9sZCBmYWlsZWQgZGVsaXZlcnknLFxuICAgICAgICAgIGRlbGl2ZXJ5SWQ6IFN0cmluZyhkZXRhaWxzLmlkKSxcbiAgICAgICAgICBndWlkOiBndWlkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
package/lib/webhook.d.ts CHANGED
@@ -81,6 +81,10 @@ export interface GithubWebhookHandlerProps {
81
81
  * Whether to require the "self-hosted" label.
82
82
  */
83
83
  readonly requireSelfHostedLabel: boolean;
84
+ /**
85
+ * Idle timeout for runners in seconds.
86
+ */
87
+ readonly idleTimeoutSeconds?: number;
84
88
  /**
85
89
  * Additional Lambda function options (VPC, security groups, layers, etc.).
86
90
  */
package/lib/webhook.js CHANGED
@@ -25,6 +25,7 @@ class GithubWebhookHandler extends constructs_1.Construct {
25
25
  PROVIDERS: JSON.stringify(props.providers),
26
26
  REQUIRE_SELF_HOSTED_LABEL: props.requireSelfHostedLabel ? '1' : '0',
27
27
  PROVIDER_SELECTOR_ARN: props.providerSelector?.functionArn ?? '',
28
+ IDLE_TIMEOUT_SECONDS: props.idleTimeoutSeconds?.toString() ?? '300', // default 5 minutes
28
29
  ...props.extraLambdaEnv,
29
30
  },
30
31
  timeout: cdk.Duration.seconds(31),
@@ -42,4 +43,4 @@ class GithubWebhookHandler extends constructs_1.Construct {
42
43
  }
43
44
  }
44
45
  exports.GithubWebhookHandler = GithubWebhookHandler;
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWJob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyw2Q0FBdUY7QUFDdkYsMkNBQXVDO0FBQ3ZDLHFDQUF3QztBQUV4QyxtQ0FBOEQ7QUFDOUQseUVBQW9FO0FBdUdwRTs7OztHQUlHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxzQkFBUztJQVlqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlEQUFzQixDQUN2QyxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCO1lBQ0UsV0FBVyxFQUFFLHFEQUFxRDtZQUNsRSxXQUFXLEVBQUU7Z0JBQ1gsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlO2dCQUNyRCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTO2dCQUNuRCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNqRCw2QkFBNkIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVM7Z0JBQ3ZFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dCQUNuRSxxQkFBcUIsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxJQUFJLEVBQUU7Z0JBQ2hFLEdBQUcsS0FBSyxDQUFDLGNBQWM7YUFDeEI7WUFDRCxPQUFPLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxJQUFBLHlCQUFpQixFQUFDLElBQUksRUFBRSx3QkFBZ0IsQ0FBQyxZQUFZLENBQUM7WUFDaEUsYUFBYSxFQUFFLHdCQUFNLENBQUMsYUFBYSxDQUFDLElBQUk7WUFDeEMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCO1NBQzFCLENBQ0YsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxNQUFNLElBQUkscUJBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxLQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUE5Q0Qsb0RBOENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IGF3c19sYW1iZGEgYXMgbGFtYmRhLCBhd3Nfc3RlcGZ1bmN0aW9ucyBhcyBzdGVwZnVuY3Rpb25zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBMYW1iZGFBY2Nlc3MgfSBmcm9tICcuL2FjY2Vzcyc7XG5pbXBvcnQgeyBTZWNyZXRzIH0gZnJvbSAnLi9zZWNyZXRzJztcbmltcG9ydCB7IHNpbmdsZXRvbkxvZ0dyb3VwLCBTaW5nbGV0b25Mb2dUeXBlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBXZWJob29rSGFuZGxlckZ1bmN0aW9uIH0gZnJvbSAnLi93ZWJob29rLWhhbmRsZXItZnVuY3Rpb24nO1xuXG4vKipcbiAqIElucHV0IHRvIHRoZSBwcm92aWRlciBzZWxlY3RvciBMYW1iZGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJTZWxlY3RvcklucHV0IHtcbiAgLyoqXG4gICAqIEZ1bGwgR2l0SHViIHdlYmhvb2sgcGF5bG9hZCAod29ya2Zsb3dfam9iIGV2ZW50IHN0cnVjdHVyZSB3aXRoIGFjdGlvbj1cInF1ZXVlZFwiKS5cbiAgICpcbiAgICogKiBPcmlnaW5hbCBsYWJlbHMgcmVxdWVzdGVkIGJ5IHRoZSB3b3JrZmxvdyBqb2IgY2FuIGJlIGZvdW5kIGF0IGBwYXlsb2FkLndvcmtmbG93X2pvYi5sYWJlbHNgLlxuICAgKiAqIFJlcG9zaXRvcnkgcGF0aCAoZS5nLiBDbG91ZFNub3JrZWwvY2RrLWdpdGh1Yi1ydW5uZXJzKSBpcyBhdCBgcGF5bG9hZC5yZXBvc2l0b3J5LmZ1bGxfbmFtZWAuXG4gICAqICogQ29tbWl0IGhhc2ggaXMgYXQgYHBheWxvYWQud29ya2Zsb3dfam9iLmhlYWRfc2hhYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi93ZWJob29rcy93ZWJob29rLWV2ZW50cy1hbmQtcGF5bG9hZHM/YWN0aW9uVHlwZT1xdWV1ZWQjd29ya2Zsb3dfam9iXG4gICAqL1xuICByZWFkb25seSBwYXlsb2FkOiBhbnk7XG5cbiAgLyoqXG4gICAqIE1hcCBvZiBhdmFpbGFibGUgcHJvdmlkZXIgbm9kZSBwYXRocyB0byB0aGVpciBjb25maWd1cmVkIGxhYmVscy5cbiAgICogRXhhbXBsZTogeyBcIk15U3RhY2svU21hbGxcIjogW1wibGludXhcIiwgXCJzbWFsbFwiXSwgXCJNeVN0YWNrL0xhcmdlXCI6IFtcImxpbnV4XCIsIFwibGFyZ2VcIl0gfVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVyIG5vZGUgcGF0aCB0aGF0IHdvdWxkIGhhdmUgYmVlbiBzZWxlY3RlZCBieSBkZWZhdWx0IGxhYmVsIG1hdGNoaW5nLlxuICAgKiBVc2UgdGhpcyB0byBlYXNpbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHNlbGVjdGlvbjogYHsgcHJvdmlkZXI6IGlucHV0LmRlZmF1bHRQcm92aWRlciwgbGFiZWxzOiBpbnB1dC5kZWZhdWx0TGFiZWxzIH1gXG4gICAqIE1heSBiZSB1bmRlZmluZWQgaWYgbm8gcHJvdmlkZXIgbWF0Y2hlZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFByb3ZpZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbHMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gdXNlZCBieSBkZWZhdWx0ICh0aGUgc2VsZWN0ZWQgcHJvdmlkZXIncyBsYWJlbHMpLlxuICAgKiBNYXkgYmUgdW5kZWZpbmVkIGlmIG5vIHByb3ZpZGVyIG1hdGNoZWQgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRMYWJlbHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgZnJvbSB0aGUgcHJvdmlkZXIgc2VsZWN0b3IgTGFtYmRhIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyU2VsZWN0b3JSZXN1bHQge1xuICAvKipcbiAgICogTm9kZSBwYXRoIG9mIHRoZSBwcm92aWRlciB0byB1c2UgKGUuZy4sIFwiTXlTdGFjay9NeVByb3ZpZGVyXCIpLlxuICAgKiBNdXN0IG1hdGNoIG9uZSBvZiB0aGUgY29uZmlndXJlZCBwcm92aWRlciBub2RlIHBhdGhzIGZyb20gdGhlIGlucHV0LlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBqb2Igd2lsbCBiZSBza2lwcGVkIChubyBydW5uZXIgY3JlYXRlZCkuXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWxzIHRvIHVzZSB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBydW5uZXIuXG4gICAqIE11c3QgYmUgcmV0dXJuZWQgd2hlbiBhIHByb3ZpZGVyIGlzIHNlbGVjdGVkLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGxhYmVscy5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEdpdGh1YldlYmhvb2tIYW5kbGVyXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViV2ViaG9va0hhbmRsZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBTdGVwIGZ1bmN0aW9uIGluIGNoYXJnZSBvZiBoYW5kbGluZyB0aGUgd29ya2Zsb3cgam9iIGV2ZW50cyBhbmQgc3RhcnQgdGhlIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBvcmNoZXN0cmF0b3I6IHN0ZXBmdW5jdGlvbnMuU3RhdGVNYWNoaW5lO1xuXG4gIC8qKlxuICAgKiBTZWNyZXRzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRzOiBTZWNyZXRzO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgYWNjZXNzIHRvIHdlYmhvb2sgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3M/OiBMYW1iZGFBY2Nlc3M7XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgb2YgcHJvdmlkZXIgbm9kZSBwYXRocyB0byB0aGVpciBzdXBwb3J0ZWQgbGFiZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIExhbWJkYSBmdW5jdGlvbiB0byBjdXN0b21pemUgcHJvdmlkZXIgc2VsZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJTZWxlY3Rvcj86IGxhbWJkYS5JRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVxdWlyZSB0aGUgXCJzZWxmLWhvc3RlZFwiIGxhYmVsLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZVNlbGZIb3N0ZWRMYWJlbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBMYW1iZGEgZnVuY3Rpb24gb3B0aW9ucyAoVlBDLCBzZWN1cml0eSBncm91cHMsIGxheWVycywgZXRjLikuXG4gICAqL1xuICByZWFkb25seSBleHRyYUxhbWJkYVByb3BzPzogbGFtYmRhLkZ1bmN0aW9uT3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBleHRyYUxhbWJkYUVudj86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgTGFtYmRhIHdpdGggYSBwdWJsaWMgVVJMIHRvIGhhbmRsZSBHaXRIdWIgd2ViaG9vayBldmVudHMuIEFmdGVyIHZhbGlkYXRpbmcgdGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHNlY3JldCwgdGhlIG9yY2hlc3RyYXRvciBzdGVwIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrZmxvdyBqb2IuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRodWJXZWJob29rSGFuZGxlciBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBVUkwgb2Ygd2ViaG9vayB0byBiZSB1c2VkIHdpdGggR2l0SHViLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdlYmhvb2sgZXZlbnQgaGFuZGxlci5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZXI6IFdlYmhvb2tIYW5kbGVyRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdpdGh1YldlYmhvb2tIYW5kbGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IFdlYmhvb2tIYW5kbGVyRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgJ3dlYmhvb2staGFuZGxlcicsXG4gICAgICB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSGFuZGxlIEdpdEh1YiB3ZWJob29rIGFuZCBzdGFydCBydW5uZXIgb3JjaGVzdHJhdG9yJyxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBTVEVQX0ZVTkNUSU9OX0FSTjogcHJvcHMub3JjaGVzdHJhdG9yLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgICBXRUJIT09LX1NFQ1JFVF9BUk46IHByb3BzLnNlY3JldHMud2ViaG9vay5zZWNyZXRBcm4sXG4gICAgICAgICAgR0lUSFVCX1NFQ1JFVF9BUk46IHByb3BzLnNlY3JldHMuZ2l0aHViLnNlY3JldEFybixcbiAgICAgICAgICBHSVRIVUJfUFJJVkFURV9LRVlfU0VDUkVUX0FSTjogcHJvcHMuc2VjcmV0cy5naXRodWJQcml2YXRlS2V5LnNlY3JldEFybixcbiAgICAgICAgICBQUk9WSURFUlM6IEpTT04uc3RyaW5naWZ5KHByb3BzLnByb3ZpZGVycyksXG4gICAgICAgICAgUkVRVUlSRV9TRUxGX0hPU1RFRF9MQUJFTDogcHJvcHMucmVxdWlyZVNlbGZIb3N0ZWRMYWJlbCA/ICcxJyA6ICcwJyxcbiAgICAgICAgICBQUk9WSURFUl9TRUxFQ1RPUl9BUk46IHByb3BzLnByb3ZpZGVyU2VsZWN0b3I/LmZ1bmN0aW9uQXJuID8/ICcnLFxuICAgICAgICAgIC4uLnByb3BzLmV4dHJhTGFtYmRhRW52LFxuICAgICAgICB9LFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMSksXG4gICAgICAgIGxvZ0dyb3VwOiBzaW5nbGV0b25Mb2dHcm91cCh0aGlzLCBTaW5nbGV0b25Mb2dUeXBlLk9SQ0hFU1RSQVRPUiksXG4gICAgICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICAgIC4uLnByb3BzLmV4dHJhTGFtYmRhUHJvcHMsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBwcm9wcz8uYWNjZXNzID8/IExhbWJkYUFjY2Vzcy5sYW1iZGFVcmwoKTtcbiAgICB0aGlzLnVybCA9IGFjY2Vzcy5iaW5kKHRoaXMsICdhY2Nlc3MnLCB0aGlzLmhhbmRsZXIpO1xuXG4gICAgcHJvcHMuc2VjcmV0cy53ZWJob29rLmdyYW50UmVhZCh0aGlzLmhhbmRsZXIpO1xuICAgIHByb3BzLnNlY3JldHMuZ2l0aHViLmdyYW50UmVhZCh0aGlzLmhhbmRsZXIpO1xuICAgIHByb3BzLnNlY3JldHMuZ2l0aHViUHJpdmF0ZUtleS5ncmFudFJlYWQodGhpcy5oYW5kbGVyKTtcbiAgICBwcm9wcy5vcmNoZXN0cmF0b3IuZ3JhbnRTdGFydEV4ZWN1dGlvbih0aGlzLmhhbmRsZXIpO1xuICAgIHByb3BzLnByb3ZpZGVyU2VsZWN0b3I/LmdyYW50SW52b2tlKHRoaXMuaGFuZGxlcik7XG4gIH1cbn1cbiJdfQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWJob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyw2Q0FBdUY7QUFDdkYsMkNBQXVDO0FBQ3ZDLHFDQUF3QztBQUV4QyxtQ0FBOEQ7QUFDOUQseUVBQW9FO0FBNEdwRTs7OztHQUlHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxzQkFBUztJQVlqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlEQUFzQixDQUN2QyxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCO1lBQ0UsV0FBVyxFQUFFLHFEQUFxRDtZQUNsRSxXQUFXLEVBQUU7Z0JBQ1gsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlO2dCQUNyRCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTO2dCQUNuRCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNqRCw2QkFBNkIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVM7Z0JBQ3ZFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dCQUNuRSxxQkFBcUIsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxJQUFJLEVBQUU7Z0JBQ2hFLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxLQUFLLEVBQUUsb0JBQW9CO2dCQUN6RixHQUFHLEtBQUssQ0FBQyxjQUFjO2FBQ3hCO1lBQ0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxRQUFRLEVBQUUsSUFBQSx5QkFBaUIsRUFBQyxJQUFJLEVBQUUsd0JBQWdCLENBQUMsWUFBWSxDQUFDO1lBQ2hFLGFBQWEsRUFBRSx3QkFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJO1lBQ3hDLEdBQUcsS0FBSyxDQUFDLGdCQUFnQjtTQUMxQixDQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQUUsTUFBTSxJQUFJLHFCQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsS0FBSyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGO0FBL0NELG9EQStDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBhd3NfbGFtYmRhIGFzIGxhbWJkYSwgYXdzX3N0ZXBmdW5jdGlvbnMgYXMgc3RlcGZ1bmN0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTGFtYmRhQWNjZXNzIH0gZnJvbSAnLi9hY2Nlc3MnO1xuaW1wb3J0IHsgU2VjcmV0cyB9IGZyb20gJy4vc2VjcmV0cyc7XG5pbXBvcnQgeyBzaW5nbGV0b25Mb2dHcm91cCwgU2luZ2xldG9uTG9nVHlwZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgV2ViaG9va0hhbmRsZXJGdW5jdGlvbiB9IGZyb20gJy4vd2ViaG9vay1oYW5kbGVyLWZ1bmN0aW9uJztcblxuLyoqXG4gKiBJbnB1dCB0byB0aGUgcHJvdmlkZXIgc2VsZWN0b3IgTGFtYmRhIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyU2VsZWN0b3JJbnB1dCB7XG4gIC8qKlxuICAgKiBGdWxsIEdpdEh1YiB3ZWJob29rIHBheWxvYWQgKHdvcmtmbG93X2pvYiBldmVudCBzdHJ1Y3R1cmUgd2l0aCBhY3Rpb249XCJxdWV1ZWRcIikuXG4gICAqXG4gICAqICogT3JpZ2luYWwgbGFiZWxzIHJlcXVlc3RlZCBieSB0aGUgd29ya2Zsb3cgam9iIGNhbiBiZSBmb3VuZCBhdCBgcGF5bG9hZC53b3JrZmxvd19qb2IubGFiZWxzYC5cbiAgICogKiBSZXBvc2l0b3J5IHBhdGggKGUuZy4gQ2xvdWRTbm9ya2VsL2Nkay1naXRodWItcnVubmVycykgaXMgYXQgYHBheWxvYWQucmVwb3NpdG9yeS5mdWxsX25hbWVgLlxuICAgKiAqIENvbW1pdCBoYXNoIGlzIGF0IGBwYXlsb2FkLndvcmtmbG93X2pvYi5oZWFkX3NoYWAuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vd2ViaG9va3Mvd2ViaG9vay1ldmVudHMtYW5kLXBheWxvYWRzP2FjdGlvblR5cGU9cXVldWVkI3dvcmtmbG93X2pvYlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogYW55O1xuXG4gIC8qKlxuICAgKiBNYXAgb2YgYXZhaWxhYmxlIHByb3ZpZGVyIG5vZGUgcGF0aHMgdG8gdGhlaXIgY29uZmlndXJlZCBsYWJlbHMuXG4gICAqIEV4YW1wbGU6IHsgXCJNeVN0YWNrL1NtYWxsXCI6IFtcImxpbnV4XCIsIFwic21hbGxcIl0sIFwiTXlTdGFjay9MYXJnZVwiOiBbXCJsaW51eFwiLCBcImxhcmdlXCJdIH1cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBQcm92aWRlciBub2RlIHBhdGggdGhhdCB3b3VsZCBoYXZlIGJlZW4gc2VsZWN0ZWQgYnkgZGVmYXVsdCBsYWJlbCBtYXRjaGluZy5cbiAgICogVXNlIHRoaXMgdG8gZWFzaWx5IHJldHVybiB0aGUgZGVmYXVsdCBzZWxlY3Rpb246IGB7IHByb3ZpZGVyOiBpbnB1dC5kZWZhdWx0UHJvdmlkZXIsIGxhYmVsczogaW5wdXQuZGVmYXVsdExhYmVscyB9YFxuICAgKiBNYXkgYmUgdW5kZWZpbmVkIGlmIG5vIHByb3ZpZGVyIG1hdGNoZWQgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRQcm92aWRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWxzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHVzZWQgYnkgZGVmYXVsdCAodGhlIHNlbGVjdGVkIHByb3ZpZGVyJ3MgbGFiZWxzKS5cbiAgICogTWF5IGJlIHVuZGVmaW5lZCBpZiBubyBwcm92aWRlciBtYXRjaGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0TGFiZWxzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVzdWx0IGZyb20gdGhlIHByb3ZpZGVyIHNlbGVjdG9yIExhbWJkYSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclNlbGVjdG9yUmVzdWx0IHtcbiAgLyoqXG4gICAqIE5vZGUgcGF0aCBvZiB0aGUgcHJvdmlkZXIgdG8gdXNlIChlLmcuLCBcIk15U3RhY2svTXlQcm92aWRlclwiKS5cbiAgICogTXVzdCBtYXRjaCBvbmUgb2YgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgbm9kZSBwYXRocyBmcm9tIHRoZSBpbnB1dC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgam9iIHdpbGwgYmUgc2tpcHBlZCAobm8gcnVubmVyIGNyZWF0ZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExhYmVscyB0byB1c2Ugd2hlbiByZWdpc3RlcmluZyB0aGUgcnVubmVyLlxuICAgKiBNdXN0IGJlIHJldHVybmVkIHdoZW4gYSBwcm92aWRlciBpcyBzZWxlY3RlZC5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYWRkLCByZW1vdmUsIG9yIG1vZGlmeSBsYWJlbHMuXG4gICAqL1xuICByZWFkb25seSBsYWJlbHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBHaXRodWJXZWJob29rSGFuZGxlclxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdGh1YldlYmhvb2tIYW5kbGVyUHJvcHMge1xuICAvKipcbiAgICogU3RlcCBmdW5jdGlvbiBpbiBjaGFyZ2Ugb2YgaGFuZGxpbmcgdGhlIHdvcmtmbG93IGpvYiBldmVudHMgYW5kIHN0YXJ0IHRoZSBydW5uZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JjaGVzdHJhdG9yOiBzdGVwZnVuY3Rpb25zLlN0YXRlTWFjaGluZTtcblxuICAvKipcbiAgICogU2VjcmV0cyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggR2l0SHViLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0czogU2VjcmV0cztcblxuICAvKipcbiAgICogQ29uZmlndXJlIGFjY2VzcyB0byB3ZWJob29rIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzPzogTGFtYmRhQWNjZXNzO1xuXG4gIC8qKlxuICAgKiBNYXBwaW5nIG9mIHByb3ZpZGVyIG5vZGUgcGF0aHMgdG8gdGhlaXIgc3VwcG9ydGVkIGxhYmVscy5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBMYW1iZGEgZnVuY3Rpb24gdG8gY3VzdG9taXplIHByb3ZpZGVyIHNlbGVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyU2VsZWN0b3I/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlcXVpcmUgdGhlIFwic2VsZi1ob3N0ZWRcIiBsYWJlbC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVTZWxmSG9zdGVkTGFiZWw6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElkbGUgdGltZW91dCBmb3IgcnVubmVycyBpbiBzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaWRsZVRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIExhbWJkYSBmdW5jdGlvbiBvcHRpb25zIChWUEMsIHNlY3VyaXR5IGdyb3VwcywgbGF5ZXJzLCBldGMuKS5cbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhTGFtYmRhUHJvcHM/OiBsYW1iZGEuRnVuY3Rpb25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhTGFtYmRhRW52PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBMYW1iZGEgd2l0aCBhIHB1YmxpYyBVUkwgdG8gaGFuZGxlIEdpdEh1YiB3ZWJob29rIGV2ZW50cy4gQWZ0ZXIgdmFsaWRhdGluZyB0aGUgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gc2VjcmV0LCB0aGUgb3JjaGVzdHJhdG9yIHN0ZXAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmtmbG93IGpvYi5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdGh1YldlYmhvb2tIYW5kbGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogUHVibGljIFVSTCBvZiB3ZWJob29rIHRvIGJlIHVzZWQgd2l0aCBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZztcblxuICAvKipcbiAgICogV2ViaG9vayBldmVudCBoYW5kbGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogV2ViaG9va0hhbmRsZXJGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR2l0aHViV2ViaG9va0hhbmRsZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmhhbmRsZXIgPSBuZXcgV2ViaG9va0hhbmRsZXJGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnd2ViaG9vay1oYW5kbGVyJyxcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdIYW5kbGUgR2l0SHViIHdlYmhvb2sgYW5kIHN0YXJ0IHJ1bm5lciBvcmNoZXN0cmF0b3InLFxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIFNURVBfRlVOQ1RJT05fQVJOOiBwcm9wcy5vcmNoZXN0cmF0b3Iuc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICAgIFdFQkhPT0tfU0VDUkVUX0FSTjogcHJvcHMuc2VjcmV0cy53ZWJob29rLnNlY3JldEFybixcbiAgICAgICAgICBHSVRIVUJfU0VDUkVUX0FSTjogcHJvcHMuc2VjcmV0cy5naXRodWIuc2VjcmV0QXJuLFxuICAgICAgICAgIEdJVEhVQl9QUklWQVRFX0tFWV9TRUNSRVRfQVJOOiBwcm9wcy5zZWNyZXRzLmdpdGh1YlByaXZhdGVLZXkuc2VjcmV0QXJuLFxuICAgICAgICAgIFBST1ZJREVSUzogSlNPTi5zdHJpbmdpZnkocHJvcHMucHJvdmlkZXJzKSxcbiAgICAgICAgICBSRVFVSVJFX1NFTEZfSE9TVEVEX0xBQkVMOiBwcm9wcy5yZXF1aXJlU2VsZkhvc3RlZExhYmVsID8gJzEnIDogJzAnLFxuICAgICAgICAgIFBST1ZJREVSX1NFTEVDVE9SX0FSTjogcHJvcHMucHJvdmlkZXJTZWxlY3Rvcj8uZnVuY3Rpb25Bcm4gPz8gJycsXG4gICAgICAgICAgSURMRV9USU1FT1VUX1NFQ09ORFM6IHByb3BzLmlkbGVUaW1lb3V0U2Vjb25kcz8udG9TdHJpbmcoKSA/PyAnMzAwJywgLy8gZGVmYXVsdCA1IG1pbnV0ZXNcbiAgICAgICAgICAuLi5wcm9wcy5leHRyYUxhbWJkYUVudixcbiAgICAgICAgfSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMzEpLFxuICAgICAgICBsb2dHcm91cDogc2luZ2xldG9uTG9nR3JvdXAodGhpcywgU2luZ2xldG9uTG9nVHlwZS5PUkNIRVNUUkFUT1IpLFxuICAgICAgICBsb2dnaW5nRm9ybWF0OiBsYW1iZGEuTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgICAuLi5wcm9wcy5leHRyYUxhbWJkYVByb3BzLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgYWNjZXNzID0gcHJvcHM/LmFjY2VzcyA/PyBMYW1iZGFBY2Nlc3MubGFtYmRhVXJsKCk7XG4gICAgdGhpcy51cmwgPSBhY2Nlc3MuYmluZCh0aGlzLCAnYWNjZXNzJywgdGhpcy5oYW5kbGVyKTtcblxuICAgIHByb3BzLnNlY3JldHMud2ViaG9vay5ncmFudFJlYWQodGhpcy5oYW5kbGVyKTtcbiAgICBwcm9wcy5zZWNyZXRzLmdpdGh1Yi5ncmFudFJlYWQodGhpcy5oYW5kbGVyKTtcbiAgICBwcm9wcy5zZWNyZXRzLmdpdGh1YlByaXZhdGVLZXkuZ3JhbnRSZWFkKHRoaXMuaGFuZGxlcik7XG4gICAgcHJvcHMub3JjaGVzdHJhdG9yLmdyYW50U3RhcnRFeGVjdXRpb24odGhpcy5oYW5kbGVyKTtcbiAgICBwcm9wcy5wcm92aWRlclNlbGVjdG9yPy5ncmFudEludm9rZSh0aGlzLmhhbmRsZXIpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014-2023 Harri Siirak
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.