@aws-solutions-constructs/core 2.59.0 → 2.61.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.
package/lib/sqs-helper.js CHANGED
@@ -28,7 +28,16 @@ const kms_helper_1 = require("./kms-helper");
28
28
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
29
29
  */
30
30
  function buildQueue(scope, id, props) {
31
- CheckEncryptionWarnings(props);
31
+ CheckBuidQueueProps(props);
32
+ let deadLetterQueue;
33
+ if (utils_1.CheckBooleanWithDefault(props.deployDeadLetterQueue, true)) {
34
+ deadLetterQueue = buildDeadLetterQueue(scope, id, {
35
+ existingQueueObj: props.existingQueueObj,
36
+ deployDeadLetterQueue: props.deployDeadLetterQueue,
37
+ deadLetterQueueProps: props.deadLetterQueueProps,
38
+ maxReceiveCount: props.maxReceiveCount
39
+ });
40
+ }
32
41
  // If an existingQueueObj is not specified
33
42
  if (!props.existingQueueObj) {
34
43
  // Setup the queue
@@ -43,8 +52,8 @@ function buildQueue(scope, id, props) {
43
52
  queueProps = defaults.DefaultQueueProps();
44
53
  }
45
54
  // Determine whether a DLQ property should be added
46
- if (props.deadLetterQueue) {
47
- queueProps.deadLetterQueue = props.deadLetterQueue;
55
+ if (deadLetterQueue) {
56
+ queueProps.deadLetterQueue = deadLetterQueue;
48
57
  }
49
58
  // Set encryption properties.
50
59
  // Note that defaults.DefaultQueueProps sets encryption to Server-side KMS encryption with a KMS key managed by SQS.
@@ -64,7 +73,7 @@ function buildQueue(scope, id, props) {
64
73
  const queue = new sqs.Queue(scope, id, queueProps); // NOSONAR
65
74
  applySecureQueuePolicy(queue);
66
75
  // Return the queue
67
- return { queue, key: queue.encryptionMasterKey };
76
+ return { queue, key: queue.encryptionMasterKey, dlq: deadLetterQueue };
68
77
  }
69
78
  else {
70
79
  // If an existingQueueObj is specified, return that object as the queue to be used
@@ -75,30 +84,40 @@ exports.buildQueue = buildQueue;
75
84
  /**
76
85
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
77
86
  */
78
- function CheckEncryptionWarnings(props) {
87
+ function CheckBuidQueueProps(props) {
79
88
  if ((props.queueProps?.encryptionMasterKey || props.encryptionKey || props.encryptionKeyProps)
80
89
  && props.enableEncryptionWithCustomerManagedKey !== true) {
81
90
  utils_1.printWarning(`Ignoring enableEncryptionWithCustomerManagedKey because one of
82
91
  queueProps.encryptionMasterKey, encryptionKey, or encryptionKeyProps was already specified`);
83
92
  }
93
+ let errorMessages = '';
94
+ let errorFound = false;
95
+ if ((props.deployDeadLetterQueue === false) && props.maxReceiveCount) {
96
+ errorMessages += 'Error - MaxReceiveCount cannot be set if deployDeadLetterQueue is false.\n';
97
+ errorFound = true;
98
+ }
99
+ if (errorFound) {
100
+ throw new Error(errorMessages);
101
+ }
84
102
  }
85
103
  /**
86
104
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
87
105
  */
88
- function buildDeadLetterQueue(scope, props) {
89
- if (!props.existingQueueObj && (props.deployDeadLetterQueue || props.deployDeadLetterQueue === undefined)) {
106
+ function buildDeadLetterQueue(scope, id, props) {
107
+ if (!props.existingQueueObj && utils_1.CheckBooleanWithDefault(props.deployDeadLetterQueue, true)) {
90
108
  // Create the Dead Letter Queue
91
- const buildQueueResponse = buildQueue(scope, 'deadLetterQueue', {
92
- queueProps: props.deadLetterQueueProps
109
+ const buildQueueResponse = buildQueue(scope, `${id}-dlq`, {
110
+ queueProps: props.deadLetterQueueProps,
111
+ deployDeadLetterQueue: false // don't deploy a DLQ for the DLG!
93
112
  });
94
113
  const mrc = (props.maxReceiveCount) ? props.maxReceiveCount : defaults.defaultMaxReceiveCount;
95
114
  // Setup the Dead Letter Queue interface
96
- const dlqInterface = {
115
+ const deadLetterQueueObject = {
97
116
  maxReceiveCount: mrc,
98
117
  queue: buildQueueResponse.queue
99
118
  };
100
119
  // Return the dead letter queue interface
101
- return dlqInterface;
120
+ return deadLetterQueueObject;
102
121
  }
103
122
  // ESLint requires this return statement, so disabling SonarQube warning
104
123
  return; // NOSONAR
@@ -166,7 +185,7 @@ function CheckSqsProps(propsObject) {
166
185
  }
167
186
  const isQueueFifo = propsObject?.queueProps?.fifo;
168
187
  const isDeadLetterQueueFifo = propsObject?.deadLetterQueueProps?.fifo;
169
- const deployDeadLetterQueue = propsObject.deployDeadLetterQueue || propsObject.deployDeadLetterQueue === undefined;
188
+ const deployDeadLetterQueue = utils_1.CheckBooleanWithDefault(propsObject.deployDeadLetterQueue, true);
170
189
  if (deployDeadLetterQueue && (isQueueFifo !== isDeadLetterQueueFifo)) {
171
190
  errorMessages += 'Error - If you specify a fifo: true in either queueProps or deadLetterQueueProps, you must also set fifo: ' +
172
191
  'true in the other props object. Fifo must match for the Queue and the Dead Letter Queue.\n';
@@ -177,4 +196,4 @@ function CheckSqsProps(propsObject) {
177
196
  }
178
197
  }
179
198
  exports.CheckSqsProps = CheckSqsProps;
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FzLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNxcy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCxVQUFVO0FBQ1YsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUUzQyxtQ0FBc0Q7QUFDdEQsaURBQThGO0FBQzlGLDZDQUFvQztBQUNwQyw2Q0FBZ0Q7QUFpRGhEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO0lBQzdFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9CLDBDQUEwQztJQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFO1FBQzNCLGtCQUFrQjtRQUNsQixJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNwQix3RUFBd0U7WUFDeEUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELFVBQVUsR0FBRyxxQkFBYSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQ3BHO2FBQU07WUFDTCxtRUFBbUU7WUFDbkUsVUFBVSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzNDO1FBRUQsbURBQW1EO1FBQ25ELElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUN6QixVQUFVLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7U0FDcEQ7UUFFRCw2QkFBNkI7UUFDN0Isb0hBQW9IO1FBQ3BILElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsRUFBRTtZQUN6QyxVQUFVLENB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QUksNkVBQTZFLENBQUM7UUFDL0YsVUFBVSxHQUFHLElBQUksQ0FBQztLQUNuQjtJQUVELElBQUksQ0FBQyxXQUFXLEVBQUUscUJBQXFCLEtBQUssS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLG9CQUFvQixFQUFFO1FBQ3RGLGFBQWEsSUFBSSw0RkFBNEYsQ0FBQztRQUM5RyxVQUFVLEdBQUcsSUFBSSxDQUFDO0tBQ25CO0lBRUQsTUFBTSxXQUFXLEdBQVksV0FBVyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUM7SUFDM0QsTUFBTSxxQkFBcUIsR0FBWSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDO0lBQy9FLE1BQU0scUJBQXFCLEdBQVksV0FBVyxDQUFDLHFCQUFxQixJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLENBQUM7SUFFNUgsSUFBSSxxQkFBcUIsSUFBSSxDQUFDLFdBQVcsS0FBSyxxQkFBcUIsQ0FBQyxFQUFFO1FBQ3BFLGFBQWEsSUFBSSw0R0FBNEc7WUFDM0gsNEZBQTRGLENBQUM7UUFDL0YsVUFBVSxHQUFHLElBQUksQ0FBQztLQUNuQjtJQUVELElBQUksVUFBVSxFQUFFO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNoQztBQUNILENBQUM7QUExQ0Qsc0NBMENDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLypcbiAqICBUaGUgZnVuY3Rpb25zIGZvdW5kIGhlcmUgaW4gdGhlIGNvcmUgbGlicmFyeSBhcmUgZm9yIGludGVybmFsIHVzZSBhbmQgY2FuIGJlIGNoYW5nZWRcbiAqICBvciByZW1vdmVkIG91dHNpZGUgb2YgYSBtYWpvciByZWxlYXNlLiBXZSByZWNvbW1lbmQgYWdhaW5zdCBjYWxsaW5nIHRoZW0gZGlyZWN0bHkgZnJvbSBjbGllbnQgY29kZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgKiBhcyBzcXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICcuL3Nxcy1kZWZhdWx0cyc7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBvdmVycmlkZVByb3BzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEFjY291bnRQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50LCBBbnlQcmluY2lwYWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtidWlsZEVuY3J5cHRpb25LZXl9IGZyb20gXCIuL2ttcy1oZWxwZXJcIjtcbi8vIE5vdGU6IFRvIGVuc3VyZSBDREt2MiBjb21wYXRpYmlsaXR5LCBrZWVwIHRoZSBpbXBvcnQgc3RhdGVtZW50IGZvciBDb25zdHJ1Y3Qgc2VwYXJhdGVcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkUXVldWVQcm9wcyB7XG4gICAgLyoqXG4gICAgICogRXhpc3RpbmcgaW5zdGFuY2Ugb2YgU1FTIHF1ZXVlIG9iamVjdCwgcHJvdmlkaW5nIGJvdGggdGhpcyBhbmQgcXVldWVQcm9wcyB3aWxsIGNhdXNlIGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBOb25lLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4aXN0aW5nUXVldWVPYmo/OiBzcXMuUXVldWU7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwgdXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIHByaW1hcnkgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcHMgYXJlIHVzZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgcXVldWVQcm9wcz86IHNxcy5RdWV1ZVByb3BzO1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGRlYWQgbGV0dGVyIHF1ZXVlIHRvIHBhc3MgYmFkIHJlcXVlc3RzIHRvIGFmdGVyIHRoZSBtYXggcmVjZWl2ZSBjb3VudCBpcyByZWFjaGVkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BzIGFyZSB1c2VkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZT86IHNxcy5EZWFkTGV0dGVyUXVldWU7XG4gICAgLyoqXG4gICAgICogSWYgbm8ga2V5IGlzIHByb3ZpZGVkLCB0aGlzIGZsYWcgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBlbmNyeXB0ZWQgd2l0aCBhIG5ldyBDTUsgb3IgYW4gQVdTIG1hbmFnZWQga2V5LlxuICAgICAqIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGFyZSBkZWZpbmVkOiBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXksIGVuY3J5cHRpb25LZXkgb3IgZW5jcnlwdGlvbktleVByb3BzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBGYWxzZSBpZiBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXksIGVuY3J5cHRpb25LZXksIGFuZCBlbmNyeXB0aW9uS2V5UHJvcHMgYXJlIGFsbCB1bmRlZmluZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlRW5jcnlwdGlvbldpdGhDdXN0b21lck1hbmFnZWRLZXk/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsLCBpbXBvcnRlZCBlbmNyeXB0aW9uIGtleSB0byBlbmNyeXB0IHRoZSBTUVMgUXVldWUgd2l0aC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuS2V5O1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIHVzZXIgcHJvdmlkZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciB0aGUgS01TIGVuY3J5cHRpb24ga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgU1FTIFF1ZXVlIHdpdGguXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICAgKi9cbiAgICAgcmVhZG9ubHkgZW5jcnlwdGlvbktleVByb3BzPzoga21zLktleVByb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkUXVldWVSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHF1ZXVlOiBzcXMuUXVldWUsXG4gIHJlYWRvbmx5IGtleT86IGttcy5JS2V5XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUXVldWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJ1aWxkUXVldWVQcm9wcyk6IEJ1aWxkUXVldWVSZXNwb25zZSB7XG4gIENoZWNrRW5jcnlwdGlvbldhcm5pbmdzKHByb3BzKTtcblxuICAvLyBJZiBhbiBleGlzdGluZ1F1ZXVlT2JqIGlzIG5vdCBzcGVjaWZpZWRcbiAgaWYgKCFwcm9wcy5leGlzdGluZ1F1ZXVlT2JqKSB7XG4gICAgLy8gU2V0dXAgdGhlIHF1ZXVlXG4gICAgbGV0IHF1ZXVlUHJvcHM7XG4gICAgaWYgKHByb3BzLnF1ZXVlUHJvcHMpIHtcbiAgICAgIC8vIElmIHByb3BlcnR5IG92ZXJyaWRlcyBoYXZlIGJlZW4gcHJvdmlkZWQsIGluY29ycG9yYXRlIHRoZW0gYW5kIGRlcGxveVxuICAgICAgY29uc3QgY2hlY2tGaWZvID0gcHJvcHMucXVldWVQcm9wcy5maWZvID8gdHJ1ZSA6IHVuZGVmaW5lZDtcbiAgICAgIHF1ZXVlUHJvcHMgPSBvdmVycmlkZVByb3BzKGRlZmF1bHRzLkRlZmF1bHRRdWV1ZVByb3BzKCksIHsgLi4ucHJvcHMucXVldWVQcm9wcywgZmlmbzogY2hlY2tGaWZvIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyBwcm9wZXJ0eSBvdmVycmlkZXMsIGRlcGxveSB1c2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgICBxdWV1ZVByb3BzID0gZGVmYXVsdHMuRGVmYXVsdFF1ZXVlUHJvcHMoKTtcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBhIERMUSBwcm9wZXJ0eSBzaG91bGQgYmUgYWRkZWRcbiAgICBpZiAocHJvcHMuZGVhZExldHRlclF1ZXVlKSB7XG4gICAgICBxdWV1ZVByb3BzLmRlYWRMZXR0ZXJRdWV1ZSA9IHByb3BzLmRlYWRMZXR0ZXJRdWV1ZTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZW5jcnlwdGlvbiBwcm9wZXJ0aWVzLlxuICAgIC8vIE5vdGUgdGhhdCBkZWZhdWx0cy5EZWZhdWx0UXVldWVQcm9wcyBzZXRzIGVuY3J5cHRpb24gdG8gU2VydmVyLXNpZGUgS01TIGVuY3J5cHRpb24gd2l0aCBhIEtNUyBrZXkgbWFuYWdlZCBieSBTUVMuXG4gICAgaWYgKHByb3BzLnF1ZXVlUHJvcHM/LmVuY3J5cHRpb25NYXN0ZXJLZXkpIHtcbiAgICAgIHF1ZXVlUHJvcHMuZW5jcnlwdGlvbk1hc3RlcktleSA9IHByb3BzLnF1ZXVlUHJvcHM/LmVuY3J5cHRpb25NYXN0ZXJLZXk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbmNyeXB0aW9uS2V5KSB7XG4gICAgICBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXkgPSBwcm9wcy5lbmNyeXB0aW9uS2V5O1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZW5jcnlwdGlvbktleVByb3BzIHx8IHByb3BzLmVuYWJsZUVuY3J5cHRpb25XaXRoQ3VzdG9tZXJNYW5hZ2VkS2V5ID09PSB0cnVlKSB7XG4gICAgICBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXkgPSBidWlsZEVuY3J5cHRpb25LZXkoc2NvcGUsIGlkLCBwcm9wcy5lbmNyeXB0aW9uS2V5UHJvcHMpO1xuICAgIH1cblxuICAgIC8vIE5PU09OQVIgKHR5cGVzY3JpcHQ6UzYzMzApXG4gICAgLy8gZW5jcnlwdGlvbiBpcyBzZXQgdG8gUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VEIGJ5IGRlZmF1bHQgaW4gRGVmYXVsdFF1ZXVlUHJvcHMsIGJ1dFxuICAgIC8vIFNvbmFycXViZSBjYW4ndCBwYXJzZSB0aGUgY29kZSB3ZWxsIGVub3VnaCB0byBzZWUgdGhpcy4gRW5jcnlwdGlvbiBpcyBjb25maXJtZWQgYnlcbiAgICAvLyB0aGUgJ1Rlc3QgZGVwbG95bWVudCB3aXRob3V0IGltcG9ydGVkIGVuY3J5cHRpb24ga2V5JyB1bml0IHRlc3RcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBzcXMuUXVldWUoc2NvcGUsIGlkLCBxdWV1ZVByb3BzKTsgLy8gTk9TT05BUlxuXG4gICAgYXBwbHlTZWN1cmVRdWV1ZVBvbGljeShxdWV1ZSk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHF1ZXVlXG4gICAgcmV0dXJuIHsgcXVldWUsIGtleTogcXVldWUuZW5jcnlwdGlvbk1hc3RlcktleSB9O1xuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIGV4aXN0aW5nUXVldWVPYmogaXMgc3BlY2lmaWVkLCByZXR1cm4gdGhhdCBvYmplY3QgYXMgdGhlIHF1ZXVlIHRvIGJlIHVzZWRcbiAgICByZXR1cm4geyBxdWV1ZTogcHJvcHMuZXhpc3RpbmdRdWV1ZU9iaiB9O1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZnVuY3Rpb24gQ2hlY2tFbmNyeXB0aW9uV2FybmluZ3MocHJvcHM6IEJ1aWxkUXVldWVQcm9wcykge1xuICBpZiAoKHByb3BzLnF1ZXVlUHJvcHM/LmVuY3J5cHRpb25NYXN0ZXJLZXkgfHwgcHJvcHMuZW5jcnlwdGlvbktleSB8fCBwcm9wcy5lbmNyeXB0aW9uS2V5UHJvcHMpXG4gICYmIHByb3BzLmVuYWJsZUVuY3J5cHRpb25XaXRoQ3VzdG9tZXJNYW5hZ2VkS2V5ICE9PSB0cnVlKSB7XG4gICAgcHJpbnRXYXJuaW5nKGBJZ25vcmluZyBlbmFibGVFbmNyeXB0aW9uV2l0aEN1c3RvbWVyTWFuYWdlZEtleSBiZWNhdXNlIG9uZSBvZlxuICAgICBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXksIGVuY3J5cHRpb25LZXksIG9yIGVuY3J5cHRpb25LZXlQcm9wcyB3YXMgYWxyZWFkeSBzcGVjaWZpZWRgKTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBCdWlsZERlYWRMZXR0ZXJRdWV1ZVByb3BzIHtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIGluc3RhbmNlIG9mIFNRUyBxdWV1ZSBvYmplY3QsIHByb3ZpZGluZyBib3RoIHRoaXMgYW5kIHF1ZXVlUHJvcHMgd2lsbCBjYXVzZSBhbiBlcnJvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdRdWV1ZU9iaj86IHNxcy5RdWV1ZSxcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IGEgc2Vjb25kYXJ5IHF1ZXVlIHRvIGJlIHVzZWQgYXMgYSBkZWFkIGxldHRlciBxdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveURlYWRMZXR0ZXJRdWV1ZT86IGJvb2xlYW4sXG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyIHByb3ZpZGVkIHByb3BlcnRpZXMgZm9yIHRoZSBkZWFkIGxldHRlciBxdWV1ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcHMgYXJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZVByb3BzPzogc3FzLlF1ZXVlUHJvcHMsXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHRpbWVzIGEgbWVzc2FnZSBjYW4gYmUgdW5zdWNjZXNzZnVsbHkgZGVxdWV1ZWQgYmVmb3JlIGJlaW5nIG1vdmVkIHRvIHRoZSBkZWFkIGxldHRlciBxdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BzIGFyZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBtYXhSZWNlaXZlQ291bnQ/OiBudW1iZXJcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGREZWFkTGV0dGVyUXVldWUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEJ1aWxkRGVhZExldHRlclF1ZXVlUHJvcHMpOiBzcXMuRGVhZExldHRlclF1ZXVlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFwcm9wcy5leGlzdGluZ1F1ZXVlT2JqICYmIChwcm9wcy5kZXBsb3lEZWFkTGV0dGVyUXVldWUgfHwgcHJvcHMuZGVwbG95RGVhZExldHRlclF1ZXVlID09PSB1bmRlZmluZWQpKSB7XG4gICAgLy8gQ3JlYXRlIHRoZSBEZWFkIExldHRlciBRdWV1ZVxuICAgIGNvbnN0IGJ1aWxkUXVldWVSZXNwb25zZSA9IGJ1aWxkUXVldWUoc2NvcGUsICdkZWFkTGV0dGVyUXVldWUnLCB7XG4gICAgICBxdWV1ZVByb3BzOiBwcm9wcy5kZWFkTGV0dGVyUXVldWVQcm9wc1xuICAgIH0pO1xuXG4gICAgY29uc3QgbXJjID0gKHByb3BzLm1heFJlY2VpdmVDb3VudCkgPyBwcm9wcy5tYXhSZWNlaXZlQ291bnQgOiBkZWZhdWx0cy5kZWZhdWx0TWF4UmVjZWl2ZUNvdW50O1xuXG4gICAgLy8gU2V0dXAgdGhlIERlYWQgTGV0dGVyIFF1ZXVlIGludGVyZmFjZVxuICAgIGNvbnN0IGRscUludGVyZmFjZTogc3FzLkRlYWRMZXR0ZXJRdWV1ZSA9IHtcbiAgICAgIG1heFJlY2VpdmVDb3VudDogbXJjLFxuICAgICAgcXVldWU6IGJ1aWxkUXVldWVSZXNwb25zZS5xdWV1ZVxuICAgIH07XG5cbiAgICAvLyBSZXR1cm4gdGhlIGRlYWQgbGV0dGVyIHF1ZXVlIGludGVyZmFjZVxuICAgIHJldHVybiBkbHFJbnRlcmZhY2U7XG4gIH1cbiAgLy8gRVNMaW50IHJlcXVpcmVzIHRoaXMgcmV0dXJuIHN0YXRlbWVudCwgc28gZGlzYWJsaW5nIFNvbmFyUXViZSB3YXJuaW5nXG4gIHJldHVybjsgLy8gTk9TT05BUlxufVxuXG5mdW5jdGlvbiBhcHBseVNlY3VyZVF1ZXVlUG9saWN5KHF1ZXVlOiBzcXMuUXVldWUpOiB2b2lkIHtcblxuICAvLyBBcHBseSBxdWV1ZSBwb2xpY3kgdG8gZW5mb3JjZSBvbmx5IHRoZSBxdWV1ZSBvd25lciBjYW4gcGVyZm9ybSBvcGVyYXRpb25zIG9uIHF1ZXVlXG4gIHF1ZXVlLmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdRdWV1ZU93bmVyT25seUFjY2VzcycsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYCR7cXVldWUucXVldWVBcm59YFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgXCJzcXM6RGVsZXRlTWVzc2FnZVwiLFxuICAgICAgICBcInNxczpSZWNlaXZlTWVzc2FnZVwiLFxuICAgICAgICBcInNxczpTZW5kTWVzc2FnZVwiLFxuICAgICAgICBcInNxczpHZXRRdWV1ZUF0dHJpYnV0ZXNcIixcbiAgICAgICAgXCJzcXM6UmVtb3ZlUGVybWlzc2lvblwiLFxuICAgICAgICBcInNxczpBZGRQZXJtaXNzaW9uXCIsXG4gICAgICAgIFwic3FzOlNldFF1ZXVlQXR0cmlidXRlc1wiXG4gICAgICBdLFxuICAgICAgcHJpbmNpcGFsczogW25ldyBBY2NvdW50UHJpbmNpcGFsKFN0YWNrLm9mKHF1ZXVlKS5hY2NvdW50KV0sXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPV1xuICAgIH0pXG4gICk7XG5cbiAgLy8gQXBwbHkgcXVldWUgcG9saWN5IHRvIGVuZm9yY2UgZW5jcnlwdGlvbiBvZiBkYXRhIGluIHRyYW5zaXRcbiAgcXVldWUuYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0h0dHBzT25seScsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYCR7cXVldWUucXVldWVBcm59YFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgXCJTUVM6KlwiXG4gICAgICBdLFxuICAgICAgcHJpbmNpcGFsczogW25ldyBBbnlQcmluY2lwYWwoKV0sXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5ERU5ZLFxuICAgICAgY29uZGl0aW9uczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBCb29sOiB7XG4gICAgICAgICAgICAgICdhd3M6U2VjdXJlVHJhbnNwb3J0JzogJ2ZhbHNlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNxc1Byb3BzIHtcbiAgcmVhZG9ubHkgZXhpc3RpbmdRdWV1ZU9iaj86IHNxcy5RdWV1ZSxcbiAgcmVhZG9ubHkgcXVldWVQcm9wcz86IHNxcy5RdWV1ZVByb3BzLFxuICByZWFkb25seSBkZXBsb3lEZWFkTGV0dGVyUXVldWU/OiBib29sZWFuLFxuICByZWFkb25seSBkZWFkTGV0dGVyUXVldWVQcm9wcz86IHNxcy5RdWV1ZVByb3BzLFxuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLktleSxcbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleVByb3BzPzoga21zLktleVByb3BzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja1Nxc1Byb3BzKHByb3BzT2JqZWN0OiBTcXNQcm9wcyB8IGFueSkge1xuICBsZXQgZXJyb3JNZXNzYWdlcyA9ICcnO1xuICBsZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xuXG4gIGlmIChwcm9wc09iamVjdC5leGlzdGluZ1F1ZXVlT2JqICYmIHByb3BzT2JqZWN0LnF1ZXVlUHJvcHMpIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9ICdFcnJvciAtIEVpdGhlciBwcm92aWRlIHF1ZXVlUHJvcHMgb3IgZXhpc3RpbmdRdWV1ZU9iaiwgYnV0IG5vdCBib3RoLlxcbic7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAocHJvcHNPYmplY3QucXVldWVQcm9wcz8uZW5jcnlwdGlvbk1hc3RlcktleSAmJiBwcm9wc09iamVjdC5lbmNyeXB0aW9uS2V5KSB7XG4gICAgZXJyb3JNZXNzYWdlcyArPSAnRXJyb3IgLSBFaXRoZXIgcHJvdmlkZSBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXkgb3IgZW5jcnlwdGlvbktleSwgYnV0IG5vdCBib3RoLlxcbic7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAocHJvcHNPYmplY3QucXVldWVQcm9wcz8uZW5jcnlwdGlvbk1hc3RlcktleSAmJiBwcm9wc09iamVjdC5lbmNyeXB0aW9uS2V5UHJvcHMpIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9ICdFcnJvciAtIEVpdGhlciBwcm92aWRlIHF1ZXVlUHJvcHMuZW5jcnlwdGlvbk1hc3RlcktleSBvciBlbmNyeXB0aW9uS2V5UHJvcHMsIGJ1dCBub3QgYm90aC5cXG4nO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb3BzT2JqZWN0LmVuY3J5cHRpb25LZXkgJiYgcHJvcHNPYmplY3QuZW5jcnlwdGlvbktleVByb3BzKSB7XG4gICAgZXJyb3JNZXNzYWdlcyArPSAnRXJyb3IgLSBFaXRoZXIgcHJvdmlkZSBlbmNyeXB0aW9uS2V5IG9yIGVuY3J5cHRpb25LZXlQcm9wcywgYnV0IG5vdCBib3RoLlxcbic7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAoKHByb3BzT2JqZWN0Py5kZXBsb3lEZWFkTGV0dGVyUXVldWUgPT09IGZhbHNlKSAmJiBwcm9wc09iamVjdC5kZWFkTGV0dGVyUXVldWVQcm9wcykge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gJ0Vycm9yIC0gSWYgZGVwbG95RGVhZExldHRlclF1ZXVlIGlzIGZhbHNlIHRoZW4gZGVhZExldHRlclF1ZXVlUHJvcHMgY2Fubm90IGJlIHNwZWNpZmllZC5cXG4nO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgY29uc3QgaXNRdWV1ZUZpZm86IGJvb2xlYW4gPSBwcm9wc09iamVjdD8ucXVldWVQcm9wcz8uZmlmbztcbiAgY29uc3QgaXNEZWFkTGV0dGVyUXVldWVGaWZvOiBib29sZWFuID0gcHJvcHNPYmplY3Q/LmRlYWRMZXR0ZXJRdWV1ZVByb3BzPy5maWZvO1xuICBjb25zdCBkZXBsb3lEZWFkTGV0dGVyUXVldWU6IGJvb2xlYW4gPSBwcm9wc09iamVjdC5kZXBsb3lEZWFkTGV0dGVyUXVldWUgfHwgcHJvcHNPYmplY3QuZGVwbG95RGVhZExldHRlclF1ZXVlID09PSB1bmRlZmluZWQ7XG5cbiAgaWYgKGRlcGxveURlYWRMZXR0ZXJRdWV1ZSAmJiAoaXNRdWV1ZUZpZm8gIT09IGlzRGVhZExldHRlclF1ZXVlRmlmbykpIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9ICdFcnJvciAtIElmIHlvdSBzcGVjaWZ5IGEgZmlmbzogdHJ1ZSBpbiBlaXRoZXIgcXVldWVQcm9wcyBvciBkZWFkTGV0dGVyUXVldWVQcm9wcywgeW91IG11c3QgYWxzbyBzZXQgZmlmbzogJyArXG4gICAgICAndHJ1ZSBpbiB0aGUgb3RoZXIgcHJvcHMgb2JqZWN0LiBGaWZvIG11c3QgbWF0Y2ggZm9yIHRoZSBRdWV1ZSBhbmQgdGhlIERlYWQgTGV0dGVyIFF1ZXVlLlxcbic7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAoZXJyb3JGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VzKTtcbiAgfVxufVxuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FzLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNxcy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCxVQUFVO0FBQ1YsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUUzQyxtQ0FBK0U7QUFDL0UsaURBQThGO0FBQzlGLDZDQUFvQztBQUNwQyw2Q0FBZ0Q7QUE4RGhEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO0lBQzdFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLElBQUksZUFBZ0QsQ0FBQztJQUVyRCxJQUFJLCtCQUF1QixDQUFFLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUMvRCxlQUFlLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNoRCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUI7WUFDbEQsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtZQUNoRCxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7U0FDdkMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtRQUMzQixrQkFBa0I7UUFDbEIsSUFBSSxVQUFVLENBQUM7UUFDZixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDcEIsd0VBQXdFO1lBQ3hFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRCxVQUFVLEdBQUcscUJBQWEsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLFVB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QXVCLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXhHLElBQUkscUJBQXFCLElBQUksQ0FBQyxXQUFXLEtBQUsscUJBQXFCLENBQUMsRUFBRTtRQUNwRSxhQUFhLElBQUksNEdBQTRHO1lBQzNILDRGQUE0RixDQUFDO1FBQy9GLFVBQVUsR0FBRyxJQUFJLENBQUM7S0FDbkI7SUFFRCxJQUFJLFVBQVUsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDaEM7QUFDSCxDQUFDO0FBMUNELHNDQTBDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0ICogYXMgc3FzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zcXMnO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSAnLi9zcXMtZGVmYXVsdHMnO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQsIG92ZXJyaWRlUHJvcHMsIHByaW50V2FybmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQWNjb3VudFByaW5jaXBhbCwgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQsIEFueVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge2J1aWxkRW5jcnlwdGlvbktleX0gZnJvbSBcIi4va21zLWhlbHBlclwiO1xuLy8gTm90ZTogVG8gZW5zdXJlIENES3YyIGNvbXBhdGliaWxpdHksIGtlZXAgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIENvbnN0cnVjdCBzZXBhcmF0ZVxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRRdWV1ZVByb3BzIHtcbiAgICAvKipcbiAgICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBTUVMgcXVldWUgb2JqZWN0LCBwcm92aWRpbmcgYm90aCB0aGlzIGFuZCBxdWV1ZVByb3BzIHdpbGwgY2F1c2UgYW4gZXJyb3IuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIE5vbmUuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhpc3RpbmdRdWV1ZU9iaj86IHNxcy5RdWV1ZTtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCB1c2VyIHByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgcHJpbWFyeSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wcyBhcmUgdXNlZC5cbiAgICAgKi9cbiAgICByZWFkb25seSBxdWV1ZVByb3BzPzogc3FzLlF1ZXVlUHJvcHM7XG4gICAgLyoqXG4gICAgICogSWYgbm8ga2V5IGlzIHByb3ZpZGVkLCB0aGlzIGZsYWcgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBlbmNyeXB0ZWQgd2l0aCBhIG5ldyBDTUsgb3IgYW4gQVdTIG1hbmFnZWQga2V5LlxuICAgICAqIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGFyZSBkZWZpbmVkOiBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXksIGVuY3J5cHRpb25LZXkgb3IgZW5jcnlwdGlvbktleVByb3BzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBGYWxzZSBpZiBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXksIGVuY3J5cHRpb25LZXksIGFuZCBlbmNyeXB0aW9uS2V5UHJvcHMgYXJlIGFsbCB1bmRlZmluZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlRW5jcnlwdGlvbldpdGhDdXN0b21lck1hbmFnZWRLZXk/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsLCBpbXBvcnRlZCBlbmNyeXB0aW9uIGtleSB0byBlbmNyeXB0IHRoZSBTUVMgUXVldWUgd2l0aC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuS2V5O1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIHVzZXIgcHJvdmlkZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciB0aGUgS01TIGVuY3J5cHRpb24ga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgU1FTIFF1ZXVlIHdpdGguXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICAgKi9cbiAgICAgcmVhZG9ubHkgZW5jcnlwdGlvbktleVByb3BzPzoga21zLktleVByb3BzO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGVwbG95IGEgc2Vjb25kYXJ5IHF1ZXVlIHRvIGJlIHVzZWQgYXMgYSBkZWFkIGxldHRlciBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlcGxveURlYWRMZXR0ZXJRdWV1ZT86IGJvb2xlYW4sXG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwgdXNlciBwcm92aWRlZCBwcm9wZXJ0aWVzIGZvciB0aGUgZGVhZCBsZXR0ZXIgcXVldWVcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wcyBhcmUgdXNlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZVByb3BzPzogc3FzLlF1ZXVlUHJvcHMsXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiB0aW1lcyBhIG1lc3NhZ2UgY2FuIGJlIHVuc3VjY2Vzc2Z1bGx5IGRlcXVldWVkIGJlZm9yZSBiZWluZyBtb3ZlZCB0byB0aGUgZGVhZCBsZXR0ZXIgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcHMgYXJlIHVzZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBtYXhSZWNlaXZlQ291bnQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFF1ZXVlUmVzcG9uc2Uge1xuICByZWFkb25seSBxdWV1ZTogc3FzLlF1ZXVlLFxuICByZWFkb25seSBrZXk/OiBrbXMuSUtleSxcbiAgcmVhZG9ubHkgZGxxPzogc3FzLkRlYWRMZXR0ZXJRdWV1ZSxcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRRdWV1ZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRRdWV1ZVByb3BzKTogQnVpbGRRdWV1ZVJlc3BvbnNlIHtcbiAgQ2hlY2tCdWlkUXVldWVQcm9wcyhwcm9wcyk7XG4gIGxldCBkZWFkTGV0dGVyUXVldWU6IHNxcy5EZWFkTGV0dGVyUXVldWUgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKENoZWNrQm9vbGVhbldpdGhEZWZhdWx0KCBwcm9wcy5kZXBsb3lEZWFkTGV0dGVyUXVldWUsIHRydWUpKSB7XG4gICAgZGVhZExldHRlclF1ZXVlID0gYnVpbGREZWFkTGV0dGVyUXVldWUoc2NvcGUsIGlkLCB7XG4gICAgICBleGlzdGluZ1F1ZXVlT2JqOiBwcm9wcy5leGlzdGluZ1F1ZXVlT2JqLFxuICAgICAgZGVwbG95RGVhZExldHRlclF1ZXVlOiBwcm9wcy5kZXBsb3lEZWFkTGV0dGVyUXVldWUsXG4gICAgICBkZWFkTGV0dGVyUXVldWVQcm9wczogcHJvcHMuZGVhZExldHRlclF1ZXVlUHJvcHMsXG4gICAgICBtYXhSZWNlaXZlQ291bnQ6IHByb3BzLm1heFJlY2VpdmVDb3VudFxuICAgIH0pO1xuICB9XG5cbiAgLy8gSWYgYW4gZXhpc3RpbmdRdWV1ZU9iaiBpcyBub3Qgc3BlY2lmaWVkXG4gIGlmICghcHJvcHMuZXhpc3RpbmdRdWV1ZU9iaikge1xuICAgIC8vIFNldHVwIHRoZSBxdWV1ZVxuICAgIGxldCBxdWV1ZVByb3BzO1xuICAgIGlmIChwcm9wcy5xdWV1ZVByb3BzKSB7XG4gICAgICAvLyBJZiBwcm9wZXJ0eSBvdmVycmlkZXMgaGF2ZSBiZWVuIHByb3ZpZGVkLCBpbmNvcnBvcmF0ZSB0aGVtIGFuZCBkZXBsb3lcbiAgICAgIGNvbnN0IGNoZWNrRmlmbyA9IHByb3BzLnF1ZXVlUHJvcHMuZmlmbyA/IHRydWUgOiB1bmRlZmluZWQ7XG4gICAgICBxdWV1ZVByb3BzID0gb3ZlcnJpZGVQcm9wcyhkZWZhdWx0cy5EZWZhdWx0UXVldWVQcm9wcygpLCB7IC4uLnByb3BzLnF1ZXVlUHJvcHMsIGZpZm86IGNoZWNrRmlmbyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgbm8gcHJvcGVydHkgb3ZlcnJpZGVzLCBkZXBsb3kgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgICAgcXVldWVQcm9wcyA9IGRlZmF1bHRzLkRlZmF1bHRRdWV1ZVByb3BzKCk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYSBETFEgcHJvcGVydHkgc2hvdWxkIGJlIGFkZGVkXG4gICAgaWYgKGRlYWRMZXR0ZXJRdWV1ZSkge1xuICAgICAgcXVldWVQcm9wcy5kZWFkTGV0dGVyUXVldWUgPSBkZWFkTGV0dGVyUXVldWU7XG4gICAgfVxuXG4gICAgLy8gU2V0IGVuY3J5cHRpb24gcHJvcGVydGllcy5cbiAgICAvLyBOb3RlIHRoYXQgZGVmYXVsdHMuRGVmYXVsdFF1ZXVlUHJvcHMgc2V0cyBlbmNyeXB0aW9uIHRvIFNlcnZlci1zaWRlIEtNUyBlbmNyeXB0aW9uIHdpdGggYSBLTVMga2V5IG1hbmFnZWQgYnkgU1FTLlxuICAgIGlmIChwcm9wcy5xdWV1ZVByb3BzPy5lbmNyeXB0aW9uTWFzdGVyS2V5KSB7XG4gICAgICBxdWV1ZVByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXkgPSBwcm9wcy5xdWV1ZVByb3BzPy5lbmNyeXB0aW9uTWFzdGVyS2V5O1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZW5jcnlwdGlvbktleSkge1xuICAgICAgcXVldWVQcm9wcy5lbmNyeXB0aW9uTWFzdGVyS2V5ID0gcHJvcHMuZW5jcnlwdGlvbktleTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVuY3J5cHRpb25LZXlQcm9wcyB8fCBwcm9wcy5lbmFibGVFbmNyeXB0aW9uV2l0aEN1c3RvbWVyTWFuYWdlZEtleSA9PT0gdHJ1ZSkge1xuICAgICAgcXVldWVQcm9wcy5lbmNyeXB0aW9uTWFzdGVyS2V5ID0gYnVpbGRFbmNyeXB0aW9uS2V5KHNjb3BlLCBpZCwgcHJvcHMuZW5jcnlwdGlvbktleVByb3BzKTtcbiAgICB9XG5cbiAgICAvLyBOT1NPTkFSICh0eXBlc2NyaXB0OlM2MzMwKVxuICAgIC8vIGVuY3J5cHRpb24gaXMgc2V0IHRvIFF1ZXVlRW5jcnlwdGlvbi5LTVNfTUFOQUdFRCBieSBkZWZhdWx0IGluIERlZmF1bHRRdWV1ZVByb3BzLCBidXRcbiAgICAvLyBTb25hcnF1YmUgY2FuJ3QgcGFyc2UgdGhlIGNvZGUgd2VsbCBlbm91Z2ggdG8gc2VlIHRoaXMuIEVuY3J5cHRpb24gaXMgY29uZmlybWVkIGJ5XG4gICAgLy8gdGhlICdUZXN0IGRlcGxveW1lbnQgd2l0aG91dCBpbXBvcnRlZCBlbmNyeXB0aW9uIGtleScgdW5pdCB0ZXN0XG4gICAgY29uc3QgcXVldWUgPSBuZXcgc3FzLlF1ZXVlKHNjb3BlLCBpZCwgcXVldWVQcm9wcyk7IC8vIE5PU09OQVJcblxuICAgIGFwcGx5U2VjdXJlUXVldWVQb2xpY3kocXVldWUpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBxdWV1ZVxuICAgIHJldHVybiB7IHF1ZXVlLCBrZXk6IHF1ZXVlLmVuY3J5cHRpb25NYXN0ZXJLZXksICBkbHE6IGRlYWRMZXR0ZXJRdWV1ZSB9O1xuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIGV4aXN0aW5nUXVldWVPYmogaXMgc3BlY2lmaWVkLCByZXR1cm4gdGhhdCBvYmplY3QgYXMgdGhlIHF1ZXVlIHRvIGJlIHVzZWRcbiAgICByZXR1cm4geyBxdWV1ZTogcHJvcHMuZXhpc3RpbmdRdWV1ZU9iaiB9O1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZnVuY3Rpb24gQ2hlY2tCdWlkUXVldWVQcm9wcyhwcm9wczogQnVpbGRRdWV1ZVByb3BzKSB7XG4gIGlmICgocHJvcHMucXVldWVQcm9wcz8uZW5jcnlwdGlvbk1hc3RlcktleSB8fCBwcm9wcy5lbmNyeXB0aW9uS2V5IHx8IHByb3BzLmVuY3J5cHRpb25LZXlQcm9wcylcbiAgJiYgcHJvcHMuZW5hYmxlRW5jcnlwdGlvbldpdGhDdXN0b21lck1hbmFnZWRLZXkgIT09IHRydWUpIHtcbiAgICBwcmludFdhcm5pbmcoYElnbm9yaW5nIGVuYWJsZUVuY3J5cHRpb25XaXRoQ3VzdG9tZXJNYW5hZ2VkS2V5IGJlY2F1c2Ugb25lIG9mXG4gICAgIHF1ZXVlUHJvcHMuZW5jcnlwdGlvbk1hc3RlcktleSwgZW5jcnlwdGlvbktleSwgb3IgZW5jcnlwdGlvbktleVByb3BzIHdhcyBhbHJlYWR5IHNwZWNpZmllZGApO1xuICB9XG5cbiAgbGV0IGVycm9yTWVzc2FnZXMgPSAnJztcbiAgbGV0IGVycm9yRm91bmQgPSBmYWxzZTtcblxuICBpZiAoKHByb3BzLmRlcGxveURlYWRMZXR0ZXJRdWV1ZSA9PT0gZmFsc2UpICYmIHByb3BzLm1heFJlY2VpdmVDb3VudCkge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gJ0Vycm9yIC0gTWF4UmVjZWl2ZUNvdW50IGNhbm5vdCBiZSBzZXQgaWYgZGVwbG95RGVhZExldHRlclF1ZXVlIGlzIGZhbHNlLlxcbic7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAoZXJyb3JGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VzKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkRGVhZExldHRlclF1ZXVlUHJvcHMge1xuICAvKipcbiAgICogRXhpc3RpbmcgaW5zdGFuY2Ugb2YgU1FTIHF1ZXVlIG9iamVjdCwgcHJvdmlkaW5nIGJvdGggdGhpcyBhbmQgcXVldWVQcm9wcyB3aWxsIGNhdXNlIGFuIGVycm9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmUuXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ1F1ZXVlT2JqPzogc3FzLlF1ZXVlLFxuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgYSBzZWNvbmRhcnkgcXVldWUgdG8gYmUgdXNlZCBhcyBhIGRlYWQgbGV0dGVyIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95RGVhZExldHRlclF1ZXVlPzogYm9vbGVhbixcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgcHJvdmlkZWQgcHJvcGVydGllcyBmb3IgdGhlIGRlYWQgbGV0dGVyIHF1ZXVlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wcyBhcmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlUHJvcHM/OiBzcXMuUXVldWVQcm9wcyxcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGltZXMgYSBtZXNzYWdlIGNhbiBiZSB1bnN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gdGhlIGRlYWQgbGV0dGVyIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcHMgYXJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IG1heFJlY2VpdmVDb3VudD86IG51bWJlclxufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZERlYWRMZXR0ZXJRdWV1ZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGREZWFkTGV0dGVyUXVldWVQcm9wcyk6IHNxcy5EZWFkTGV0dGVyUXVldWUgfCB1bmRlZmluZWQge1xuICBpZiAoIXByb3BzLmV4aXN0aW5nUXVldWVPYmogJiYgQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQocHJvcHMuZGVwbG95RGVhZExldHRlclF1ZXVlLCB0cnVlKSkge1xuICAgIC8vIENyZWF0ZSB0aGUgRGVhZCBMZXR0ZXIgUXVldWVcbiAgICBjb25zdCBidWlsZFF1ZXVlUmVzcG9uc2UgPSBidWlsZFF1ZXVlKHNjb3BlLCBgJHtpZH0tZGxxYCwge1xuICAgICAgcXVldWVQcm9wczogcHJvcHMuZGVhZExldHRlclF1ZXVlUHJvcHMsXG4gICAgICBkZXBsb3lEZWFkTGV0dGVyUXVldWU6IGZhbHNlICAvLyBkb24ndCBkZXBsb3kgYSBETFEgZm9yIHRoZSBETEchXG4gICAgfSk7XG5cbiAgICBjb25zdCBtcmMgPSAocHJvcHMubWF4UmVjZWl2ZUNvdW50KSA/IHByb3BzLm1heFJlY2VpdmVDb3VudCA6IGRlZmF1bHRzLmRlZmF1bHRNYXhSZWNlaXZlQ291bnQ7XG5cbiAgICAvLyBTZXR1cCB0aGUgRGVhZCBMZXR0ZXIgUXVldWUgaW50ZXJmYWNlXG4gICAgY29uc3QgZGVhZExldHRlclF1ZXVlT2JqZWN0OiBzcXMuRGVhZExldHRlclF1ZXVlID0ge1xuICAgICAgbWF4UmVjZWl2ZUNvdW50OiBtcmMsXG4gICAgICBxdWV1ZTogYnVpbGRRdWV1ZVJlc3BvbnNlLnF1ZXVlXG4gICAgfTtcblxuICAgIC8vIFJldHVybiB0aGUgZGVhZCBsZXR0ZXIgcXVldWUgaW50ZXJmYWNlXG4gICAgcmV0dXJuIGRlYWRMZXR0ZXJRdWV1ZU9iamVjdDtcbiAgfVxuICAvLyBFU0xpbnQgcmVxdWlyZXMgdGhpcyByZXR1cm4gc3RhdGVtZW50LCBzbyBkaXNhYmxpbmcgU29uYXJRdWJlIHdhcm5pbmdcbiAgcmV0dXJuOyAvLyBOT1NPTkFSXG59XG5cbmZ1bmN0aW9uIGFwcGx5U2VjdXJlUXVldWVQb2xpY3kocXVldWU6IHNxcy5RdWV1ZSk6IHZvaWQge1xuXG4gIC8vIEFwcGx5IHF1ZXVlIHBvbGljeSB0byBlbmZvcmNlIG9ubHkgdGhlIHF1ZXVlIG93bmVyIGNhbiBwZXJmb3JtIG9wZXJhdGlvbnMgb24gcXVldWVcbiAgcXVldWUuYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ1F1ZXVlT3duZXJPbmx5QWNjZXNzJyxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgJHtxdWV1ZS5xdWV1ZUFybn1gXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICBcInNxczpEZWxldGVNZXNzYWdlXCIsXG4gICAgICAgIFwic3FzOlJlY2VpdmVNZXNzYWdlXCIsXG4gICAgICAgIFwic3FzOlNlbmRNZXNzYWdlXCIsXG4gICAgICAgIFwic3FzOkdldFF1ZXVlQXR0cmlidXRlc1wiLFxuICAgICAgICBcInNxczpSZW1vdmVQZXJtaXNzaW9uXCIsXG4gICAgICAgIFwic3FzOkFkZFBlcm1pc3Npb25cIixcbiAgICAgICAgXCJzcXM6U2V0UXVldWVBdHRyaWJ1dGVzXCJcbiAgICAgIF0sXG4gICAgICBwcmluY2lwYWxzOiBbbmV3IEFjY291bnRQcmluY2lwYWwoU3RhY2sub2YocXVldWUpLmFjY291bnQpXSxcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XXG4gICAgfSlcbiAgKTtcblxuICAvLyBBcHBseSBxdWV1ZSBwb2xpY3kgdG8gZW5mb3JjZSBlbmNyeXB0aW9uIG9mIGRhdGEgaW4gdHJhbnNpdFxuICBxdWV1ZS5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnSHR0cHNPbmx5JyxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgJHtxdWV1ZS5xdWV1ZUFybn1gXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICBcIlNRUzoqXCJcbiAgICAgIF0sXG4gICAgICBwcmluY2lwYWxzOiBbbmV3IEFueVByaW5jaXBhbCgpXSxcbiAgICAgIGVmZmVjdDogRWZmZWN0LkRFTlksXG4gICAgICBjb25kaXRpb25zOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEJvb2w6IHtcbiAgICAgICAgICAgICAgJ2F3czpTZWN1cmVUcmFuc3BvcnQnOiAnZmFsc2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3FzUHJvcHMge1xuICByZWFkb25seSBleGlzdGluZ1F1ZXVlT2JqPzogc3FzLlF1ZXVlLFxuICByZWFkb25seSBxdWV1ZVByb3BzPzogc3FzLlF1ZXVlUHJvcHMsXG4gIHJlYWRvbmx5IGRlcGxveURlYWRMZXR0ZXJRdWV1ZT86IGJvb2xlYW4sXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZVByb3BzPzogc3FzLlF1ZXVlUHJvcHMsXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuS2V5LFxuICByZWFkb25seSBlbmNyeXB0aW9uS2V5UHJvcHM/OiBrbXMuS2V5UHJvcHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrU3FzUHJvcHMocHJvcHNPYmplY3Q6IFNxc1Byb3BzIHwgYW55KSB7XG4gIGxldCBlcnJvck1lc3NhZ2VzID0gJyc7XG4gIGxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5cbiAgaWYgKHByb3BzT2JqZWN0LmV4aXN0aW5nUXVldWVPYmogJiYgcHJvcHNPYmplY3QucXVldWVQcm9wcykge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gJ0Vycm9yIC0gRWl0aGVyIHByb3ZpZGUgcXVldWVQcm9wcyBvciBleGlzdGluZ1F1ZXVlT2JqLCBidXQgbm90IGJvdGguXFxuJztcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9wc09iamVjdC5xdWV1ZVByb3BzPy5lbmNyeXB0aW9uTWFzdGVyS2V5ICYmIHByb3BzT2JqZWN0LmVuY3J5cHRpb25LZXkpIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9ICdFcnJvciAtIEVpdGhlciBwcm92aWRlIHF1ZXVlUHJvcHMuZW5jcnlwdGlvbk1hc3RlcktleSBvciBlbmNyeXB0aW9uS2V5LCBidXQgbm90IGJvdGguXFxuJztcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9wc09iamVjdC5xdWV1ZVByb3BzPy5lbmNyeXB0aW9uTWFzdGVyS2V5ICYmIHByb3BzT2JqZWN0LmVuY3J5cHRpb25LZXlQcm9wcykge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gJ0Vycm9yIC0gRWl0aGVyIHByb3ZpZGUgcXVldWVQcm9wcy5lbmNyeXB0aW9uTWFzdGVyS2V5IG9yIGVuY3J5cHRpb25LZXlQcm9wcywgYnV0IG5vdCBib3RoLlxcbic7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAocHJvcHNPYmplY3QuZW5jcnlwdGlvbktleSAmJiBwcm9wc09iamVjdC5lbmNyeXB0aW9uS2V5UHJvcHMpIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9ICdFcnJvciAtIEVpdGhlciBwcm92aWRlIGVuY3J5cHRpb25LZXkgb3IgZW5jcnlwdGlvbktleVByb3BzLCBidXQgbm90IGJvdGguXFxuJztcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICgocHJvcHNPYmplY3Q/LmRlcGxveURlYWRMZXR0ZXJRdWV1ZSA9PT0gZmFsc2UpICYmIHByb3BzT2JqZWN0LmRlYWRMZXR0ZXJRdWV1ZVByb3BzKSB7XG4gICAgZXJyb3JNZXNzYWdlcyArPSAnRXJyb3IgLSBJZiBkZXBsb3lEZWFkTGV0dGVyUXVldWUgaXMgZmFsc2UgdGhlbiBkZWFkTGV0dGVyUXVldWVQcm9wcyBjYW5ub3QgYmUgc3BlY2lmaWVkLlxcbic7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBjb25zdCBpc1F1ZXVlRmlmbzogYm9vbGVhbiA9IHByb3BzT2JqZWN0Py5xdWV1ZVByb3BzPy5maWZvO1xuICBjb25zdCBpc0RlYWRMZXR0ZXJRdWV1ZUZpZm86IGJvb2xlYW4gPSBwcm9wc09iamVjdD8uZGVhZExldHRlclF1ZXVlUHJvcHM/LmZpZm87XG4gIGNvbnN0IGRlcGxveURlYWRMZXR0ZXJRdWV1ZTogYm9vbGVhbiA9IENoZWNrQm9vbGVhbldpdGhEZWZhdWx0KHByb3BzT2JqZWN0LmRlcGxveURlYWRMZXR0ZXJRdWV1ZSwgdHJ1ZSk7XG5cbiAgaWYgKGRlcGxveURlYWRMZXR0ZXJRdWV1ZSAmJiAoaXNRdWV1ZUZpZm8gIT09IGlzRGVhZExldHRlclF1ZXVlRmlmbykpIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9ICdFcnJvciAtIElmIHlvdSBzcGVjaWZ5IGEgZmlmbzogdHJ1ZSBpbiBlaXRoZXIgcXVldWVQcm9wcyBvciBkZWFkTGV0dGVyUXVldWVQcm9wcywgeW91IG11c3QgYWxzbyBzZXQgZmlmbzogJyArXG4gICAgICAndHJ1ZSBpbiB0aGUgb3RoZXIgcHJvcHMgb2JqZWN0LiBGaWZvIG11c3QgbWF0Y2ggZm9yIHRoZSBRdWV1ZSBhbmQgdGhlIERlYWQgTGV0dGVyIFF1ZXVlLlxcbic7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAoZXJyb3JGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VzKTtcbiAgfVxufVxuIl19
package/lib/utils.d.ts CHANGED
@@ -12,6 +12,8 @@
12
12
  */
13
13
  import * as cdk from 'aws-cdk-lib';
14
14
  import { Construct } from "constructs";
15
+ export declare const COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME: cdk.aws_lambda.Runtime;
16
+ export declare const COMMERCIAL_REGION_LAMBDA_NODE_STRING = "nodejs20.x";
15
17
  /**
16
18
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
17
19
  */
package/lib/utils.js CHANGED
@@ -12,7 +12,7 @@
12
12
  * and limitations under the License.
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.CheckBooleanWithDefault = exports.CheckListValues = exports.generateName = exports.consolidateProps = exports.addCfnSuppressRules = exports.generatePhysicalName = exports.generateResourceName = exports.printWarning = exports.overrideProps = void 0;
15
+ exports.CheckBooleanWithDefault = exports.CheckListValues = exports.generateName = exports.consolidateProps = exports.addCfnSuppressRules = exports.generatePhysicalName = exports.generateResourceName = exports.printWarning = exports.overrideProps = exports.COMMERCIAL_REGION_LAMBDA_NODE_STRING = exports.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME = void 0;
16
16
  /*
17
17
  * The functions found here in the core library are for internal use and can be changed
18
18
  * or removed outside of a major release. We recommend against calling them directly from client code.
@@ -22,6 +22,9 @@ const override_warning_service_1 = require("./override-warning-service");
22
22
  const log = require("npmlog");
23
23
  const crypto = require("crypto");
24
24
  const cdk = require("aws-cdk-lib");
25
+ const lambda = require("aws-cdk-lib/aws-lambda");
26
+ exports.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME = lambda.Runtime.NODEJS_20_X;
27
+ exports.COMMERCIAL_REGION_LAMBDA_NODE_STRING = "nodejs20.x";
25
28
  function isObject(val) {
26
29
  return val != null && typeof val === 'object'
27
30
  && Object.prototype.toString.call(val) === '[object Object]';
@@ -246,4 +249,4 @@ function CheckBooleanWithDefault(value, defaultValue) {
246
249
  }
247
250
  }
248
251
  exports.CheckBooleanWithDefault = CheckBooleanWithDefault;
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUVIOzs7R0FHRztBQUVILHVDQUF1QztBQUN2Qyx5RUFBb0U7QUFDcEUsOEJBQThCO0FBQzlCLGlDQUFpQztBQUNqQyxtQ0FBbUM7QUFHbkMsU0FBUyxRQUFRLENBQUMsR0FBVztJQUMzQixPQUFPLEdBQUcsSUFBSSxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtXQUNwQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssaUJBQWlCLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLENBQVM7SUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUM3QixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCw4QkFBOEI7SUFDOUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUM5QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsNEJBQTRCO0lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDNUIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCx5REFBeUQ7SUFDekQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUNsRCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsNkJBQTZCO0lBQzdCLE9BQU8sSUFBSSxDQUFDO0FB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QixZQUFZLENBQUMsS0FBZ0IsRUFBRSxhQUFxQixFQUFFO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBTkQsb0NBTUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxrQkFBNEIsRUFBRSxlQUF5QixFQUFFLFNBQWlCO0lBQ3hHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sS0FBSyxDQUFDLFdBQVcsU0FBUyxnQkFBZ0IsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQU5ELDBDQU1DO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsS0FBMEIsRUFBRSxZQUFxQjtJQUN2RixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDdkIsT0FBTyxZQUFZLENBQUM7S0FDckI7U0FBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBTkQsMERBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKlxuICogIFRoZSBmdW5jdGlvbnMgZm91bmQgaGVyZSBpbiB0aGUgY29yZSBsaWJyYXJ5IGFyZSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBjYW4gYmUgY2hhbmdlZFxuICogIG9yIHJlbW92ZWQgb3V0c2lkZSBvZiBhIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCBhZ2FpbnN0IGNhbGxpbmcgdGhlbSBkaXJlY3RseSBmcm9tIGNsaWVudCBjb2RlLlxuICovXG5cbmltcG9ydCAqIGFzIGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHsgZmxhZ092ZXJyaWRkZW5EZWZhdWx0cyB9IGZyb20gJy4vb3ZlcnJpZGUtd2FybmluZy1zZXJ2aWNlJztcbmltcG9ydCAqIGFzIGxvZyBmcm9tICducG1sb2cnO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZnVuY3Rpb24gaXNPYmplY3QodmFsOiBvYmplY3QpIHtcbiAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnXG4gICAgICAgICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvOiBvYmplY3QpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobykgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc09iamVjdChvKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcbiAgY29uc3QgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gIGlmICh0eXBlb2YgY3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcbiAgY29uc3QgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuICBpZiAoaXNPYmplY3QocHJvdCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG4gIGlmIChwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJyaWRlUHJvcHMoRGVmYXVsdFByb3BzOiBvYmplY3QsIHVzZXJQcm9wczogb2JqZWN0LCBjb25jYXRBcnJheTogYm9vbGVhbiA9IGZhbHNlLCBzdXBwcmVzc1dhcm5pbmdzPzogYm9vbGVhbik6IGFueSB7XG4gIC8vIE5vdGlmeSB0aGUgdXNlciB2aWEgY29uc29sZSBvdXRwdXQgaWYgZGVmYXVsdHMgYXJlIG92ZXJyaWRkZW5cblxuICBsZXQgb3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQ6IGJvb2xlYW47XG4gIGlmICgocHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPT09ICdmYWxzZScpIHx8IChzdXBwcmVzc1dhcm5pbmdzID09PSB0cnVlKSkge1xuICAgIG92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gZmFsc2U7XG4gIH0gZWxzZSAge1xuICAgIG92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gdHJ1ZTtcbiAgfVxuICBpZiAob3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQpIHtcbiAgICBmbGFnT3ZlcnJpZGRlbkRlZmF1bHRzKERlZmF1bHRQcm9wcywgdXNlclByb3BzKTtcbiAgfVxuICAvLyBPdmVycmlkZSB0aGUgc2Vuc2libGUgZGVmYXVsdHMgd2l0aCB1c2VyIHByb3ZpZGVkIHByb3BzXG4gIGlmIChjb25jYXRBcnJheSkge1xuICAgIHJldHVybiBkZWVwbWVyZ2UoRGVmYXVsdFByb3BzLCB1c2VyUHJvcHMsIHtcbiAgICAgIGFycmF5TWVyZ2U6IChkZXN0aW5hdGlvbkFycmF5LCBzb3VyY2VBcnJheSkgPT4gIGRlc3RpbmF0aW9uQXJyYXkuY29uY2F0KHNvdXJjZUFycmF5KSxcbiAgICAgIGlzTWVyZ2VhYmxlT2JqZWN0OiBpc1BsYWluT2JqZWN0XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRlZXBtZXJnZShEZWZhdWx0UHJvcHMsIHVzZXJQcm9wcywge1xuICAgICAgYXJyYXlNZXJnZTogKF9kZXN0aW5hdGlvbkFycmF5LCBzb3VyY2VBcnJheSkgPT4gc291cmNlQXJyYXksIC8vIHVuZGVyc2NvcmUgYWxsb3dzIGFyZyB0byBiZSBpZ25vcmVkXG4gICAgICBpc01lcmdlYWJsZU9iamVjdDogaXNQbGFpbk9iamVjdFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50V2FybmluZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgLy8gU3R5bGUgdGhlIGxvZyBvdXRwdXRcbiAgbG9nLnByZWZpeFN0eWxlLmJvbGQgPSB0cnVlO1xuICBsb2cucHJlZml4U3R5bGUuZmcgPSAncmVkJztcbiAgbG9nLmVuYWJsZUNvbG9yKCk7XG4gIGxvZy53YXJuKCdBV1NfU09MVVRJT05TX0NPTlNUUlVDVFNfV0FSTklORzogJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgcmVzb3VyY2UgbmFtZSBpbiB0aGUgc3R5bGUgb2YgdGhlIENESyAoc3RyaW5nK2hhc2gpIC0gdGhpcyB2YWx1ZSBzaG91bGQgYmUgdXNlZCBmb3IgbG9naWNhbCBJRHMsIGJ1dFxuICogbm90IFBoeXNpY2FsIE5hbWVzLCBhcyBpdCB3aWxsIG5vdCBiZSBzdGF0aWMgd2l0aGluIGEgc2luZ2xlIHN0YWNrIGluc3RhbmNlIGxpZmV0aW1lLCBvciBpdCB3aWxsIG5vdCBiZSBkaWZmZXJlbnQgaW5cbiAqIGRpZmZlcmVudCBzdGFjayBpbnN0YW5jZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhcnRzIC0gdGhlIHZhcmlvdXMgc3RyaW5nIGNvbXBvbmVudHMgb2YgdGhlIG5hbWUgKGVnIC0gc3RhY2tOYW1lLCBzb2x1dGlvbnMgY29uc3RydWN0IElELCBMMiBjb25zdHJ1Y3QgSUQpXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4TGVuZ3RoIC0gdGhlIGxvbmdlc3Qgc3RyaW5nIHRoYXQgY2FuIGJlIHJldHVybmVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGEgc3RyaW5nIHdpdGggY29uY2F0ZW5hdGVkIHBhcnRzICh0cnVuY2F0ZWQgaWYgbmVjZXNzYXJ5KSArIGEgaGFzaCBvZiB0aGUgZnVsbCBjb25jYXRlbmF0ZWQgcGFydHNcbiAqXG4gKiBUaGlzIGlzIGJhc2VkIHVwb24gdGhpcyBkaXNjdXNzaW9uIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDI0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgcGFydHM6IHN0cmluZ1tdLFxuICBtYXhMZW5ndGg6IG51bWJlcixcbiAgcmFuZG9taXplOiBib29sZWFuID0gZmFsc2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IGhhc2hMZW5ndGggPSAxMjtcbiAgY29uc3QgcmFuZG9taXpvcjogc3RyaW5nID0gcmFuZG9taXplID8gKG5ldyBEYXRlKCkpLmdldFRpbWUoKS50b1N0cmluZygpIDogXCJcIjtcblxuICBjb25zdCBtYXhQYXJ0TGVuZ3RoID0gTWF0aC5mbG9vciggKG1heExlbmd0aCAtICBoYXNoTGVuZ3RoIC0gcmFuZG9taXpvci5sZW5ndGgpIC8gcGFydHMubGVuZ3RoKTtcblxuICBjb25zdCBzaGEyNTYgPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKTtcbiAgbGV0IGZpbmFsTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgIHNoYTI1Ni51cGRhdGUocGFydCk7XG4gICAgZmluYWxOYW1lICs9IHJlbW92ZU5vbkFscGhhbnVtZXJpYyhwYXJ0LnNsaWNlKDAsIG1heFBhcnRMZW5ndGgpKTtcbiAgfSk7XG5cbiAgY29uc3QgaGFzaCA9IHNoYTI1Ni5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgaGFzaExlbmd0aCk7XG4gIGZpbmFsTmFtZSArPSBoYXNoO1xuICBmaW5hbE5hbWUgKz0gcmFuZG9taXpvcjtcbiAgcmV0dXJuIGZpbmFsTmFtZS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHBoeXNpY2FsIHJlc291cmNlIG5hbWUgaW4gdGhlIHN0eWxlIG9mIHRoZSBDREsgKHN0cmluZytoYXNoKSAtIHRoaXMgdmFsdWUgaW5jb3Jwb3JhdGVzIFN0YWNrIElELFxuICogc28gaXQgd2lsbCByZW1haW4gc3RhdGljIGluIG11bHRpcGxlIHVwZGF0ZXMgb2YgYSBzaW5nbGUgc3RhY2ssIGJ1dCB3aWxsIGJlIGRpZmZlcmVudCBpbiBhIHNlcGFyYXRlIHN0YWNrIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXJ0cyAtIHRoZSB2YXJpb3VzIHN0cmluZyBjb21wb25lbnRzIG9mIHRoZSBuYW1lIChlZyAtIHN0YWNrTmFtZSwgc29sdXRpb25zIGNvbnN0cnVjdCBJRCwgTDIgY29uc3RydWN0IElEKVxuICogQHBhcmFtIHtudW1iZXJ9IG1heExlbmd0aCAtIHRoZSBsb25nZXN0IHN0cmluZyB0aGF0IGNhbiBiZSByZXR1cm5lZFxuICogQHJldHVybnMge3N0cmluZ30gLSBhIHN0cmluZyB3aXRoIGNvbmNhdGVuYXRlZCBwYXJ0cyAodHJ1bmNhdGVkIGlmIG5lY2Vzc2FyeSkgKyBhIGhhc2ggb2YgdGhlIGZ1bGwgY29uY2F0ZW5hdGVkIHBhcnRzXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQaHlzaWNhbE5hbWUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBwYXJ0czogc3RyaW5nW10sXG4gIG1heExlbmd0aDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgLy8gVGhlIHJlc3VsdCB3aWxsIGNvbnNpc3Qgb2Y6XG4gIC8vICAgIC1UaGUgcHJlZml4IC0gdW5hbHRlcmVkXG4gIC8vICAgIC1UaGUgcGFydHMgY29uY2F0ZW5hdGVkLCBidXQgcmVkdWNlZCBpbiBzaXplIHRvIG1lZXQgdGhlIG1heExlbmd0aCBsaW1pdCBmb3IgdGhlIG92ZXJhbGwgbmFtZVxuICAvLyAgICAtQSBoeXBoZW4gZGVsaW1pdGVyXG4gIC8vICAgIC1UaGUgR1VJRCBwb3J0aW9uIG9mIHRoZSBzdGFjayBhcm5cblxuICBjb25zdCBzdGFja0lkR3VpZExlbmd0aCA9IDM2O1xuICBjb25zdCBwcmVmaXhMZW5ndGggPSBwcmVmaXgubGVuZ3RoO1xuICBjb25zdCBtYXhQYXJ0c0xlbmd0aCA9IG1heExlbmd0aCAtIHByZWZpeExlbmd0aCAtIDEgLSBzdGFja0lkR3VpZExlbmd0aDsgLy8gMSBpcyB0aGUgaHlwaGVuXG5cbiAgLy8gRXh0cmFjdCB0aGUgU3RhY2sgSUQgR3VpZFxuICBjb25zdCB1bmlxdWVTdGFja0lkUGFydCA9IGNkay5Gbi5zZWxlY3QoMiwgY2RrLkZuLnNwbGl0KCcvJywgYCR7Y2RrLkF3cy5TVEFDS19JRH1gKSk7XG5cbiAgbGV0IGFsbFBhcnRzOiBzdHJpbmcgPSAnJztcblxuICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgYWxsUGFydHMgKz0gcGFydDtcbiAgfSk7XG5cbiAgaWYgKGFsbFBhcnRzLmxlbmd0aCA+IG1heFBhcnRzTGVuZ3RoKSB7XG4gICAgY29uc3Qgc3ViU3RyaW5nTGVuZ3RoID0gbWF4UGFydHNMZW5ndGggLyAyO1xuICAgIGFsbFBhcnRzID0gYWxsUGFydHMuc3Vic3RyaW5nKDAsIHN1YlN0cmluZ0xlbmd0aCkgKyBhbGxQYXJ0cy5zdWJzdHJpbmcoYWxsUGFydHMubGVuZ3RoIC0gc3ViU3RyaW5nTGVuZ3RoKTtcbiAgfVxuXG4gIGNvbnN0IGZpbmFsTmFtZSAgPSBwcmVmaXgudG9Mb3dlckNhc2UoKSArIGFsbFBhcnRzICsgJy0nICsgdW5pcXVlU3RhY2tJZFBhcnQ7XG4gIHJldHVybiBmaW5hbE5hbWU7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nLlxuICovXG5mdW5jdGlvbiByZW1vdmVOb25BbHBoYW51bWVyaWMoczogc3RyaW5nKSB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCAnJyk7XG59XG5cbi8qKlxuICogVGhlIENGTiBOQUcgc3VwcHJlc3MgcnVsZSBpbnRlcmZhY2VcbiAqIEBpbnRlcmZhY2UgQ2ZuTmFnU3VwcHJlc3NSdWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuTmFnU3VwcHJlc3NSdWxlIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBBZGRzIENGTiBOQUcgc3VwcHJlc3MgcnVsZXMgdG8gdGhlIENESyByZXNvdXJjZS5cbiAqIEBwYXJhbSByZXNvdXJjZSBUaGUgQ0RLIHJlc291cmNlXG4gKiBAcGFyYW0gcnVsZXMgVGhlIENGTiBOQUcgc3VwcHJlc3MgcnVsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZENmblN1cHByZXNzUnVsZXMocmVzb3VyY2U6IGNkay5SZXNvdXJjZSB8IGNkay5DZm5SZXNvdXJjZSwgcnVsZXM6IENmbk5hZ1N1cHByZXNzUnVsZVtdKSB7XG4gIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIGNkay5SZXNvdXJjZSkge1xuICAgIHJlc291cmNlID0gcmVzb3VyY2Uubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY2RrLkNmblJlc291cmNlO1xuICB9XG5cbiAgaWYgKHJlc291cmNlLmNmbk9wdGlvbnMubWV0YWRhdGE/LmNmbl9uYWc/LnJ1bGVzX3RvX3N1cHByZXNzKSB7XG4gICAgcmVzb3VyY2UuY2ZuT3B0aW9ucy5tZXRhZGF0YT8uY2ZuX25hZy5ydWxlc190b19zdXBwcmVzcy5wdXNoKC4uLnJ1bGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZXNvdXJjZS5hZGRNZXRhZGF0YSgnY2ZuX25hZycsIHtcbiAgICAgIHJ1bGVzX3RvX3N1cHByZXNzOiBydWxlc1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBDcmVhdGVzIHRoZSBwcm9wcyB0byBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIGEgQ0RLIEwyIGNvbnN0cnVjdCB3aXRoaW4gYSBTb2x1dGlvbnMgQ29uc3RydWN0XG4gKlxuICogQHBhcmFtIGRlZmF1bHRQcm9wcyBUaGUgZGVmYXVsdCBwcm9wcyB0byBiZSB1c2VkIGJ5IHRoZSBjb25zdHJ1Y3RcbiAqIEBwYXJhbSBjbGllbnRQcm9wcyBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCBpbiBmcm9tIHRoZSBjbGllbnQgaW4gdGhlIHByb3BzIG9iamVjdFxuICogQHBhcmFtIGNvbnN0cnVjdFByb3BzIE9wdGlvbmFsIHByb3BlcnRpZXMgcmVxdWlyZWQgYnkgdGhlIGNvbnN0cnVjdCBmb3IgdGhlIGNvbnN0cnVjdCB0byB3b3JrIChvdmVycmlkZSBhbnkgb3RoZXIgdmFsdWVzKVxuICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMgdG8gdXNlIC0gYWxsIHZhbHVlcyBwcmlvcml0aXplZDpcbiAqICAxKSBjb25zdHJ1Y3RQcm9wcyB2YWx1ZVxuICogIDIpIGNsaWVudFByb3BzIHZhbHVlXG4gKiAgMykgZGVmYXVsdFByb3BzIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zb2xpZGF0ZVByb3BzKGRlZmF1bHRQcm9wczogb2JqZWN0LCBjbGllbnRQcm9wcz86IG9iamVjdCwgY29uc3RydWN0UHJvcHM/OiBvYmplY3QsIGNvbmNhdEFycmF5OiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuICBsZXQgcmVzdWx0OiBvYmplY3QgPSBkZWZhdWx0UHJvcHM7XG5cbiAgaWYgKGNsaWVudFByb3BzKSB7XG4gICAgcmVzdWx0ID0gb3ZlcnJpZGVQcm9wcyhyZXN1bHQsIGNsaWVudFByb3BzLCBjb25jYXRBcnJheSk7XG4gIH1cblxuICBpZiAoY29uc3RydWN0UHJvcHMpIHtcbiAgICAvLyBTdXBwcmVzcyB3YXJuaW5ncyBmb3IgY29uc3RydWN0IHByb3BzIG92ZXJyaWRpbmcgZXZlcnl0aGluZyBlbHNlXG4gICAgcmVzdWx0ID0gb3ZlcnJpZGVQcm9wcyhyZXN1bHQsIGNvbnN0cnVjdFByb3BzLCBjb25jYXRBcnJheSwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogR2VuZXJhdGVzIGEgbmFtZSB1bmlxdWUgdG8gdGhpcyBsb2NhdGlvbiBpbiB0aGlzIHN0YWNrIHdpdGggdGhpcyBzdGFja25hbWUuIFRydW5jYXRlcyB0byB1bmRlciA2NCBjaGFyYWN0ZXJzIGlmIG5lZWRlZC5cbiAqICh3aWxsIGFsbG93IDIgY29waWVzIG9mIHRoZSBzdGFjayB3aXRoIGRpZmZlcmVudCBzdGFjayBuYW1lcywgYnV0IHdpbGwgY29sbGlkZSBpZiBib3RoIHN0YWNrcyBoYXZlIHRoZSBzYW1lIG5hbWUpXG4gKlxuICogQHBhcmFtIHNjb3BlIHRoZSBjb25zdHJ1Y3Qgd2l0aGluIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICogQHBhcmFtIHJlc291cmNlSWQgYW4gaWQgZm9yIHRoZSBjb25zdHJ1Y3QgYWJvdXQgdG8gYmUgY3JlYXRlZCB1bmRlciBzY29wZSAoZW1wdHkgc3RyaW5nIGlmIG5hbWUgaXMgZm9yIHNjb2VwKVxuICogQHJldHVybnMgYSB1bmlxdWUgbmFtZVxuICpcbiAqIE5vdGU6IFRoaXMgYXBwZWFycyB0byBvdmVybGFwIHdpdGggR2VuZXJhdGVSZXNvdXJjZU5hbWUgYWJvdmUgKEkgd3JvdGUgaXQgYmVmb3JlIG5vdGljaW5nIHRoYXRcbiAqIGZ1bmN0aW9uKS4gQXMgdGhpcyBvZmZsb2FkcyB0aGUgbG9naWMgdG8gdGhlIENESywgSSdtIGxlYXZpbmcgdGhpcyBoZXJlIGJ1dCBzb21lb25lIG1heSB3YW50IHRvXG4gKiBibGVuZCB0aGVzZSByb3V0aW5lcyBpbiB0aGUgZnV0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVOYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIHJlc291cmNlSWQ6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICBjb25zdCBuYW1lID0gcmVzb3VyY2VJZCArIGNkay5OYW1lcy51bmlxdWVJZChzY29wZSk7XG4gIGlmIChuYW1lLmxlbmd0aCA+IDY0KSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIDMyKSArIG5hbWUuc3Vic3RyaW5nKG5hbWUubGVuZ3RoIC0gMzIpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDaGVja0xpc3RWYWx1ZXMoYWxsb3dlZFBlcm1pc3Npb25zOiBzdHJpbmdbXSwgc3VibWl0dGVkVmFsdWVzOiBzdHJpbmdbXSwgdmFsdWVUeXBlOiBzdHJpbmcpIHtcbiAgc3VibWl0dGVkVmFsdWVzLmZvckVhY2goKHN1Ym1pdHRlZFZhbHVlKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkUGVybWlzc2lvbnMuaW5jbHVkZXMoc3VibWl0dGVkVmFsdWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCAke3ZhbHVlVHlwZX0gc3VibWl0dGVkIC0gJHtzdWJtaXR0ZWRWYWx1ZX1gKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59Il19
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUVIOzs7R0FHRztBQUVILHVDQUF1QztBQUN2Qyx5RUFBb0U7QUFDcEUsOEJBQThCO0FBQzlCLGlDQUFpQztBQUNqQyxtQ0FBbUM7QUFDbkMsaURBQWlEO0FBR3BDLFFBQUEscUNBQXFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbkUsUUFBQSxvQ0FBb0MsR0FBRyxZQUFZLENBQUM7QUFFakUsU0FBUyxRQUFRLENBQUMsR0FBVztJQUMzQixPQUFPLEdBQUcsSUFBSSxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtXQUNwQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssaUJBQWlCLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLENBQVM7SUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUM3QixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCw4QkFBOEI7SUFDOUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUM5QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsNEJBQTRCO0lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDNUIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCx5REFBeUQ7SUFDekQsSUFBSSxJQUFJLENB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RUFBRSxJQUFJLENBQUMsQ0FBQztLQUNuRTtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFiRCw0Q0FhQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBZ0IsRUFBRSxhQUFxQixFQUFFO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBTkQsb0NBTUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxrQkFBNEIsRUFBRSxlQUF5QixFQUFFLFNBQWlCO0lBQ3hHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sS0FBSyxDQUFDLFdBQVcsU0FBUyxnQkFBZ0IsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQU5ELDBDQU1DO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsS0FBMEIsRUFBRSxZQUFxQjtJQUN2RixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDdkIsT0FBTyxZQUFZLENBQUM7S0FDckI7U0FBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBTkQsMERBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKlxuICogIFRoZSBmdW5jdGlvbnMgZm91bmQgaGVyZSBpbiB0aGUgY29yZSBsaWJyYXJ5IGFyZSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBjYW4gYmUgY2hhbmdlZFxuICogIG9yIHJlbW92ZWQgb3V0c2lkZSBvZiBhIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCBhZ2FpbnN0IGNhbGxpbmcgdGhlbSBkaXJlY3RseSBmcm9tIGNsaWVudCBjb2RlLlxuICovXG5cbmltcG9ydCAqIGFzIGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHsgZmxhZ092ZXJyaWRkZW5EZWZhdWx0cyB9IGZyb20gJy4vb3ZlcnJpZGUtd2FybmluZy1zZXJ2aWNlJztcbmltcG9ydCAqIGFzIGxvZyBmcm9tICducG1sb2cnO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNvbnN0IENPTU1FUkNJQUxfUkVHSU9OX0xBTUJEQV9OT0RFX1JVTlRJTUUgPSBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWDtcbmV4cG9ydCBjb25zdCBDT01NRVJDSUFMX1JFR0lPTl9MQU1CREFfTk9ERV9TVFJJTkcgPSBcIm5vZGVqczIwLnhcIjtcblxuZnVuY3Rpb24gaXNPYmplY3QodmFsOiBvYmplY3QpIHtcbiAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnXG4gICAgICAgICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvOiBvYmplY3QpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobykgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc09iamVjdChvKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcbiAgY29uc3QgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gIGlmICh0eXBlb2YgY3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcbiAgY29uc3QgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuICBpZiAoaXNPYmplY3QocHJvdCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG4gIGlmIChwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJyaWRlUHJvcHMoRGVmYXVsdFByb3BzOiBvYmplY3QsIHVzZXJQcm9wczogb2JqZWN0LCBjb25jYXRBcnJheTogYm9vbGVhbiA9IGZhbHNlLCBzdXBwcmVzc1dhcm5pbmdzPzogYm9vbGVhbik6IGFueSB7XG4gIC8vIE5vdGlmeSB0aGUgdXNlciB2aWEgY29uc29sZSBvdXRwdXQgaWYgZGVmYXVsdHMgYXJlIG92ZXJyaWRkZW5cblxuICBsZXQgb3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQ6IGJvb2xlYW47XG4gIGlmICgocHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPT09ICdmYWxzZScpIHx8IChzdXBwcmVzc1dhcm5pbmdzID09PSB0cnVlKSkge1xuICAgIG92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gZmFsc2U7XG4gIH0gZWxzZSAge1xuICAgIG92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gdHJ1ZTtcbiAgfVxuICBpZiAob3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQpIHtcbiAgICBmbGFnT3ZlcnJpZGRlbkRlZmF1bHRzKERlZmF1bHRQcm9wcywgdXNlclByb3BzKTtcbiAgfVxuICAvLyBPdmVycmlkZSB0aGUgc2Vuc2libGUgZGVmYXVsdHMgd2l0aCB1c2VyIHByb3ZpZGVkIHByb3BzXG4gIGlmIChjb25jYXRBcnJheSkge1xuICAgIHJldHVybiBkZWVwbWVyZ2UoRGVmYXVsdFByb3BzLCB1c2VyUHJvcHMsIHtcbiAgICAgIGFycmF5TWVyZ2U6IChkZXN0aW5hdGlvbkFycmF5LCBzb3VyY2VBcnJheSkgPT4gIGRlc3RpbmF0aW9uQXJyYXkuY29uY2F0KHNvdXJjZUFycmF5KSxcbiAgICAgIGlzTWVyZ2VhYmxlT2JqZWN0OiBpc1BsYWluT2JqZWN0XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRlZXBtZXJnZShEZWZhdWx0UHJvcHMsIHVzZXJQcm9wcywge1xuICAgICAgYXJyYXlNZXJnZTogKF9kZXN0aW5hdGlvbkFycmF5LCBzb3VyY2VBcnJheSkgPT4gc291cmNlQXJyYXksIC8vIHVuZGVyc2NvcmUgYWxsb3dzIGFyZyB0byBiZSBpZ25vcmVkXG4gICAgICBpc01lcmdlYWJsZU9iamVjdDogaXNQbGFpbk9iamVjdFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50V2FybmluZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgLy8gU3R5bGUgdGhlIGxvZyBvdXRwdXRcbiAgbG9nLnByZWZpeFN0eWxlLmJvbGQgPSB0cnVlO1xuICBsb2cucHJlZml4U3R5bGUuZmcgPSAncmVkJztcbiAgbG9nLmVuYWJsZUNvbG9yKCk7XG4gIGxvZy53YXJuKCdBV1NfU09MVVRJT05TX0NPTlNUUlVDVFNfV0FSTklORzogJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgcmVzb3VyY2UgbmFtZSBpbiB0aGUgc3R5bGUgb2YgdGhlIENESyAoc3RyaW5nK2hhc2gpIC0gdGhpcyB2YWx1ZSBzaG91bGQgYmUgdXNlZCBmb3IgbG9naWNhbCBJRHMsIGJ1dFxuICogbm90IFBoeXNpY2FsIE5hbWVzLCBhcyBpdCB3aWxsIG5vdCBiZSBzdGF0aWMgd2l0aGluIGEgc2luZ2xlIHN0YWNrIGluc3RhbmNlIGxpZmV0aW1lLCBvciBpdCB3aWxsIG5vdCBiZSBkaWZmZXJlbnQgaW5cbiAqIGRpZmZlcmVudCBzdGFjayBpbnN0YW5jZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhcnRzIC0gdGhlIHZhcmlvdXMgc3RyaW5nIGNvbXBvbmVudHMgb2YgdGhlIG5hbWUgKGVnIC0gc3RhY2tOYW1lLCBzb2x1dGlvbnMgY29uc3RydWN0IElELCBMMiBjb25zdHJ1Y3QgSUQpXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4TGVuZ3RoIC0gdGhlIGxvbmdlc3Qgc3RyaW5nIHRoYXQgY2FuIGJlIHJldHVybmVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGEgc3RyaW5nIHdpdGggY29uY2F0ZW5hdGVkIHBhcnRzICh0cnVuY2F0ZWQgaWYgbmVjZXNzYXJ5KSArIGEgaGFzaCBvZiB0aGUgZnVsbCBjb25jYXRlbmF0ZWQgcGFydHNcbiAqXG4gKiBUaGlzIGlzIGJhc2VkIHVwb24gdGhpcyBkaXNjdXNzaW9uIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDI0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgcGFydHM6IHN0cmluZ1tdLFxuICBtYXhMZW5ndGg6IG51bWJlcixcbiAgcmFuZG9taXplOiBib29sZWFuID0gZmFsc2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IGhhc2hMZW5ndGggPSAxMjtcbiAgY29uc3QgcmFuZG9taXpvcjogc3RyaW5nID0gcmFuZG9taXplID8gKG5ldyBEYXRlKCkpLmdldFRpbWUoKS50b1N0cmluZygpIDogXCJcIjtcblxuICBjb25zdCBtYXhQYXJ0TGVuZ3RoID0gTWF0aC5mbG9vciggKG1heExlbmd0aCAtICBoYXNoTGVuZ3RoIC0gcmFuZG9taXpvci5sZW5ndGgpIC8gcGFydHMubGVuZ3RoKTtcblxuICBjb25zdCBzaGEyNTYgPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKTtcbiAgbGV0IGZpbmFsTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgIHNoYTI1Ni51cGRhdGUocGFydCk7XG4gICAgZmluYWxOYW1lICs9IHJlbW92ZU5vbkFscGhhbnVtZXJpYyhwYXJ0LnNsaWNlKDAsIG1heFBhcnRMZW5ndGgpKTtcbiAgfSk7XG5cbiAgY29uc3QgaGFzaCA9IHNoYTI1Ni5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgaGFzaExlbmd0aCk7XG4gIGZpbmFsTmFtZSArPSBoYXNoO1xuICBmaW5hbE5hbWUgKz0gcmFuZG9taXpvcjtcbiAgcmV0dXJuIGZpbmFsTmFtZS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHBoeXNpY2FsIHJlc291cmNlIG5hbWUgaW4gdGhlIHN0eWxlIG9mIHRoZSBDREsgKHN0cmluZytoYXNoKSAtIHRoaXMgdmFsdWUgaW5jb3Jwb3JhdGVzIFN0YWNrIElELFxuICogc28gaXQgd2lsbCByZW1haW4gc3RhdGljIGluIG11bHRpcGxlIHVwZGF0ZXMgb2YgYSBzaW5nbGUgc3RhY2ssIGJ1dCB3aWxsIGJlIGRpZmZlcmVudCBpbiBhIHNlcGFyYXRlIHN0YWNrIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXJ0cyAtIHRoZSB2YXJpb3VzIHN0cmluZyBjb21wb25lbnRzIG9mIHRoZSBuYW1lIChlZyAtIHN0YWNrTmFtZSwgc29sdXRpb25zIGNvbnN0cnVjdCBJRCwgTDIgY29uc3RydWN0IElEKVxuICogQHBhcmFtIHtudW1iZXJ9IG1heExlbmd0aCAtIHRoZSBsb25nZXN0IHN0cmluZyB0aGF0IGNhbiBiZSByZXR1cm5lZFxuICogQHJldHVybnMge3N0cmluZ30gLSBhIHN0cmluZyB3aXRoIGNvbmNhdGVuYXRlZCBwYXJ0cyAodHJ1bmNhdGVkIGlmIG5lY2Vzc2FyeSkgKyBhIGhhc2ggb2YgdGhlIGZ1bGwgY29uY2F0ZW5hdGVkIHBhcnRzXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQaHlzaWNhbE5hbWUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBwYXJ0czogc3RyaW5nW10sXG4gIG1heExlbmd0aDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgLy8gVGhlIHJlc3VsdCB3aWxsIGNvbnNpc3Qgb2Y6XG4gIC8vICAgIC1UaGUgcHJlZml4IC0gdW5hbHRlcmVkXG4gIC8vICAgIC1UaGUgcGFydHMgY29uY2F0ZW5hdGVkLCBidXQgcmVkdWNlZCBpbiBzaXplIHRvIG1lZXQgdGhlIG1heExlbmd0aCBsaW1pdCBmb3IgdGhlIG92ZXJhbGwgbmFtZVxuICAvLyAgICAtQSBoeXBoZW4gZGVsaW1pdGVyXG4gIC8vICAgIC1UaGUgR1VJRCBwb3J0aW9uIG9mIHRoZSBzdGFjayBhcm5cblxuICBjb25zdCBzdGFja0lkR3VpZExlbmd0aCA9IDM2O1xuICBjb25zdCBwcmVmaXhMZW5ndGggPSBwcmVmaXgubGVuZ3RoO1xuICBjb25zdCBtYXhQYXJ0c0xlbmd0aCA9IG1heExlbmd0aCAtIHByZWZpeExlbmd0aCAtIDEgLSBzdGFja0lkR3VpZExlbmd0aDsgLy8gMSBpcyB0aGUgaHlwaGVuXG5cbiAgLy8gRXh0cmFjdCB0aGUgU3RhY2sgSUQgR3VpZFxuICBjb25zdCB1bmlxdWVTdGFja0lkUGFydCA9IGNkay5Gbi5zZWxlY3QoMiwgY2RrLkZuLnNwbGl0KCcvJywgYCR7Y2RrLkF3cy5TVEFDS19JRH1gKSk7XG5cbiAgbGV0IGFsbFBhcnRzOiBzdHJpbmcgPSAnJztcblxuICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgYWxsUGFydHMgKz0gcGFydDtcbiAgfSk7XG5cbiAgaWYgKGFsbFBhcnRzLmxlbmd0aCA+IG1heFBhcnRzTGVuZ3RoKSB7XG4gICAgY29uc3Qgc3ViU3RyaW5nTGVuZ3RoID0gbWF4UGFydHNMZW5ndGggLyAyO1xuICAgIGFsbFBhcnRzID0gYWxsUGFydHMuc3Vic3RyaW5nKDAsIHN1YlN0cmluZ0xlbmd0aCkgKyBhbGxQYXJ0cy5zdWJzdHJpbmcoYWxsUGFydHMubGVuZ3RoIC0gc3ViU3RyaW5nTGVuZ3RoKTtcbiAgfVxuXG4gIGNvbnN0IGZpbmFsTmFtZSAgPSBwcmVmaXgudG9Mb3dlckNhc2UoKSArIGFsbFBhcnRzICsgJy0nICsgdW5pcXVlU3RhY2tJZFBhcnQ7XG4gIHJldHVybiBmaW5hbE5hbWU7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nLlxuICovXG5mdW5jdGlvbiByZW1vdmVOb25BbHBoYW51bWVyaWMoczogc3RyaW5nKSB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCAnJyk7XG59XG5cbi8qKlxuICogVGhlIENGTiBOQUcgc3VwcHJlc3MgcnVsZSBpbnRlcmZhY2VcbiAqIEBpbnRlcmZhY2UgQ2ZuTmFnU3VwcHJlc3NSdWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuTmFnU3VwcHJlc3NSdWxlIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBBZGRzIENGTiBOQUcgc3VwcHJlc3MgcnVsZXMgdG8gdGhlIENESyByZXNvdXJjZS5cbiAqIEBwYXJhbSByZXNvdXJjZSBUaGUgQ0RLIHJlc291cmNlXG4gKiBAcGFyYW0gcnVsZXMgVGhlIENGTiBOQUcgc3VwcHJlc3MgcnVsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZENmblN1cHByZXNzUnVsZXMocmVzb3VyY2U6IGNkay5SZXNvdXJjZSB8IGNkay5DZm5SZXNvdXJjZSwgcnVsZXM6IENmbk5hZ1N1cHByZXNzUnVsZVtdKSB7XG4gIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIGNkay5SZXNvdXJjZSkge1xuICAgIHJlc291cmNlID0gcmVzb3VyY2Uubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY2RrLkNmblJlc291cmNlO1xuICB9XG5cbiAgaWYgKHJlc291cmNlLmNmbk9wdGlvbnMubWV0YWRhdGE/LmNmbl9uYWc/LnJ1bGVzX3RvX3N1cHByZXNzKSB7XG4gICAgcmVzb3VyY2UuY2ZuT3B0aW9ucy5tZXRhZGF0YT8uY2ZuX25hZy5ydWxlc190b19zdXBwcmVzcy5wdXNoKC4uLnJ1bGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZXNvdXJjZS5hZGRNZXRhZGF0YSgnY2ZuX25hZycsIHtcbiAgICAgIHJ1bGVzX3RvX3N1cHByZXNzOiBydWxlc1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBDcmVhdGVzIHRoZSBwcm9wcyB0byBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIGEgQ0RLIEwyIGNvbnN0cnVjdCB3aXRoaW4gYSBTb2x1dGlvbnMgQ29uc3RydWN0XG4gKlxuICogQHBhcmFtIGRlZmF1bHRQcm9wcyBUaGUgZGVmYXVsdCBwcm9wcyB0byBiZSB1c2VkIGJ5IHRoZSBjb25zdHJ1Y3RcbiAqIEBwYXJhbSBjbGllbnRQcm9wcyBPcHRpb25hbCBwcm9wZXJ0aWVzIHBhc3NlZCBpbiBmcm9tIHRoZSBjbGllbnQgaW4gdGhlIHByb3BzIG9iamVjdFxuICogQHBhcmFtIGNvbnN0cnVjdFByb3BzIE9wdGlvbmFsIHByb3BlcnRpZXMgcmVxdWlyZWQgYnkgdGhlIGNvbnN0cnVjdCBmb3IgdGhlIGNvbnN0cnVjdCB0byB3b3JrIChvdmVycmlkZSBhbnkgb3RoZXIgdmFsdWVzKVxuICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMgdG8gdXNlIC0gYWxsIHZhbHVlcyBwcmlvcml0aXplZDpcbiAqICAxKSBjb25zdHJ1Y3RQcm9wcyB2YWx1ZVxuICogIDIpIGNsaWVudFByb3BzIHZhbHVlXG4gKiAgMykgZGVmYXVsdFByb3BzIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zb2xpZGF0ZVByb3BzKGRlZmF1bHRQcm9wczogb2JqZWN0LCBjbGllbnRQcm9wcz86IG9iamVjdCwgY29uc3RydWN0UHJvcHM/OiBvYmplY3QsIGNvbmNhdEFycmF5OiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuICBsZXQgcmVzdWx0OiBvYmplY3QgPSBkZWZhdWx0UHJvcHM7XG5cbiAgaWYgKGNsaWVudFByb3BzKSB7XG4gICAgcmVzdWx0ID0gb3ZlcnJpZGVQcm9wcyhyZXN1bHQsIGNsaWVudFByb3BzLCBjb25jYXRBcnJheSk7XG4gIH1cblxuICBpZiAoY29uc3RydWN0UHJvcHMpIHtcbiAgICAvLyBTdXBwcmVzcyB3YXJuaW5ncyBmb3IgY29uc3RydWN0IHByb3BzIG92ZXJyaWRpbmcgZXZlcnl0aGluZyBlbHNlXG4gICAgcmVzdWx0ID0gb3ZlcnJpZGVQcm9wcyhyZXN1bHQsIGNvbnN0cnVjdFByb3BzLCBjb25jYXRBcnJheSwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogR2VuZXJhdGVzIGEgbmFtZSB1bmlxdWUgdG8gdGhpcyBsb2NhdGlvbiBpbiB0aGlzIHN0YWNrIHdpdGggdGhpcyBzdGFja25hbWUuIFRydW5jYXRlcyB0byB1bmRlciA2NCBjaGFyYWN0ZXJzIGlmIG5lZWRlZC5cbiAqICh3aWxsIGFsbG93IDIgY29waWVzIG9mIHRoZSBzdGFjayB3aXRoIGRpZmZlcmVudCBzdGFjayBuYW1lcywgYnV0IHdpbGwgY29sbGlkZSBpZiBib3RoIHN0YWNrcyBoYXZlIHRoZSBzYW1lIG5hbWUpXG4gKlxuICogQHBhcmFtIHNjb3BlIHRoZSBjb25zdHJ1Y3Qgd2l0aGluIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICogQHBhcmFtIHJlc291cmNlSWQgYW4gaWQgZm9yIHRoZSBjb25zdHJ1Y3QgYWJvdXQgdG8gYmUgY3JlYXRlZCB1bmRlciBzY29wZSAoZW1wdHkgc3RyaW5nIGlmIG5hbWUgaXMgZm9yIHNjb2VwKVxuICogQHJldHVybnMgYSB1bmlxdWUgbmFtZVxuICpcbiAqIE5vdGU6IFRoaXMgYXBwZWFycyB0byBvdmVybGFwIHdpdGggR2VuZXJhdGVSZXNvdXJjZU5hbWUgYWJvdmUgKEkgd3JvdGUgaXQgYmVmb3JlIG5vdGljaW5nIHRoYXRcbiAqIGZ1bmN0aW9uKS4gQXMgdGhpcyBvZmZsb2FkcyB0aGUgbG9naWMgdG8gdGhlIENESywgSSdtIGxlYXZpbmcgdGhpcyBoZXJlIGJ1dCBzb21lb25lIG1heSB3YW50IHRvXG4gKiBibGVuZCB0aGVzZSByb3V0aW5lcyBpbiB0aGUgZnV0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVOYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIHJlc291cmNlSWQ6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICBjb25zdCBuYW1lID0gcmVzb3VyY2VJZCArIGNkay5OYW1lcy51bmlxdWVJZChzY29wZSk7XG4gIGlmIChuYW1lLmxlbmd0aCA+IDY0KSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIDMyKSArIG5hbWUuc3Vic3RyaW5nKG5hbWUubGVuZ3RoIC0gMzIpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDaGVja0xpc3RWYWx1ZXMoYWxsb3dlZFBlcm1pc3Npb25zOiBzdHJpbmdbXSwgc3VibWl0dGVkVmFsdWVzOiBzdHJpbmdbXSwgdmFsdWVUeXBlOiBzdHJpbmcpIHtcbiAgc3VibWl0dGVkVmFsdWVzLmZvckVhY2goKHN1Ym1pdHRlZFZhbHVlKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkUGVybWlzc2lvbnMuaW5jbHVkZXMoc3VibWl0dGVkVmFsdWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCAke3ZhbHVlVHlwZX0gc3VibWl0dGVkIC0gJHtzdWJtaXR0ZWRWYWx1ZX1gKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59Il19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-solutions-constructs/core",
3
- "version": "2.59.0",
3
+ "version": "2.61.0",
4
4
  "description": "Core CDK Construct for patterns library",
5
5
  "main": "index.js",
6
6
  "types": "index.ts",
@@ -52,7 +52,7 @@
52
52
  }
53
53
  },
54
54
  "dependencies": {
55
- "@aws-cdk/integ-tests-alpha": "2.143.0-alpha.0",
55
+ "@aws-cdk/integ-tests-alpha": "2.147.3-alpha.0",
56
56
  "deep-diff": "^1.0.2",
57
57
  "deepmerge": "^4.0.0",
58
58
  "npmlog": "^7.0.0",
@@ -65,7 +65,7 @@
65
65
  "@types/jest": "^27.4.0",
66
66
  "@types/node": "^10.3.0",
67
67
  "constructs": "^10.0.0",
68
- "aws-cdk-lib": "2.143.0"
68
+ "aws-cdk-lib": "2.147.3"
69
69
  },
70
70
  "jest": {
71
71
  "moduleFileExtensions": [
@@ -88,6 +88,6 @@
88
88
  ],
89
89
  "peerDependencies": {
90
90
  "constructs": "^10.0.0",
91
- "aws-cdk-lib": "^2.143.0"
91
+ "aws-cdk-lib": "^2.147.3"
92
92
  }
93
93
  }
@@ -453,7 +453,7 @@ function CreateTestLoadBalancer(stack, vpc) {
453
453
  function CreateTestFunction(stack, id) {
454
454
  return new lambda.Function(stack, id, {
455
455
  code: lambda.Code.fromAsset(`${__dirname}/lambda`),
456
- runtime: lambda.Runtime.NODEJS_16_X,
456
+ runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
457
457
  handler: "index.handler",
458
458
  });
459
459
  }
@@ -472,4 +472,4 @@ function CreateTestListener(stack, id, alb) {
472
472
  protocol: elb.ApplicationProtocol.HTTP
473
473
  });
474
474
  }
475
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWhlbHBlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYWxiLWhlbHBlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCw2Q0FBb0M7QUFDcEMsOERBQThEO0FBQzlELGlEQUFpRDtBQUNqRCxxQ0FBcUM7QUFHckMsdURBQWtEO0FBRWxELElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7SUFDNUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsWUFBWTtJQUNaLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ25DLGVBQWUsRUFBRSxRQUFRLENBQUMsNEJBQTRCLEVBQUU7S0FDekQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO1FBQ25GLEdBQUc7UUFDSCxjQUFjLEVBQUUsSUFBSTtRQUNwQixnQkFBZ0IsRUFBRSxhQUFhO0tBQ2hDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUNoQyxHQUFHO1FBQ0gsU0FBUyxFQUFFLElBQUk7UUFDZix1QkFBdUIsRUFBRSxvQkFBb0I7S0FDOUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLDJDQUEyQyxFQUFFO1FBQzFFLElBQUksRUFBRSxhQUFhO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtJQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRTtRQUM1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UUFDbEQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztRQUNuQyxPQUFPLEVBQUUsZUFBZTtLQUN6QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxLQUFZLEVBQUUsRUFBVSxFQUFFLEdBQWE7SUFDdkUsTUFBTSw0QkFBNEIsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUU7UUFDeEYsWUFBWSxFQUFFLEdBQUc7UUFDakIsa0JBQWtCLEVBQUUsU0FBUztRQUM3QixnQkFBZ0IsRUFBRSx5REFBeUQ7UUFDM0UsZUFBZSxFQUFFLFFBQVE7S0FDMUIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyw0QkFBNEIsQ0FBQyxPQUFPLENBQUM7QUFDOUMsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsS0FBWSxFQUFFLEVBQVUsRUFBRSxHQUFnQztJQUNwRixPQUFPLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDNUMsWUFBWSxFQUFFLEdBQUc7UUFDakIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJO0tBQ3ZDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVsYiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcblxudGVzdCgnVGVzdCBPYnRhaW5BbGIgd2l0aCBleGlzdGluZyBBTEInLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB2cGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogZGVmYXVsdHMuRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBjb25zdCBleGlzdGluZ0xvYWRCYWxhbmNlciA9IG5ldyBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIoc3RhY2ssICdsb2FkLWJhbGFuY2VyJywge1xuICAgIHZwYyxcbiAgICBpbnRlcm5ldEZhY2luZzogdHJ1ZSxcbiAgICBsb2FkQmFsYW5jZXJOYW1lOiAndW5pcXVlLW5hbWUnXG4gIH0pO1xuXG4gIGRlZmF1bHRzLk9idGFpbkFsYihzdGFjaywgJ3Rlc3QnLCB7XG4gICAgdnBjLFxuICAgIHB1YmxpY0FwaTogdHJ1ZSxcbiAgICBleGlzdGluZ0xvYWRCYWxhbmNlck9iajogZXhpc3RpbmdMb2FkQmFsYW5jZXJcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXInLCB7XG4gICAgTmFtZTogXCJ1bmlxdWUtbmFtZVwiLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IE9idGFpbkFsYiBmb3IgbmV3IEFMQiB3aXRoIHByb3ZpZGVkIHByb3BzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuICAgIGVudjogeyBhY2NvdW50OiBcIjEyMzQ1Njc4OTAxMlwiLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gIH0pO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IGRlZmF1bHRzLkRlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgZGVmYXVsdHMuT2J0YWluQWxiKHN0YWNrLCAndGVzdCcsIHtcbiAgICB2cGMsXG4gICAgcHVibGljQXBpOiB0cnVlLFxuICAgIGxvYWRCYWxhbmNlclByb3BzOiB7XG4gICAgICBsb2FkQmFsYW5jZXJOYW1lOiAnbmV3LWxvYWRiYWxhbmNlcicsXG4gICAgICB2cGMsXG4gICAgICBpbnRlcm5ldEZhY2luZzogdHJ1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXInLCB7XG4gICAgTmFtZTogXCJuZXctbG9hZGJhbGFuY2VyXCIsXG4gICAgU2NoZW1lOiBcImludGVybmV0LWZhY2luZ1wiLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IE9idGFpbkFsYiBmb3IgbmV3IEFMQiB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG4gICAgZW52OiB7IGFjY291bnQ6IFwiMTIzNDU2Nzg5MDEyXCIsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgfSk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB2cGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogZGVmYXVsdHMuRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBkZWZhdWx0cy5PYnRhaW5BbGIoc3RhY2ssICd0ZXN0Jywge1xuICAgIHZwYyxcbiAgICBwdWJsaWNBcGk6IGZhbHNlXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyJywge1xuICAgIFNjaGVtZTogXCJpbnRlcm5hbFwiLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IHdpdGggY3VzdG9tIGxvZ2dpbmcgYnVja2V0IHByb3BzJywgKCkgPT4ge1xuICAvLyBDcmVhdGluZyBBTEIgbG9nZ2luZyByZXF1aXJlcyBhIHJlZ2lvbiBhbmQgYWNjb3VudCAoYnV0XG4gIC8vIHRoZXNlIGNhbiBiZSBmYWtlIGluIHVuaXQgdGVzdHMpXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG4gICAgZW52OiB7IGFjY291bnQ6IFwiMTIzNDU2Nzg5MDEyXCIsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgfSk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB2cGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogZGVmYXVsdHMuRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBjb25zdCB0ZXN0TmFtZSA9ICd0ZXN0LW5hbWUnO1xuXG4gIGRlZmF1bHRzLk9idGFpbkFsYihzdGFjaywgJ3Rlc3QnLCB7XG4gICAgdnBjLFxuICAgIHB1YmxpY0FwaTogZmFsc2UsXG4gICAgbG9nQWNjZXNzTG9nczogdHJ1ZSxcbiAgICBsb2dnaW5nQnVja2V0UHJvcHM6IHtcbiAgICAgIGJ1Y2tldE5hbWU6IHRlc3ROYW1lXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgQnVja2V0TmFtZTogdGVzdE5hbWVcbiAgfSk7XG59KTtcblxudGVzdCgnVGVzdCB3aXRoIG5vIGxvZ2dpbmcnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB2cGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogZGVmYXVsdHMuRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBkZWZhdWx0cy5PYnRhaW5BbGIoc3RhY2ssICd0ZXN0Jywge1xuICAgIHZwYyxcbiAgICBwdWJsaWNBcGk6IGZhbHNlLFxuICAgIGxvZ0FjY2Vzc0xvZ3M6IGZhbHNlXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIDApO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkIHNpbmdsZSBsYW1iZGEgdGFyZ2V0IGdyb3VwIHdpdGggbm8gY3VzdG9taXphdGlvbicsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAvLyBTZXQgdXAgdGVzdCBmcmFtZXdvcmsgaW5kZXBlbmRlbnQgb2Ygb3VyIGNvZGUgZm9yIHVuaXQgdGVzdGluZ1xuICBjb25zdCB0ZXN0RnVuY3Rpb24gPSBDcmVhdGVUZXN0RnVuY3Rpb24oc3RhY2ssICd0ZXN0LWZ1bmN0aW9uJyk7XG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuICBjb25zdCB0ZXN0TGlzdGVuZXIgPSBDcmVhdGVUZXN0TGlzdGVuZXIoc3RhY2ssICd0ZXN0LWxpc3RlbmVyJywgdGVzdEFsYik7XG5cbiAgLy8gVGhpcyBpcyB0aGUgY29kZSB3ZSdyZSB0ZXN0aW5nXG4gIGRlZmF1bHRzLkFkZExhbWJkYVRhcmdldChcbiAgICBzdGFjayxcbiAgICAndGVzdC1sYW1iZGEtdGFyZ2V0JyxcbiAgICB0ZXN0TGlzdGVuZXIsXG4gICAgdGVzdEZ1bmN0aW9uLFxuICApO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXInLCB7XG4gICAgRGVmYXVsdEFjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgVGFyZ2V0R3JvdXBBcm46IHtcbiAgICAgICAgICBSZWY6IFwidGVzdGxhbWJkYXRhcmdldHRnN0U1QzMyRjRcIlxuICAgICAgICB9LFxuICAgICAgICBUeXBlOiBcImZvcndhcmRcIlxuICAgICAgfVxuICAgIF0sXG4gIH0pO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXAnLCB7XG4gICAgVGFyZ2V0VHlwZTogXCJsYW1iZGFcIixcbiAgfSk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGFkZCBzaW5nbGUgbGFtYmRhIHRhcmdldCBncm91cCB3aXRoIHRhcmdldCBncm91cCBwcm9wcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAvLyBTZXQgdXAgdGVzdCBmcmFtZXdvcmsgaW5kZXBlbmRlbnQgb2Ygb3VyIGNvZGUgZm9yIHVuaXQgdGVzdGluZ1xuICBjb25zdCB0ZXN0RnVuY3Rpb24gPSBDcmVhdGVUZXN0RnVuY3Rpb24oc3RhY2ssICd0ZXN0LWZ1bmN0aW9uJyk7XG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuICBjb25zdCB0ZXN0TGlzdGVuZXIgPSBDcmVhdGVUZXN0TGlzdGVuZXIoc3RhY2ssICd0ZXN0LWxpc3RlbmVyJywgdGVzdEFsYik7XG4gIGNvbnN0IHRhcmdldEdyb3VwTmFtZSA9ICd0ZXN0LWdyb3VwJztcblxuICAvLyBUaGlzIGlzIHRoZSBjb2RlIHdlJ3JlIHRlc3RpbmdcbiAgZGVmYXVsdHMuQWRkTGFtYmRhVGFyZ2V0KFxuICAgIHN0YWNrLFxuICAgICd0ZXN0LWxhbWJkYS10YXJnZXQnLFxuICAgIHRlc3RMaXN0ZW5lcixcbiAgICB0ZXN0RnVuY3Rpb24sXG4gICAgdW5kZWZpbmVkLFxuICAgIHsgdGFyZ2V0R3JvdXBOYW1lIH0sXG4gICk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cCcsIHtcbiAgICBUYXJnZXRUeXBlOiBcImxhbWJkYVwiLFxuICAgIE5hbWU6IHRhcmdldEdyb3VwTmFtZSxcbiAgfSk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGFkZCBydWxlIHByb3BzIGZvciBzZWNvbmQgbGFtYmRhIHRhcmdldCBncm91cCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAvLyBTZXQgdXAgdGVzdCBmcmFtZXdvcmsgaW5kZXBlbmRlbnQgb2Ygb3VyIGNvZGUgZm9yIHVuaXQgdGVzdGluZ1xuICBjb25zdCB0ZXN0RnVuY3Rpb24gPSBDcmVhdGVUZXN0RnVuY3Rpb24oc3RhY2ssICd0ZXN0LWZ1bmN0aW9uJyk7XG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuICBjb25zdCB0ZXN0TGlzdGVuZXIgPSBDcmVhdGVUZXN0TGlzdGVuZXIoc3RhY2ssICd0ZXN0LWxpc3RlbmVyJywgdGVzdEFsYik7XG4gIGNvbnN0IHRhcmdldEdyb3VwTmFtZSA9ICd0ZXN0LWdyb3VwJztcbiAgY29uc3QgcGF0aFBhdHRlcm4gPSAnKmFkbWluKic7XG5cbiAgZGVmYXVsdHMuQWRkTGFtYmRhVGFyZ2V0KFxuICAgIHN0YWNrLFxuICAgICd0ZXN0LWxhbWJkYS10YXJnZXQnLFxuICAgIHRlc3RMaXN0ZW5lcixcbiAgICB0ZXN0RnVuY3Rpb24sXG4gICAgdW5kZWZpbmVkLFxuICAgIHsgdGFyZ2V0R3JvdXBOYW1lIH0sXG4gICk7XG5cbiAgLy8gVGhpcyBpcyB0aGUgY29kZSB3ZSdyZSB0ZXN0aW5nXG4gIGNvbnN0IHJ1bGVQcm9wcyA9IHtcbiAgICBjb25kaXRpb25zOiBbZWxiLkxpc3RlbmVyQ29uZGl0aW9uLnBhdGhQYXR0ZXJucyhbcGF0aFBhdHRlcm5dKV0sXG4gICAgcHJpb3JpdHk6IDEwXG4gIH07XG4gIGRlZmF1bHRzLkFkZExhbWJkYVRhcmdldChcbiAgICBzdGFjayxcbiAgICAndGVzdC1zZWNvbmQtbGFtYmRhLXRhcmdldCcsXG4gICAgdGVzdExpc3RlbmVyLFxuICAgIHRlc3RGdW5jdGlvbixcbiAgICBydWxlUHJvcHMsXG4gICAgeyB0YXJnZXRHcm91cE5hbWUgfSxcbiAgKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwJywgMik7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGUnLCB7XG4gICAgQ29uZGl0aW9uczogW1xuICAgICAge1xuICAgICAgICBGaWVsZDogXCJwYXRoLXBhdHRlcm5cIixcbiAgICAgICAgUGF0aFBhdHRlcm5Db25maWc6IHtcbiAgICAgICAgICBWYWx1ZXM6IFtcbiAgICAgICAgICAgIHBhdGhQYXR0ZXJuXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9KTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkIHNpbmdsZSBmYXJnYXRlIHRhcmdldCB3aXRoIG5vIGN1c3RvbWl6YXRpb24nLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCB0ZXN0U2VydmljZSA9IENyZWF0ZVRlc3RGYXJnYXRlU2VydmljZShzdGFjaywgJ3Rlc3Qtc2VydmljZScsIHRlc3RWcGMpO1xuICBjb25zdCB0ZXN0QWxiID0gQ3JlYXRlVGVzdExvYWRCYWxhbmNlcihzdGFjaywgdGVzdFZwYyk7XG4gIGNvbnN0IHRlc3RMaXN0ZW5lciA9IENyZWF0ZVRlc3RMaXN0ZW5lcihzdGFjaywgJ3Rlc3QtbGlzdGVuZXInLCB0ZXN0QWxiKTtcblxuICAvLyBUaGlzIGlzIHRoZSBjb2RlIHdlJ3JlIHRlc3RpbmdcbiAgZGVmYXVsdHMuQWRkRmFyZ2F0ZVRhcmdldChcbiAgICBzdGFjayxcbiAgICAndGVzdC1mYXJnYXRlLXRhcmdldCcsXG4gICAgdGVzdExpc3RlbmVyLFxuICAgIHRlc3RTZXJ2aWNlLFxuICAgIHVuZGVmaW5lZCxcbiAgICB7XG4gICAgICB2cGM6IHRlc3RWcGMsXG4gICAgICBwcm90b2NvbDogZWxiLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFxuICAgIH1cbiAgKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyJywge1xuICAgIERlZmF1bHRBY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIFRhcmdldEdyb3VwQXJuOiB7XG4gICAgICAgICAgUmVmOiBcInRlc3RmYXJnYXRldGFyZ2V0dGcwMUZGNUFBM1wiXG4gICAgICAgIH0sXG4gICAgICAgIFR5cGU6IFwiZm9yd2FyZFwiXG4gICAgICB9XG4gICAgXSxcbiAgfSk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cCcsIHtcbiAgICBUYXJnZXRUeXBlOiBcImlwXCIsXG4gIH0pO1xuXG59KTtcblxudGVzdCgnVGVzdCBhZGQgdHdvIGZhcmdhdGUgdGFyZ2V0cyB3aXRoIHJ1bGVzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIC8vIFNldCB1cCB0ZXN0IGZyYW1ld29yayBpbmRlcGVuZGVudCBvZiBvdXIgY29kZSBmb3IgdW5pdCB0ZXN0aW5nXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdFNlcnZpY2UgPSBDcmVhdGVUZXN0RmFyZ2F0ZVNlcnZpY2Uoc3RhY2ssICd0ZXN0LXNlcnZpY2UnLCB0ZXN0VnBjKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuICBjb25zdCB0ZXN0TGlzdGVuZXIgPSBDcmVhdGVUZXN0TGlzdGVuZXIoc3RhY2ssICd0ZXN0LWxpc3RlbmVyJywgdGVzdEFsYik7XG4gIGNvbnN0IHBhdGhQYXR0ZXJuID0gJyphZG1pbionO1xuXG4gIGRlZmF1bHRzLkFkZEZhcmdhdGVUYXJnZXQoXG4gICAgc3RhY2ssXG4gICAgJ3Rlc3QtZmFyZ2F0ZS10YXJnZXQnLFxuICAgIHRlc3RMaXN0ZW5lcixcbiAgICB0ZXN0U2VydmljZSxcbiAgICB1bmRlZmluZWQsXG4gICAge1xuICAgICAgdnBjOiB0ZXN0VnBjLFxuICAgICAgcHJvdG9jb2w6IGVsYi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBcbiAgICB9XG4gICk7XG5cbiAgLy8gVGhpcyBpcyB0aGUgY29kZSB3ZSdyZSB0ZXN0aW5nXG4gIGNvbnN0IHJ1bGVQcm9wcyA9IHtcbiAgICBjb25kaXRpb25zOiBbZWxiLkxpc3RlbmVyQ29uZGl0aW9uLnBhdGhQYXR0ZXJucyhbcGF0aFBhdHRlcm5dKV0sXG4gICAgcHJpb3JpdHk6IDEwXG4gIH07XG4gIGRlZmF1bHRzLkFkZEZhcmdhdGVUYXJnZXQoXG4gICAgc3RhY2ssXG4gICAgJ3Rlc3Qtc2Vjb25kLWZhcmdhdGUtdGFyZ2V0JyxcbiAgICB0ZXN0TGlzdGVuZXIsXG4gICAgdGVzdFNlcnZpY2UsXG4gICAgcnVsZVByb3BzLFxuICAgIHtcbiAgICAgIHZwYzogdGVzdFZwYyxcbiAgICAgIHByb3RvY29sOiBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQXG4gICAgfVxuICApO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXAnLCAyKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZScsIHtcbiAgICBDb25kaXRpb25zOiBbXG4gICAgICB7XG4gICAgICAgIEZpZWxkOiBcInBhdGgtcGF0dGVyblwiLFxuICAgICAgICBQYXRoUGF0dGVybkNvbmZpZzoge1xuICAgICAgICAgIFZhbHVlczogW1xuICAgICAgICAgICAgcGF0aFBhdHRlcm5cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkaW5nIGEgbGlzdGVuZXIgd2l0aCBkZWZhdWx0cycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAvLyBTZXQgdXAgdGVzdCBmcmFtZXdvcmsgaW5kZXBlbmRlbnQgb2Ygb3VyIGNvZGUgZm9yIHVuaXQgdGVzdGluZ1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IHRlc3RBbGIgPSBDcmVhdGVUZXN0TG9hZEJhbGFuY2VyKHN0YWNrLCB0ZXN0VnBjKTtcbiAgY29uc3QgdGVzdENlcnQgPSBkZWZhdWx0cy5nZXRGYWtlQ2VydGlmaWNhdGUoc3RhY2ssICdub3QtcmVhbGx5LWEtY2VydCcpO1xuXG4gIGNvbnN0IGxpc3RlbmVyID0gZGVmYXVsdHMuQWRkTGlzdGVuZXIoc3RhY2ssICd0ZXN0JywgdGVzdEFsYiwgeyBjZXJ0aWZpY2F0ZXM6IFsgdGVzdENlcnQgXSB9KTtcblxuICAvLyAgTmVlZCB0byBhZGQgYSB0YXJnZXQgYmVjYXVzZSBhIGxpc3RlbmVyIGlzIG5vdCBhbGxvd2VkIHRvIGV4aXN0IHdpdGhvdXQgYSB0YXJnZXQgb3IgYWN0aW9uXG4gIGRlZmF1bHRzLkFkZExhbWJkYVRhcmdldChzdGFjaywgJ2R1bW15LXRhcmdldCcsIGxpc3RlbmVyLCBDcmVhdGVUZXN0RnVuY3Rpb24oc3RhY2ssICdkdW1teS1mdW5jdGlvbicpKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgLy8gVGhpcyBzaG91bGQgY3JlYXRlIDIgbGlzdGVuZXJzLCBIVFRQUyBwbHVzIHJlZGlyZWN0IG9mIEhUVFBcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyJywge1xuICAgIFByb3RvY29sOiAnSFRUUFMnLFxuICB9KTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXInLCB7XG4gICAgUHJvdG9jb2w6ICdIVFRQJyxcbiAgfSk7XG59KTtcblxudGVzdCgnVGVzdCBhZGRpbmcgYW4gSFRUUFMgbGlzdGVuZXIgd2l0aCBubyBjZXJ0IChlcnJvciknLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCB0ZXN0QWxiID0gQ3JlYXRlVGVzdExvYWRCYWxhbmNlcihzdGFjaywgdGVzdFZwYyk7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkFkZExpc3RlbmVyKHN0YWNrLCAndGVzdCcsIHRlc3RBbGIsIHsgfSk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdBIGxpc3RlbmVyIHVzaW5nIEhUVFBTIHByb3RvY29sIHJlcXVpcmVzIGEgY2VydGlmaWNhdGUnKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBhbiBIVFRQIGxpc3RlbmVyIHdpdGggYSBjZXJ0IChlcnJvciknLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCB0ZXN0QWxiID0gQ3JlYXRlVGVzdExvYWRCYWxhbmNlcihzdGFjaywgdGVzdFZwYyk7XG4gIGNvbnN0IHRlc3RDZXJ0ID0gZGVmYXVsdHMuZ2V0RmFrZUNlcnRpZmljYXRlKHN0YWNrLCAnbm90LXJlYWxseS1hLWNlcnQnKTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQWRkTGlzdGVuZXIoc3RhY2ssICd0ZXN0JywgdGVzdEFsYiwgeyBwcm90b2NvbDogJ0hUVFAnLCBjZXJ0aWZpY2F0ZXM6IFsgdGVzdENlcnQgXSB9KTtcbiAgfTtcblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ0hUVFAgbGlzdGVuZXJzIGNhbm5vdCB1c2UgYSBjZXJ0aWZpY2F0ZScpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkaW5nIGEgSFRUUCBsaXN0ZW5lcicsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAvLyBTZXQgdXAgdGVzdCBmcmFtZXdvcmsgaW5kZXBlbmRlbnQgb2Ygb3VyIGNvZGUgZm9yIHVuaXQgdGVzdGluZ1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IHRlc3RBbGIgPSBDcmVhdGVUZXN0TG9hZEJhbGFuY2VyKHN0YWNrLCB0ZXN0VnBjKTtcblxuICBjb25zdCBsaXN0ZW5lciA9IGRlZmF1bHRzLkFkZExpc3RlbmVyKHN0YWNrLCAndGVzdCcsIHRlc3RBbGIsIHsgcHJvdG9jb2w6ICdIVFRQJyB9KTtcblxuICAvLyAgTmVlZCB0byBhZGQgYSB0YXJnZXQgYmVjYXVzZSBhIGxpc3RlbmVyIGlzIG5vdCBhbGxvd2VkIHRvIGV4aXN0IHdpdGhvdXQgYSB0YXJnZXQgb3IgYWN0aW9uXG4gIGRlZmF1bHRzLkFkZExhbWJkYVRhcmdldChzdGFjaywgJ2R1bW15LXRhcmdldCcsIGxpc3RlbmVyLCBDcmVhdGVUZXN0RnVuY3Rpb24oc3RhY2ssICdkdW1teS1mdW5jdGlvbicpKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyJywge1xuICAgIFByb3RvY29sOiAnSFRUUCcsXG4gIH0pO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXInLCAxKTtcbn0pO1xuXG50ZXN0KCdUZXN0IEdldEFjdGl2ZUxpc3RlbmVyIHdpdGggMCBsaXN0ZW5lcnMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCB0ZXN0QWxiID0gQ3JlYXRlVGVzdExvYWRCYWxhbmNlcihzdGFjaywgdGVzdFZwYyk7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkdldEFjdGl2ZUxpc3RlbmVyKHRlc3RBbGIubGlzdGVuZXJzKTtcbiAgfTtcblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ1RoZXJlIGFyZSBubyBsaXN0ZW5lcnMgaW4gdGhlIEFMQicpO1xuXG59KTtcblxudGVzdCgnVGVzdCBHZXRBY3RpdmVMaXN0ZW5lciB3aXRoIDEgbGlzdGVuZXInLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCB0ZXN0QWxiID0gQ3JlYXRlVGVzdExvYWRCYWxhbmNlcihzdGFjaywgdGVzdFZwYyk7XG5cbiAgZGVmYXVsdHMuQWRkTGlzdGVuZXIoc3RhY2ssICd0ZXN0JywgdGVzdEFsYiwgeyBwcm90b2NvbDogJ0hUVFAnIH0pO1xuICBjb25zdCBsaXN0ZW5lciA9IGRlZmF1bHRzLkdldEFjdGl2ZUxpc3RlbmVyKHRlc3RBbGIubGlzdGVuZXJzKTtcblxuICBleHBlY3QoKGxpc3RlbmVyLm5vZGUuZGVmYXVsdENoaWxkIGFzIGVsYi5DZm5MaXN0ZW5lcikucHJvdG9jb2wpLnRvQmUoJ0hUVFAnKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgR2V0QWN0aXZlTGlzdGVuZXIgd2l0aCAyIGxpc3RlbmVycycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAvLyBTZXQgdXAgdGVzdCBmcmFtZXdvcmsgaW5kZXBlbmRlbnQgb2Ygb3VyIGNvZGUgZm9yIHVuaXQgdGVzdGluZ1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IHRlc3RBbGIgPSBDcmVhdGVUZXN0TG9hZEJhbGFuY2VyKHN0YWNrLCB0ZXN0VnBjKTtcbiAgY29uc3QgdGVzdENlcnQgPSBkZWZhdWx0cy5nZXRGYWtlQ2VydGlmaWNhdGUoc3RhY2ssICdub3QtcmVhbGx5LWEtY2VydCcpO1xuXG4gIGRlZmF1bHRzLkFkZExpc3RlbmVyKHN0YWNrLCAndGVzdCcsIHRlc3RBbGIsIHsgY2VydGlmaWNhdGVzOiBbIHRlc3RDZXJ0IF0gfSk7XG4gIGNvbnN0IGxpc3RlbmVyID0gZGVmYXVsdHMuR2V0QWN0aXZlTGlzdGVuZXIodGVzdEFsYi5saXN0ZW5lcnMpO1xuXG4gIGV4cGVjdCgobGlzdGVuZXIubm9kZS5kZWZhdWx0Q2hpbGQgYXMgZWxiLkNmbkxpc3RlbmVyKS5wcm90b2NvbCkudG9CZSgnSFRUUFMnKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgdXNlIG9mIGNlcnRpZmljYXRlQXJucyBlcnJvcicsICgpID0+IHtcbiAgY29uc3QgcHJvcHMgPSB7XG4gICAgbGlzdGVuZXJQcm9wczoge1xuICAgICAgY2VydGlmaWNhdGVBcm5zOiBbICdhcm4xJ10sXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0FsYlByb3BzKHByb3BzKTtcbiAgfTtcblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoXCJjZXJ0aWZpY2F0ZUFybnMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHN1cHBseSBjZXJ0aWZpY2F0ZXMgdXNpbmcgcHJvcHMubGlzdGVuZXJQcm9wcy5jZXJ0aWZpY2F0ZXNcXG5cIik7XG59KTtcblxudGVzdCgnVGVzdCBiYWQgZmlyc3QgbGlzdGVuZXIgZXJyb3InLCAoKSA9PiB7XG4gIGNvbnN0IHByb3BzID0ge1xuICAgIGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqOiB7XG4gICAgICBsaXN0ZW5lcnM6IFtdLFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tBbGJQcm9wcyhwcm9wcyk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKFwiV2hlbiBhZGRpbmcgdGhlIGZpcnN0IGxpc3RlbmVyIGFuZCB0YXJnZXQgdG8gYSBsb2FkIGJhbGFuY2VyLCBsaXN0ZW5lclByb3BzIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBpbmNsdWRlIGF0IGxlYXN0IGEgY2VydGlmaWNhdGUgb3IgcHJvdG9jb2w6IEhUVFBcXG5cIik7XG5cbiAgY29uc3QgYXBwMiA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0FsYlByb3BzKHt9KTtcbiAgfTtcblxuICBleHBlY3QoYXBwMikudG9UaHJvd0Vycm9yKFwiV2hlbiBhZGRpbmcgdGhlIGZpcnN0IGxpc3RlbmVyIGFuZCB0YXJnZXQgdG8gYSBsb2FkIGJhbGFuY2VyLCBsaXN0ZW5lclByb3BzIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBpbmNsdWRlIGF0IGxlYXN0IGEgY2VydGlmaWNhdGUgb3IgcHJvdG9jb2w6IEhUVFBcXG5cIik7XG59KTtcblxudGVzdCgnVGVzdCBzZWNvbmQgdGFyZ2V0IHdpdGggbm8gcnVsZXMgZXJyb3InLCAoKSA9PiB7XG4gIGNvbnN0IHByb3BzID0ge1xuICAgIGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqOiB7XG4gICAgICBsaXN0ZW5lcnM6IFsgJ2Zha2UgbGlzdGVuZXInXSxcbiAgICB9LFxuICAgIGV4aXN0aW5nVnBjOiB7IGZha2U6ICd2cGMnIH1cbiAgfTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tBbGJQcm9wcyhwcm9wcyk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKFwiV2hlbiBhZGRpbmcgYSBzZWNvbmQgdGFyZ2V0IHRvIGFuIGV4aXN0aW5nIGxpc3RlbmVyLCB0aGVyZSBtdXN0IGJlIHJ1bGVzIHByb3ZpZGVkXFxuXCIpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZXhpc3RpbmcgTG9hZCBCYWxhbmNlciB3aXRoIG5vIFZQQyBwcm92aWRlZCBlcnJvcicsICgpID0+IHtcbiAgY29uc3QgcHJvcHMgPSB7XG4gICAgZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmo6IHtcbiAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcicsXG4gICAgICBsaXN0ZW5lcnM6IFsgXVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tBbGJQcm9wcyhwcm9wcyk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKFwiQW4gZXhpc3RpbmcgQUxCIGlzIGFscmVhZHkgaW4gYSBWUEMsIHRoYXQgVlBDIG11c3QgYmUgcHJvdmlkZWQgaW4gcHJvcHMuZXhpc3RpbmdWcGMgZm9yIHRoZSByZXN0IG9mIHRoZSBjb25zdHJ1Y3QgdG8gdXNlLlxcblwiKTtcbn0pO1xuXG50ZXN0KCdUZXN0IHNlbmRpbmcgbGlzdGVuZXJQcm9wcyB0byBleGlzdGluZ0xpc3RlbmVyIGVycm9yJywgKCkgPT4ge1xuICBjb25zdCBwcm9wcyA9IHtcbiAgICBleGlzdGluZ0xvYWRCYWxhbmNlck9iajoge1xuICAgICAgbGlzdGVuZXJzOiBbICdwbGFjZWhvbGRlcicgXVxuICAgIH0sXG4gICAgbGlzdGVuZXJQcm9wczogeyB2YWw6ICdwbGFjZWhvbGRlcicgfVxuICB9O1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0FsYlByb3BzKHByb3BzKTtcbiAgfTtcblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoXCJUaGlzIGxvYWQgYmFsYW5jZXIgYWxyZWFkeSBoYXMgYSBsaXN0ZW5lciwgbGlzdGVuZXJQcm9wcyBtYXkgbm90IGJlIHNwZWNpZmllZFxcblwiKTtcbn0pO1xuXG50ZXN0KCdUZXN0IHNlbmRpbmcgbG9hZEJhbGFuY2VyUHJvcHMgYW5kIGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqIGlzIGFuIGVycm9yJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIGNvbnN0IHZwYyA9IGRlZmF1bHRzLmJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBkZWZhdWx0cy5EZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gIH0pO1xuXG4gIGNvbnN0IGV4aXN0aW5nTG9hZEJhbGFuY2VyID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcihzdGFjaywgJ2xvYWQtYmFsYW5jZXInLCB7XG4gICAgdnBjLFxuICAgIGludGVybmV0RmFjaW5nOiB0cnVlLFxuICAgIGxvYWRCYWxhbmNlck5hbWU6ICd1bmlxdWUtbmFtZSdcbiAgfSk7XG5cbiAgY29uc3QgcHJvcHMgPSB7XG4gICAgdnBjLFxuICAgIGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqOiBleGlzdGluZ0xvYWRCYWxhbmNlcixcbiAgICBsb2FkQmFsYW5jZXJQcm9wczoge1xuICAgICAgbG9hZEJhbGFuY2VyTmFtZTogJ25ldy1sb2FkYmFsYW5jZXInLFxuICAgICAgdnBjLFxuICAgICAgaW50ZXJuZXRGYWNpbmc6IHRydWVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrQWxiUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIkVycm9yIC0gRWl0aGVyIHByb3ZpZGUgbG9hZEJhbGFuY2VyUHJvcHMgb3IgZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmosIGJ1dCBub3QgYm90aC5cXG5cIik7XG59KTtcblxudGVzdCgnVGVzdCBzZW5kaW5nIGFsYkxvZ2dpbmdCdWNrZXRQcm9wcyB3aGVuIGxvZ0FsYkFjY2Vzc0xvZ3MgaXMgZmFsc2UgaXMgYW4gZXJyb3InLCAoKSA9PiB7XG5cbiAgY29uc3QgcHJvcHMgPSB7XG4gICAgbG9nQWxiQWNjZXNzTG9nczogZmFsc2UsXG4gICAgYWxiTG9nZ2luZ0J1Y2tldFByb3BzOiB7fSxcbiAgICBsb2FkQmFsYW5jZXJQcm9wczoge1xuICAgICAgbG9hZEJhbGFuY2VyTmFtZTogJ25ldy1sb2FkYmFsYW5jZXInLFxuICAgICAgaW50ZXJuZXRGYWNpbmc6IHRydWVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrQWxiUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIkVycm9yIC0gSWYgbG9nQWxiQWNjZXNzTG9ncyBpcyBmYWxzZSwgc3VwcGx5aW5nIGFsYkxvZ2dpbmdCdWNrZXRQcm9wcyBpcyBpbnZhbGlkLlxcblwiKTtcbn0pO1xuXG50ZXN0KCdUZXN0IHNlbmRpbmcgVlBDIGluIGxvYWRCYWxhbmNlclByb3BzIGVycm9yJywgKCkgPT4ge1xuICBjb25zdCBwcm9wcyA9IHtcbiAgICBsb2FkQmFsYW5jZXJQcm9wczoge1xuICAgICAgdnBjOiB7IHZhbDogJ3BsYWNlaG9sZGVyJyB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0FsYlByb3BzKHByb3BzKTtcbiAgfTtcblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ1NwZWNpZnkgYW55IGV4aXN0aW5nIFZQQyBhdCB0aGUgY29uc3RydWN0IGxldmVsLCBub3Qgd2l0aGluIGxvYWRCYWxhbmNlclByb3BzLlxcbicpO1xufSk7XG5cbmZ1bmN0aW9uIENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2s6IFN0YWNrLCB2cGM6IGVjMi5JVnBjKTogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIHtcbiAgcmV0dXJuIG5ldyBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIoc3RhY2ssICdsb2FkLWJhbGFuY2VyJywge1xuICAgIHZwYyxcbiAgICBpbnRlcm5ldEZhY2luZzogdHJ1ZSxcbiAgICBsb2FkQmFsYW5jZXJOYW1lOiAndW5pcXVlLW5hbWUnXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBDcmVhdGVUZXN0RnVuY3Rpb24oc3RhY2s6IFN0YWNrLCBpZDogc3RyaW5nKTogbGFtYmRhLkZ1bmN0aW9uIHtcbiAgcmV0dXJuIG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssIGlkLCB7XG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBDcmVhdGVUZXN0RmFyZ2F0ZVNlcnZpY2Uoc3RhY2s6IFN0YWNrLCBpZDogc3RyaW5nLCB2cGM6IGVjMi5JVnBjKTogZWNzLkZhcmdhdGVTZXJ2aWNlIHtcbiAgY29uc3QgY3JlYXRlRmFyZ2F0ZVNlcnZpY2VSZXNwb25zZSA9IGRlZmF1bHRzLkNyZWF0ZUZhcmdhdGVTZXJ2aWNlKHN0YWNrLCBgJHtpZH0tZmctc3ZjYCwge1xuICAgIGNvbnN0cnVjdFZwYzogdnBjLFxuICAgIGNsaWVudENsdXN0ZXJQcm9wczogdW5kZWZpbmVkLFxuICAgIGVjclJlcG9zaXRvcnlBcm46ICdhcm46YXdzOmVjcjp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOnJlcG9zaXRvcnkvZmFrZS1yZXBvJyxcbiAgICBlY3JJbWFnZVZlcnNpb246ICdsYXRlc3QnXG4gIH0pO1xuICByZXR1cm4gY3JlYXRlRmFyZ2F0ZVNlcnZpY2VSZXNwb25zZS5zZXJ2aWNlO1xufVxuXG5mdW5jdGlvbiBDcmVhdGVUZXN0TGlzdGVuZXIoc3RhY2s6IFN0YWNrLCBpZDogc3RyaW5nLCBhbGI6IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcikge1xuICByZXR1cm4gbmV3IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyKHN0YWNrLCBpZCwge1xuICAgIGxvYWRCYWxhbmNlcjogYWxiLFxuICAgIHByb3RvY29sOiBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQXG4gIH0pO1xufVxuIl19
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWhlbHBlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYWxiLWhlbHBlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCw2Q0FBb0M7QUFDcEMsOERBQThEO0FBQzlELGlEQUFpRDtBQUNqRCxxQ0FBcUM7QUFHckMsdURBQWtEO0FBRWxELElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7SUFDNUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsWUFBWTtJQUNaLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ25DLGVBQWUsRUFBRSxRQUFRLENBQUMsNEJBQTRCLEVBQUU7S0FDekQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO1FBQ25GLEdBQUc7UUFDSCxjQUFjLEVBQUUsSUFBSTtRQUNwQixnQkFBZ0IsRUFBRSxhQUFhO0tBQ2hDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUNoQyxHQUFHO1FBQ0gsU0FBUyxFQUFFLElBQUk7UUFDZix1QkFBdUIsRUFBRSxvQkFBb0I7S0FDOUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLDJDQUEyQyxFQUFFO1FBQzFFLElBQUksRUFBRSxhQUFhO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtJQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRTtRQUM1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UUFDbEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxxQ0FBcUM7UUFDdkQsT0FBTyxFQUFFLGVBQWU7S0FDekIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsS0FBWSxFQUFFLEVBQVUsRUFBRSxHQUFhO0lBQ3ZFLE1BQU0sNEJBQTRCLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ3hGLFlBQVksRUFBRSxHQUFHO1FBQ2pCLGtCQUFrQixFQUFFLFNBQVM7UUFDN0IsZ0JBQWdCLEVBQUUseURBQXlEO1FBQzNFLGVBQWUsRUFBRSxRQUFRO0tBQzFCLENBQUMsQ0FBQztJQUNILE9BQU8sNEJBQTRCLENBQUMsT0FBTyxDQUFDO0FBQzlDLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEtBQVksRUFBRSxFQUFVLEVBQUUsR0FBZ0M7SUFDcEYsT0FBTyxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzVDLFlBQVksRUFBRSxHQUFHO1FBQ2pCLFFBQVEsRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSTtLQUN2QyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlbGIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJy4uL2luZGV4JztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5cbnRlc3QoJ1Rlc3QgT2J0YWluQWxiIHdpdGggZXhpc3RpbmcgQUxCJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IGRlZmF1bHRzLkRlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgY29uc3QgZXhpc3RpbmdMb2FkQmFsYW5jZXIgPSBuZXcgZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyKHN0YWNrLCAnbG9hZC1iYWxhbmNlcicsIHtcbiAgICB2cGMsXG4gICAgaW50ZXJuZXRGYWNpbmc6IHRydWUsXG4gICAgbG9hZEJhbGFuY2VyTmFtZTogJ3VuaXF1ZS1uYW1lJ1xuICB9KTtcblxuICBkZWZhdWx0cy5PYnRhaW5BbGIoc3RhY2ssICd0ZXN0Jywge1xuICAgIHZwYyxcbiAgICBwdWJsaWNBcGk6IHRydWUsXG4gICAgZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmo6IGV4aXN0aW5nTG9hZEJhbGFuY2VyXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyJywge1xuICAgIE5hbWU6IFwidW5pcXVlLW5hbWVcIixcbiAgfSk7XG59KTtcblxudGVzdCgnVGVzdCBPYnRhaW5BbGIgZm9yIG5ldyBBTEIgd2l0aCBwcm92aWRlZCBwcm9wcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtcbiAgICBlbnY6IHsgYWNjb3VudDogXCIxMjM0NTY3ODkwMTJcIiwgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICB9KTtcbiAgLy8gQnVpbGQgVlBDXG4gIGNvbnN0IHZwYyA9IGRlZmF1bHRzLmJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBkZWZhdWx0cy5EZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gIH0pO1xuXG4gIGRlZmF1bHRzLk9idGFpbkFsYihzdGFjaywgJ3Rlc3QnLCB7XG4gICAgdnBjLFxuICAgIHB1YmxpY0FwaTogdHJ1ZSxcbiAgICBsb2FkQmFsYW5jZXJQcm9wczoge1xuICAgICAgbG9hZEJhbGFuY2VyTmFtZTogJ25ldy1sb2FkYmFsYW5jZXInLFxuICAgICAgdnBjLFxuICAgICAgaW50ZXJuZXRGYWNpbmc6IHRydWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyJywge1xuICAgIE5hbWU6IFwibmV3LWxvYWRiYWxhbmNlclwiLFxuICAgIFNjaGVtZTogXCJpbnRlcm5ldC1mYWNpbmdcIixcbiAgfSk7XG59KTtcblxudGVzdCgnVGVzdCBPYnRhaW5BbGIgZm9yIG5ldyBBTEIgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuICAgIGVudjogeyBhY2NvdW50OiBcIjEyMzQ1Njc4OTAxMlwiLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gIH0pO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IGRlZmF1bHRzLkRlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgZGVmYXVsdHMuT2J0YWluQWxiKHN0YWNrLCAndGVzdCcsIHtcbiAgICB2cGMsXG4gICAgcHVibGljQXBpOiBmYWxzZVxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlcicsIHtcbiAgICBTY2hlbWU6IFwiaW50ZXJuYWxcIixcbiAgfSk7XG59KTtcblxudGVzdCgnVGVzdCB3aXRoIGN1c3RvbSBsb2dnaW5nIGJ1Y2tldCBwcm9wcycsICgpID0+IHtcbiAgLy8gQ3JlYXRpbmcgQUxCIGxvZ2dpbmcgcmVxdWlyZXMgYSByZWdpb24gYW5kIGFjY291bnQgKGJ1dFxuICAvLyB0aGVzZSBjYW4gYmUgZmFrZSBpbiB1bml0IHRlc3RzKVxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuICAgIGVudjogeyBhY2NvdW50OiBcIjEyMzQ1Njc4OTAxMlwiLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gIH0pO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IGRlZmF1bHRzLkRlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgY29uc3QgdGVzdE5hbWUgPSAndGVzdC1uYW1lJztcblxuICBkZWZhdWx0cy5PYnRhaW5BbGIoc3RhY2ssICd0ZXN0Jywge1xuICAgIHZwYyxcbiAgICBwdWJsaWNBcGk6IGZhbHNlLFxuICAgIGxvZ0FjY2Vzc0xvZ3M6IHRydWUsXG4gICAgbG9nZ2luZ0J1Y2tldFByb3BzOiB7XG4gICAgICBidWNrZXROYW1lOiB0ZXN0TmFtZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgIEJ1Y2tldE5hbWU6IHRlc3ROYW1lXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgd2l0aCBubyBsb2dnaW5nJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IGRlZmF1bHRzLkRlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgZGVmYXVsdHMuT2J0YWluQWxiKHN0YWNrLCAndGVzdCcsIHtcbiAgICB2cGMsXG4gICAgcHVibGljQXBpOiBmYWxzZSxcbiAgICBsb2dBY2Nlc3NMb2dzOiBmYWxzZVxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OlMzOjpCdWNrZXQnLCAwKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZCBzaW5nbGUgbGFtYmRhIHRhcmdldCBncm91cCB3aXRoIG5vIGN1c3RvbWl6YXRpb24nLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdEZ1bmN0aW9uID0gQ3JlYXRlVGVzdEZ1bmN0aW9uKHN0YWNrLCAndGVzdC1mdW5jdGlvbicpO1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IHRlc3RBbGIgPSBDcmVhdGVUZXN0TG9hZEJhbGFuY2VyKHN0YWNrLCB0ZXN0VnBjKTtcbiAgY29uc3QgdGVzdExpc3RlbmVyID0gQ3JlYXRlVGVzdExpc3RlbmVyKHN0YWNrLCAndGVzdC1saXN0ZW5lcicsIHRlc3RBbGIpO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGNvZGUgd2UncmUgdGVzdGluZ1xuICBkZWZhdWx0cy5BZGRMYW1iZGFUYXJnZXQoXG4gICAgc3RhY2ssXG4gICAgJ3Rlc3QtbGFtYmRhLXRhcmdldCcsXG4gICAgdGVzdExpc3RlbmVyLFxuICAgIHRlc3RGdW5jdGlvbixcbiAgKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyJywge1xuICAgIERlZmF1bHRBY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIFRhcmdldEdyb3VwQXJuOiB7XG4gICAgICAgICAgUmVmOiBcInRlc3RsYW1iZGF0YXJnZXR0ZzdFNUMzMkY0XCJcbiAgICAgICAgfSxcbiAgICAgICAgVHlwZTogXCJmb3J3YXJkXCJcbiAgICAgIH1cbiAgICBdLFxuICB9KTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwJywge1xuICAgIFRhcmdldFR5cGU6IFwibGFtYmRhXCIsXG4gIH0pO1xuXG59KTtcblxudGVzdCgnVGVzdCBhZGQgc2luZ2xlIGxhbWJkYSB0YXJnZXQgZ3JvdXAgd2l0aCB0YXJnZXQgZ3JvdXAgcHJvcHMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdEZ1bmN0aW9uID0gQ3JlYXRlVGVzdEZ1bmN0aW9uKHN0YWNrLCAndGVzdC1mdW5jdGlvbicpO1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IHRlc3RBbGIgPSBDcmVhdGVUZXN0TG9hZEJhbGFuY2VyKHN0YWNrLCB0ZXN0VnBjKTtcbiAgY29uc3QgdGVzdExpc3RlbmVyID0gQ3JlYXRlVGVzdExpc3RlbmVyKHN0YWNrLCAndGVzdC1saXN0ZW5lcicsIHRlc3RBbGIpO1xuICBjb25zdCB0YXJnZXRHcm91cE5hbWUgPSAndGVzdC1ncm91cCc7XG5cbiAgLy8gVGhpcyBpcyB0aGUgY29kZSB3ZSdyZSB0ZXN0aW5nXG4gIGRlZmF1bHRzLkFkZExhbWJkYVRhcmdldChcbiAgICBzdGFjayxcbiAgICAndGVzdC1sYW1iZGEtdGFyZ2V0JyxcbiAgICB0ZXN0TGlzdGVuZXIsXG4gICAgdGVzdEZ1bmN0aW9uLFxuICAgIHVuZGVmaW5lZCxcbiAgICB7IHRhcmdldEdyb3VwTmFtZSB9LFxuICApO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXAnLCB7XG4gICAgVGFyZ2V0VHlwZTogXCJsYW1iZGFcIixcbiAgICBOYW1lOiB0YXJnZXRHcm91cE5hbWUsXG4gIH0pO1xuXG59KTtcblxudGVzdCgnVGVzdCBhZGQgcnVsZSBwcm9wcyBmb3Igc2Vjb25kIGxhbWJkYSB0YXJnZXQgZ3JvdXAnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdEZ1bmN0aW9uID0gQ3JlYXRlVGVzdEZ1bmN0aW9uKHN0YWNrLCAndGVzdC1mdW5jdGlvbicpO1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IHRlc3RBbGIgPSBDcmVhdGVUZXN0TG9hZEJhbGFuY2VyKHN0YWNrLCB0ZXN0VnBjKTtcbiAgY29uc3QgdGVzdExpc3RlbmVyID0gQ3JlYXRlVGVzdExpc3RlbmVyKHN0YWNrLCAndGVzdC1saXN0ZW5lcicsIHRlc3RBbGIpO1xuICBjb25zdCB0YXJnZXRHcm91cE5hbWUgPSAndGVzdC1ncm91cCc7XG4gIGNvbnN0IHBhdGhQYXR0ZXJuID0gJyphZG1pbionO1xuXG4gIGRlZmF1bHRzLkFkZExhbWJkYVRhcmdldChcbiAgICBzdGFjayxcbiAgICAndGVzdC1sYW1iZGEtdGFyZ2V0JyxcbiAgICB0ZXN0TGlzdGVuZXIsXG4gICAgdGVzdEZ1bmN0aW9uLFxuICAgIHVuZGVmaW5lZCxcbiAgICB7IHRhcmdldEdyb3VwTmFtZSB9LFxuICApO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGNvZGUgd2UncmUgdGVzdGluZ1xuICBjb25zdCBydWxlUHJvcHMgPSB7XG4gICAgY29uZGl0aW9uczogW2VsYi5MaXN0ZW5lckNvbmRpdGlvbi5wYXRoUGF0dGVybnMoW3BhdGhQYXR0ZXJuXSldLFxuICAgIHByaW9yaXR5OiAxMFxuICB9O1xuICBkZWZhdWx0cy5BZGRMYW1iZGFUYXJnZXQoXG4gICAgc3RhY2ssXG4gICAgJ3Rlc3Qtc2Vjb25kLWxhbWJkYS10YXJnZXQnLFxuICAgIHRlc3RMaXN0ZW5lcixcbiAgICB0ZXN0RnVuY3Rpb24sXG4gICAgcnVsZVByb3BzLFxuICAgIHsgdGFyZ2V0R3JvdXBOYW1lIH0sXG4gICk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cCcsIDIpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlJywge1xuICAgIENvbmRpdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgRmllbGQ6IFwicGF0aC1wYXR0ZXJuXCIsXG4gICAgICAgIFBhdGhQYXR0ZXJuQ29uZmlnOiB7XG4gICAgICAgICAgVmFsdWVzOiBbXG4gICAgICAgICAgICBwYXRoUGF0dGVyblxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfSk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGFkZCBzaW5nbGUgZmFyZ2F0ZSB0YXJnZXQgd2l0aCBubyBjdXN0b21pemF0aW9uJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIC8vIFNldCB1cCB0ZXN0IGZyYW1ld29yayBpbmRlcGVuZGVudCBvZiBvdXIgY29kZSBmb3IgdW5pdCB0ZXN0aW5nXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdFNlcnZpY2UgPSBDcmVhdGVUZXN0RmFyZ2F0ZVNlcnZpY2Uoc3RhY2ssICd0ZXN0LXNlcnZpY2UnLCB0ZXN0VnBjKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuICBjb25zdCB0ZXN0TGlzdGVuZXIgPSBDcmVhdGVUZXN0TGlzdGVuZXIoc3RhY2ssICd0ZXN0LWxpc3RlbmVyJywgdGVzdEFsYik7XG5cbiAgLy8gVGhpcyBpcyB0aGUgY29kZSB3ZSdyZSB0ZXN0aW5nXG4gIGRlZmF1bHRzLkFkZEZhcmdhdGVUYXJnZXQoXG4gICAgc3RhY2ssXG4gICAgJ3Rlc3QtZmFyZ2F0ZS10YXJnZXQnLFxuICAgIHRlc3RMaXN0ZW5lcixcbiAgICB0ZXN0U2VydmljZSxcbiAgICB1bmRlZmluZWQsXG4gICAge1xuICAgICAgdnBjOiB0ZXN0VnBjLFxuICAgICAgcHJvdG9jb2w6IGVsYi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBcbiAgICB9XG4gICk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lcicsIHtcbiAgICBEZWZhdWx0QWN0aW9uczogW1xuICAgICAge1xuICAgICAgICBUYXJnZXRHcm91cEFybjoge1xuICAgICAgICAgIFJlZjogXCJ0ZXN0ZmFyZ2F0ZXRhcmdldHRnMDFGRjVBQTNcIlxuICAgICAgICB9LFxuICAgICAgICBUeXBlOiBcImZvcndhcmRcIlxuICAgICAgfVxuICAgIF0sXG4gIH0pO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXAnLCB7XG4gICAgVGFyZ2V0VHlwZTogXCJpcFwiLFxuICB9KTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkIHR3byBmYXJnYXRlIHRhcmdldHMgd2l0aCBydWxlcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICAvLyBTZXQgdXAgdGVzdCBmcmFtZXdvcmsgaW5kZXBlbmRlbnQgb2Ygb3VyIGNvZGUgZm9yIHVuaXQgdGVzdGluZ1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG4gIGNvbnN0IHRlc3RTZXJ2aWNlID0gQ3JlYXRlVGVzdEZhcmdhdGVTZXJ2aWNlKHN0YWNrLCAndGVzdC1zZXJ2aWNlJywgdGVzdFZwYyk7XG4gIGNvbnN0IHRlc3RBbGIgPSBDcmVhdGVUZXN0TG9hZEJhbGFuY2VyKHN0YWNrLCB0ZXN0VnBjKTtcbiAgY29uc3QgdGVzdExpc3RlbmVyID0gQ3JlYXRlVGVzdExpc3RlbmVyKHN0YWNrLCAndGVzdC1saXN0ZW5lcicsIHRlc3RBbGIpO1xuICBjb25zdCBwYXRoUGF0dGVybiA9ICcqYWRtaW4qJztcblxuICBkZWZhdWx0cy5BZGRGYXJnYXRlVGFyZ2V0KFxuICAgIHN0YWNrLFxuICAgICd0ZXN0LWZhcmdhdGUtdGFyZ2V0JyxcbiAgICB0ZXN0TGlzdGVuZXIsXG4gICAgdGVzdFNlcnZpY2UsXG4gICAgdW5kZWZpbmVkLFxuICAgIHtcbiAgICAgIHZwYzogdGVzdFZwYyxcbiAgICAgIHByb3RvY29sOiBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQXG4gICAgfVxuICApO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGNvZGUgd2UncmUgdGVzdGluZ1xuICBjb25zdCBydWxlUHJvcHMgPSB7XG4gICAgY29uZGl0aW9uczogW2VsYi5MaXN0ZW5lckNvbmRpdGlvbi5wYXRoUGF0dGVybnMoW3BhdGhQYXR0ZXJuXSldLFxuICAgIHByaW9yaXR5OiAxMFxuICB9O1xuICBkZWZhdWx0cy5BZGRGYXJnYXRlVGFyZ2V0KFxuICAgIHN0YWNrLFxuICAgICd0ZXN0LXNlY29uZC1mYXJnYXRlLXRhcmdldCcsXG4gICAgdGVzdExpc3RlbmVyLFxuICAgIHRlc3RTZXJ2aWNlLFxuICAgIHJ1bGVQcm9wcyxcbiAgICB7XG4gICAgICB2cGM6IHRlc3RWcGMsXG4gICAgICBwcm90b2NvbDogZWxiLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFxuICAgIH1cbiAgKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwJywgMik7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGUnLCB7XG4gICAgQ29uZGl0aW9uczogW1xuICAgICAge1xuICAgICAgICBGaWVsZDogXCJwYXRoLXBhdHRlcm5cIixcbiAgICAgICAgUGF0aFBhdHRlcm5Db25maWc6IHtcbiAgICAgICAgICBWYWx1ZXM6IFtcbiAgICAgICAgICAgIHBhdGhQYXR0ZXJuXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBhIGxpc3RlbmVyIHdpdGggZGVmYXVsdHMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCB0ZXN0QWxiID0gQ3JlYXRlVGVzdExvYWRCYWxhbmNlcihzdGFjaywgdGVzdFZwYyk7XG4gIGNvbnN0IHRlc3RDZXJ0ID0gZGVmYXVsdHMuZ2V0RmFrZUNlcnRpZmljYXRlKHN0YWNrLCAnbm90LXJlYWxseS1hLWNlcnQnKTtcblxuICBjb25zdCBsaXN0ZW5lciA9IGRlZmF1bHRzLkFkZExpc3RlbmVyKHN0YWNrLCAndGVzdCcsIHRlc3RBbGIsIHsgY2VydGlmaWNhdGVzOiBbIHRlc3RDZXJ0IF0gfSk7XG5cbiAgLy8gIE5lZWQgdG8gYWRkIGEgdGFyZ2V0IGJlY2F1c2UgYSBsaXN0ZW5lciBpcyBub3QgYWxsb3dlZCB0byBleGlzdCB3aXRob3V0IGEgdGFyZ2V0IG9yIGFjdGlvblxuICBkZWZhdWx0cy5BZGRMYW1iZGFUYXJnZXQoc3RhY2ssICdkdW1teS10YXJnZXQnLCBsaXN0ZW5lciwgQ3JlYXRlVGVzdEZ1bmN0aW9uKHN0YWNrLCAnZHVtbXktZnVuY3Rpb24nKSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIC8vIFRoaXMgc2hvdWxkIGNyZWF0ZSAyIGxpc3RlbmVycywgSFRUUFMgcGx1cyByZWRpcmVjdCBvZiBIVFRQXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lcicsIHtcbiAgICBQcm90b2NvbDogJ0hUVFBTJyxcbiAgfSk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyJywge1xuICAgIFByb3RvY29sOiAnSFRUUCcsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkaW5nIGFuIEhUVFBTIGxpc3RlbmVyIHdpdGggbm8gY2VydCAoZXJyb3IpJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIC8vIFNldCB1cCB0ZXN0IGZyYW1ld29yayBpbmRlcGVuZGVudCBvZiBvdXIgY29kZSBmb3IgdW5pdCB0ZXN0aW5nXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5BZGRMaXN0ZW5lcihzdGFjaywgJ3Rlc3QnLCB0ZXN0QWxiLCB7IH0pO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcignQSBsaXN0ZW5lciB1c2luZyBIVFRQUyBwcm90b2NvbCByZXF1aXJlcyBhIGNlcnRpZmljYXRlJyk7XG59KTtcblxudGVzdCgnVGVzdCBhZGRpbmcgYW4gSFRUUCBsaXN0ZW5lciB3aXRoIGEgY2VydCAoZXJyb3IpJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIC8vIFNldCB1cCB0ZXN0IGZyYW1ld29yayBpbmRlcGVuZGVudCBvZiBvdXIgY29kZSBmb3IgdW5pdCB0ZXN0aW5nXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuICBjb25zdCB0ZXN0Q2VydCA9IGRlZmF1bHRzLmdldEZha2VDZXJ0aWZpY2F0ZShzdGFjaywgJ25vdC1yZWFsbHktYS1jZXJ0Jyk7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkFkZExpc3RlbmVyKHN0YWNrLCAndGVzdCcsIHRlc3RBbGIsIHsgcHJvdG9jb2w6ICdIVFRQJywgY2VydGlmaWNhdGVzOiBbIHRlc3RDZXJ0IF0gfSk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdIVFRQIGxpc3RlbmVycyBjYW5ub3QgdXNlIGEgY2VydGlmaWNhdGUnKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBhIEhUVFAgbGlzdGVuZXInLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCB0ZXN0QWxiID0gQ3JlYXRlVGVzdExvYWRCYWxhbmNlcihzdGFjaywgdGVzdFZwYyk7XG5cbiAgY29uc3QgbGlzdGVuZXIgPSBkZWZhdWx0cy5BZGRMaXN0ZW5lcihzdGFjaywgJ3Rlc3QnLCB0ZXN0QWxiLCB7IHByb3RvY29sOiAnSFRUUCcgfSk7XG5cbiAgLy8gIE5lZWQgdG8gYWRkIGEgdGFyZ2V0IGJlY2F1c2UgYSBsaXN0ZW5lciBpcyBub3QgYWxsb3dlZCB0byBleGlzdCB3aXRob3V0IGEgdGFyZ2V0IG9yIGFjdGlvblxuICBkZWZhdWx0cy5BZGRMYW1iZGFUYXJnZXQoc3RhY2ssICdkdW1teS10YXJnZXQnLCBsaXN0ZW5lciwgQ3JlYXRlVGVzdEZ1bmN0aW9uKHN0YWNrLCAnZHVtbXktZnVuY3Rpb24nKSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lcicsIHtcbiAgICBQcm90b2NvbDogJ0hUVFAnLFxuICB9KTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyJywgMSk7XG59KTtcblxudGVzdCgnVGVzdCBHZXRBY3RpdmVMaXN0ZW5lciB3aXRoIDAgbGlzdGVuZXJzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIC8vIFNldCB1cCB0ZXN0IGZyYW1ld29yayBpbmRlcGVuZGVudCBvZiBvdXIgY29kZSBmb3IgdW5pdCB0ZXN0aW5nXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5HZXRBY3RpdmVMaXN0ZW5lcih0ZXN0QWxiLmxpc3RlbmVycyk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdUaGVyZSBhcmUgbm8gbGlzdGVuZXJzIGluIHRoZSBBTEInKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgR2V0QWN0aXZlTGlzdGVuZXIgd2l0aCAxIGxpc3RlbmVyJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIC8vIFNldCB1cCB0ZXN0IGZyYW1ld29yayBpbmRlcGVuZGVudCBvZiBvdXIgY29kZSBmb3IgdW5pdCB0ZXN0aW5nXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcbiAgY29uc3QgdGVzdEFsYiA9IENyZWF0ZVRlc3RMb2FkQmFsYW5jZXIoc3RhY2ssIHRlc3RWcGMpO1xuXG4gIGRlZmF1bHRzLkFkZExpc3RlbmVyKHN0YWNrLCAndGVzdCcsIHRlc3RBbGIsIHsgcHJvdG9jb2w6ICdIVFRQJyB9KTtcbiAgY29uc3QgbGlzdGVuZXIgPSBkZWZhdWx0cy5HZXRBY3RpdmVMaXN0ZW5lcih0ZXN0QWxiLmxpc3RlbmVycyk7XG5cbiAgZXhwZWN0KChsaXN0ZW5lci5ub2RlLmRlZmF1bHRDaGlsZCBhcyBlbGIuQ2ZuTGlzdGVuZXIpLnByb3RvY29sKS50b0JlKCdIVFRQJyk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IEdldEFjdGl2ZUxpc3RlbmVyIHdpdGggMiBsaXN0ZW5lcnMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgLy8gU2V0IHVwIHRlc3QgZnJhbWV3b3JrIGluZGVwZW5kZW50IG9mIG91ciBjb2RlIGZvciB1bml0IHRlc3RpbmdcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmdldFRlc3RWcGMoc3RhY2spO1xuICBjb25zdCB0ZXN0QWxiID0gQ3JlYXRlVGVzdExvYWRCYWxhbmNlcihzdGFjaywgdGVzdFZwYyk7XG4gIGNvbnN0IHRlc3RDZXJ0ID0gZGVmYXVsdHMuZ2V0RmFrZUNlcnRpZmljYXRlKHN0YWNrLCAnbm90LXJlYWxseS1hLWNlcnQnKTtcblxuICBkZWZhdWx0cy5BZGRMaXN0ZW5lcihzdGFjaywgJ3Rlc3QnLCB0ZXN0QWxiLCB7IGNlcnRpZmljYXRlczogWyB0ZXN0Q2VydCBdIH0pO1xuICBjb25zdCBsaXN0ZW5lciA9IGRlZmF1bHRzLkdldEFjdGl2ZUxpc3RlbmVyKHRlc3RBbGIubGlzdGVuZXJzKTtcblxuICBleHBlY3QoKGxpc3RlbmVyLm5vZGUuZGVmYXVsdENoaWxkIGFzIGVsYi5DZm5MaXN0ZW5lcikucHJvdG9jb2wpLnRvQmUoJ0hUVFBTJyk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IHVzZSBvZiBjZXJ0aWZpY2F0ZUFybnMgZXJyb3InLCAoKSA9PiB7XG4gIGNvbnN0IHByb3BzID0ge1xuICAgIGxpc3RlbmVyUHJvcHM6IHtcbiAgICAgIGNlcnRpZmljYXRlQXJuczogWyAnYXJuMSddLFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tBbGJQcm9wcyhwcm9wcyk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKFwiY2VydGlmaWNhdGVBcm5zIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSBzdXBwbHkgY2VydGlmaWNhdGVzIHVzaW5nIHByb3BzLmxpc3RlbmVyUHJvcHMuY2VydGlmaWNhdGVzXFxuXCIpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYmFkIGZpcnN0IGxpc3RlbmVyIGVycm9yJywgKCkgPT4ge1xuICBjb25zdCBwcm9wcyA9IHtcbiAgICBleGlzdGluZ0xvYWRCYWxhbmNlck9iajoge1xuICAgICAgbGlzdGVuZXJzOiBbXSxcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrQWxiUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIldoZW4gYWRkaW5nIHRoZSBmaXJzdCBsaXN0ZW5lciBhbmQgdGFyZ2V0IHRvIGEgbG9hZCBiYWxhbmNlciwgbGlzdGVuZXJQcm9wcyBtdXN0IGJlIHNwZWNpZmllZCBhbmQgaW5jbHVkZSBhdCBsZWFzdCBhIGNlcnRpZmljYXRlIG9yIHByb3RvY29sOiBIVFRQXFxuXCIpO1xuXG4gIGNvbnN0IGFwcDIgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tBbGJQcm9wcyh7fSk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcDIpLnRvVGhyb3dFcnJvcihcIldoZW4gYWRkaW5nIHRoZSBmaXJzdCBsaXN0ZW5lciBhbmQgdGFyZ2V0IHRvIGEgbG9hZCBiYWxhbmNlciwgbGlzdGVuZXJQcm9wcyBtdXN0IGJlIHNwZWNpZmllZCBhbmQgaW5jbHVkZSBhdCBsZWFzdCBhIGNlcnRpZmljYXRlIG9yIHByb3RvY29sOiBIVFRQXFxuXCIpO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgc2Vjb25kIHRhcmdldCB3aXRoIG5vIHJ1bGVzIGVycm9yJywgKCkgPT4ge1xuICBjb25zdCBwcm9wcyA9IHtcbiAgICBleGlzdGluZ0xvYWRCYWxhbmNlck9iajoge1xuICAgICAgbGlzdGVuZXJzOiBbICdmYWtlIGxpc3RlbmVyJ10sXG4gICAgfSxcbiAgICBleGlzdGluZ1ZwYzogeyBmYWtlOiAndnBjJyB9XG4gIH07XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrQWxiUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIldoZW4gYWRkaW5nIGEgc2Vjb25kIHRhcmdldCB0byBhbiBleGlzdGluZyBsaXN0ZW5lciwgdGhlcmUgbXVzdCBiZSBydWxlcyBwcm92aWRlZFxcblwiKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGV4aXN0aW5nIExvYWQgQmFsYW5jZXIgd2l0aCBubyBWUEMgcHJvdmlkZWQgZXJyb3InLCAoKSA9PiB7XG4gIGNvbnN0IHByb3BzID0ge1xuICAgIGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqOiB7XG4gICAgICBuYW1lOiAncGxhY2Vob2xkZXInLFxuICAgICAgbGlzdGVuZXJzOiBbIF1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrQWxiUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcihcIkFuIGV4aXN0aW5nIEFMQiBpcyBhbHJlYWR5IGluIGEgVlBDLCB0aGF0IFZQQyBtdXN0IGJlIHByb3ZpZGVkIGluIHByb3BzLmV4aXN0aW5nVnBjIGZvciB0aGUgcmVzdCBvZiB0aGUgY29uc3RydWN0IHRvIHVzZS5cXG5cIik7XG59KTtcblxudGVzdCgnVGVzdCBzZW5kaW5nIGxpc3RlbmVyUHJvcHMgdG8gZXhpc3RpbmdMaXN0ZW5lciBlcnJvcicsICgpID0+IHtcbiAgY29uc3QgcHJvcHMgPSB7XG4gICAgZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmo6IHtcbiAgICAgIGxpc3RlbmVyczogWyAncGxhY2Vob2xkZXInIF1cbiAgICB9LFxuICAgIGxpc3RlbmVyUHJvcHM6IHsgdmFsOiAncGxhY2Vob2xkZXInIH1cbiAgfTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tBbGJQcm9wcyhwcm9wcyk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKFwiVGhpcyBsb2FkIGJhbGFuY2VyIGFscmVhZHkgaGFzIGEgbGlzdGVuZXIsIGxpc3RlbmVyUHJvcHMgbWF5IG5vdCBiZSBzcGVjaWZpZWRcXG5cIik7XG59KTtcblxudGVzdCgnVGVzdCBzZW5kaW5nIGxvYWRCYWxhbmNlclByb3BzIGFuZCBleGlzdGluZ0xvYWRCYWxhbmNlck9iaiBpcyBhbiBlcnJvcicsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICBjb25zdCB2cGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogZGVmYXVsdHMuRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBjb25zdCBleGlzdGluZ0xvYWRCYWxhbmNlciA9IG5ldyBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIoc3RhY2ssICdsb2FkLWJhbGFuY2VyJywge1xuICAgIHZwYyxcbiAgICBpbnRlcm5ldEZhY2luZzogdHJ1ZSxcbiAgICBsb2FkQmFsYW5jZXJOYW1lOiAndW5pcXVlLW5hbWUnXG4gIH0pO1xuXG4gIGNvbnN0IHByb3BzID0ge1xuICAgIHZwYyxcbiAgICBleGlzdGluZ0xvYWRCYWxhbmNlck9iajogZXhpc3RpbmdMb2FkQmFsYW5jZXIsXG4gICAgbG9hZEJhbGFuY2VyUHJvcHM6IHtcbiAgICAgIGxvYWRCYWxhbmNlck5hbWU6ICduZXctbG9hZGJhbGFuY2VyJyxcbiAgICAgIHZwYyxcbiAgICAgIGludGVybmV0RmFjaW5nOiB0cnVlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0FsYlByb3BzKHByb3BzKTtcbiAgfTtcblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoXCJFcnJvciAtIEVpdGhlciBwcm92aWRlIGxvYWRCYWxhbmNlclByb3BzIG9yIGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqLCBidXQgbm90IGJvdGguXFxuXCIpO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgc2VuZGluZyBhbGJMb2dnaW5nQnVja2V0UHJvcHMgd2hlbiBsb2dBbGJBY2Nlc3NMb2dzIGlzIGZhbHNlIGlzIGFuIGVycm9yJywgKCkgPT4ge1xuXG4gIGNvbnN0IHByb3BzID0ge1xuICAgIGxvZ0FsYkFjY2Vzc0xvZ3M6IGZhbHNlLFxuICAgIGFsYkxvZ2dpbmdCdWNrZXRQcm9wczoge30sXG4gICAgbG9hZEJhbGFuY2VyUHJvcHM6IHtcbiAgICAgIGxvYWRCYWxhbmNlck5hbWU6ICduZXctbG9hZGJhbGFuY2VyJyxcbiAgICAgIGludGVybmV0RmFjaW5nOiB0cnVlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0FsYlByb3BzKHByb3BzKTtcbiAgfTtcblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoXCJFcnJvciAtIElmIGxvZ0FsYkFjY2Vzc0xvZ3MgaXMgZmFsc2UsIHN1cHBseWluZyBhbGJMb2dnaW5nQnVja2V0UHJvcHMgaXMgaW52YWxpZC5cXG5cIik7XG59KTtcblxudGVzdCgnVGVzdCBzZW5kaW5nIFZQQyBpbiBsb2FkQmFsYW5jZXJQcm9wcyBlcnJvcicsICgpID0+IHtcbiAgY29uc3QgcHJvcHMgPSB7XG4gICAgbG9hZEJhbGFuY2VyUHJvcHM6IHtcbiAgICAgIHZwYzogeyB2YWw6ICdwbGFjZWhvbGRlcicgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tBbGJQcm9wcyhwcm9wcyk7XG4gIH07XG5cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdTcGVjaWZ5IGFueSBleGlzdGluZyBWUEMgYXQgdGhlIGNvbnN0cnVjdCBsZXZlbCwgbm90IHdpdGhpbiBsb2FkQmFsYW5jZXJQcm9wcy5cXG4nKTtcbn0pO1xuXG5mdW5jdGlvbiBDcmVhdGVUZXN0TG9hZEJhbGFuY2VyKHN0YWNrOiBTdGFjaywgdnBjOiBlYzIuSVZwYyk6IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB7XG4gIHJldHVybiBuZXcgZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyKHN0YWNrLCAnbG9hZC1iYWxhbmNlcicsIHtcbiAgICB2cGMsXG4gICAgaW50ZXJuZXRGYWNpbmc6IHRydWUsXG4gICAgbG9hZEJhbGFuY2VyTmFtZTogJ3VuaXF1ZS1uYW1lJ1xuICB9KTtcbn1cblxuZnVuY3Rpb24gQ3JlYXRlVGVzdEZ1bmN0aW9uKHN0YWNrOiBTdGFjaywgaWQ6IHN0cmluZyk6IGxhbWJkYS5GdW5jdGlvbiB7XG4gIHJldHVybiBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCBpZCwge1xuICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgIHJ1bnRpbWU6IGRlZmF1bHRzLkNPTU1FUkNJQUxfUkVHSU9OX0xBTUJEQV9OT0RFX1JVTlRJTUUsXG4gICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBDcmVhdGVUZXN0RmFyZ2F0ZVNlcnZpY2Uoc3RhY2s6IFN0YWNrLCBpZDogc3RyaW5nLCB2cGM6IGVjMi5JVnBjKTogZWNzLkZhcmdhdGVTZXJ2aWNlIHtcbiAgY29uc3QgY3JlYXRlRmFyZ2F0ZVNlcnZpY2VSZXNwb25zZSA9IGRlZmF1bHRzLkNyZWF0ZUZhcmdhdGVTZXJ2aWNlKHN0YWNrLCBgJHtpZH0tZmctc3ZjYCwge1xuICAgIGNvbnN0cnVjdFZwYzogdnBjLFxuICAgIGNsaWVudENsdXN0ZXJQcm9wczogdW5kZWZpbmVkLFxuICAgIGVjclJlcG9zaXRvcnlBcm46ICdhcm46YXdzOmVjcjp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOnJlcG9zaXRvcnkvZmFrZS1yZXBvJyxcbiAgICBlY3JJbWFnZVZlcnNpb246ICdsYXRlc3QnXG4gIH0pO1xuICByZXR1cm4gY3JlYXRlRmFyZ2F0ZVNlcnZpY2VSZXNwb25zZS5zZXJ2aWNlO1xufVxuXG5mdW5jdGlvbiBDcmVhdGVUZXN0TGlzdGVuZXIoc3RhY2s6IFN0YWNrLCBpZDogc3RyaW5nLCBhbGI6IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcikge1xuICByZXR1cm4gbmV3IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyKHN0YWNrLCBpZCwge1xuICAgIGxvYWRCYWxhbmNlcjogYWxiLFxuICAgIHByb3RvY29sOiBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQXG4gIH0pO1xufVxuIl19