@rudderstack/integrations-lib 0.2.24 → 0.2.25

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.
@@ -2113,5 +2113,148 @@ describe('misc', () => {
2113
2113
  expect((0, misc_1.uuidv5)('')).toBe('1c7fcf13-74af-5595-8ee9-d72be6c1ac42');
2114
2114
  });
2115
2115
  });
2116
+ describe('flattenQueryParams', () => {
2117
+ const testCases = [
2118
+ {
2119
+ name: 'flatten array values to first elements',
2120
+ input: {
2121
+ key1: ['value1'],
2122
+ key2: ['value2'],
2123
+ key3: [123],
2124
+ },
2125
+ expected: {
2126
+ key1: 'value1',
2127
+ key2: 'value2',
2128
+ key3: 123,
2129
+ },
2130
+ },
2131
+ {
2132
+ name: 'handle null input',
2133
+ input: null,
2134
+ expected: {},
2135
+ },
2136
+ {
2137
+ name: 'handle undefined input',
2138
+ input: undefined,
2139
+ expected: {},
2140
+ },
2141
+ {
2142
+ name: 'handle empty object',
2143
+ input: {},
2144
+ expected: {},
2145
+ },
2146
+ {
2147
+ name: 'ignore null/undefined array elements',
2148
+ input: {
2149
+ key1: [undefined],
2150
+ key2: [null],
2151
+ key3: [undefined, 'value'],
2152
+ key4: [null, 'value'],
2153
+ },
2154
+ expected: {
2155
+ key3: [undefined, 'value'],
2156
+ key4: [null, 'value'],
2157
+ },
2158
+ },
2159
+ {
2160
+ name: 'handle mixed type values in arrays',
2161
+ input: {
2162
+ number: [42],
2163
+ string: ['test'],
2164
+ boolean: [true],
2165
+ object: [{ nested: 'value' }],
2166
+ date: [new Date('2024-01-01')],
2167
+ },
2168
+ expected: {
2169
+ number: 42,
2170
+ string: 'test',
2171
+ boolean: true,
2172
+ object: { nested: 'value' },
2173
+ date: new Date('2024-01-01'),
2174
+ },
2175
+ },
2176
+ {
2177
+ name: 'handle empty arrays',
2178
+ input: {
2179
+ key1: [],
2180
+ key2: ['value'],
2181
+ key3: [],
2182
+ },
2183
+ expected: {
2184
+ key2: 'value',
2185
+ },
2186
+ },
2187
+ {
2188
+ name: 'keep non-array values unchanged',
2189
+ input: {
2190
+ string: 'direct string',
2191
+ number: 42,
2192
+ boolean: true,
2193
+ object: { test: 'value' },
2194
+ array: ['first', 'second'],
2195
+ },
2196
+ expected: {
2197
+ string: 'direct string',
2198
+ number: 42,
2199
+ boolean: true,
2200
+ object: { test: 'value' },
2201
+ array: ['first', 'second'],
2202
+ },
2203
+ },
2204
+ {
2205
+ name: 'handle mixed array and non-array values',
2206
+ input: {
2207
+ arrayValue: ['first'],
2208
+ emptyArray: [],
2209
+ directValue: 'string',
2210
+ nullValue: null,
2211
+ undefinedValue: undefined,
2212
+ },
2213
+ expected: {
2214
+ arrayValue: 'first',
2215
+ directValue: 'string',
2216
+ },
2217
+ },
2218
+ {
2219
+ name: 'handle nested arrays',
2220
+ input: {
2221
+ nested: [
2222
+ [1, 2],
2223
+ [3, 4],
2224
+ ],
2225
+ mixed: [['a', 'b'], 'c'],
2226
+ },
2227
+ expected: {
2228
+ nested: [
2229
+ [1, 2],
2230
+ [3, 4],
2231
+ ],
2232
+ mixed: [['a', 'b'], 'c'],
2233
+ },
2234
+ },
2235
+ {
2236
+ name: 'handle special values in arrays',
2237
+ input: {
2238
+ nan: [NaN],
2239
+ infinity: [Infinity],
2240
+ negInfinity: [-Infinity],
2241
+ zero: [0],
2242
+ negZero: [-0],
2243
+ },
2244
+ expected: {
2245
+ nan: NaN,
2246
+ infinity: Infinity,
2247
+ negInfinity: -Infinity,
2248
+ zero: 0,
2249
+ negZero: -0,
2250
+ },
2251
+ },
2252
+ ];
2253
+ testCases.forEach(({ name, input, expected }) => {
2254
+ it(`should ${name}`, () => {
2255
+ expect((0, misc_1.flattenQueryParams)(input)).toEqual(expected);
2256
+ });
2257
+ });
2258
+ });
2116
2259
  });
2117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21pc2MudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQWlDZ0I7QUFDaEIsbUNBQStDO0FBRS9DLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLHFGQUFxRjtRQUNyRixFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1lBQzFFLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzRkFBc0Y7UUFDdEYsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILDhFQUE4RTtRQUM5RSxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRUFBK0U7UUFDL0UsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLElBQUksQ0FB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RUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxR0FBcUc7UUFDckcsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtZQUM1RixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvR0FBb0c7UUFDcEcsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEs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QUcsRUFBRTtZQUN4SSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcs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b3IsXG4gIGZsYXR0ZW5NYXAsXG4gIGdldFR5cGUsXG4gIGlzQmxhbmssXG4gIGlzRGVmaW5lZCxcbiAgaXNEZWZpbmVkQW5kTm90TnVsbCxcbiAgaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5LFxuICBpc05vdEVtcHR5LFxuICBpc05vdE51bGwsXG4gIGlzUHJpbWl0aXZlLFxuICBpc1ZhbGlkVXJsLFxuICByZW1vdmVOdWxsVmFsdWVzLFxuICByZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMsXG4gIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMsXG4gIHJlbW92ZVVuZGVmaW5lZFZhbHVlcyxcbiAgc3RyaXBUcmFpbGluZ1NsYXNoLFxuICBpc09iamVjdCxcbiAgaXNFbXB0eSxcbiAgaXNFbXB0eU9iamVjdCxcbiAgaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5LFxuICByZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCxcbiAgZ2V0SGFzaEZyb21BcnJheSxcbiAgZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUsXG4gIGZsYXR0ZW5Kc29uLFxuICBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMsXG4gIGdldE9mZnNldEluU2VjLFxuICBmb3JtYXRUaW1lU3RhbXAsXG4gIGhhc2hUb1NoYTI1NixcbiAgZ2VuZXJhdGVVVUlELFxuICBjb252ZXJ0VG9TdHJpbmcsXG4gIHV1aWR2NSxcbiAgZ2VuZXJhdGVSYW5kb21TdHJpbmcsXG59IGZyb20gJy4vbWlzYyc7XG5pbXBvcnQgeyBCYXNlVGVzdENhc2UsIGZpbHRlciB9IGZyb20gJy4vdGVzdHMnO1xuXG5kZXNjcmliZSgnbWlzYycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGRlZmluZWQgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKDUpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKCdoZWxsbycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCgnJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBudW1iZXIgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCgxMCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGJvb2xlYW4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgYm9vbGVhbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKHRydWUpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIGFuIHVuZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGFuIHVuZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKHVuZGVmaW5lZCkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKG51bGwpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCh7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChbXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKE5hTikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoKCkgPT4ge30pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoU3ltYm9sKCkpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVG8gdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IE1hcCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IE1hcCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChtYXApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIG9iamVjdGl2ZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IFNldCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBTZXQgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNldE9iaiA9IG5ldyBTZXQoKTtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoc2V0T2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBvYmplY3RpdmUgb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBXZWFrTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IFdlYWtNYXAgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGVtcHR5V2Vha01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKGVtcHR5V2Vha01hcCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc05vdEVtcHR5JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBhcnJheXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShbMSwgMiwgM10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBhcnJheXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyB0cnVlIGZvciBub24tZW1wdHkgb2JqZWN0c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW5wdXQgaXMgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSh7IGtleTogJ3ZhbHVlJyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgZW1wdHkgb2JqZWN0c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoe30pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyB0cnVlIGZvciBub24tZW1wdHkgc3RyaW5nc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW5wdXQgaXMgYSBub24tZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgnaGVsbG8nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgZW1wdHkgc3RyaW5nc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoJycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3Igbm9uLXplcm8gbnVtYmVyc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGEgbm9uLXplcm8gbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSg0Mik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciB6ZXJvXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgemVybycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoMCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkobnVsbCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHVuZGVmaW5lZCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBOYU5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KE5hTik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBmYWxzZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgZmFsc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHRydWUgYm9vbGVhblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGEgdHJ1ZSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNOb3ROdWxsJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLW51bGwgdmFsdWUgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLW51bGwgdmFsdWUgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCgndGVzdCcpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSB0cnV0aHkgdmFsdWUgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgdHJ1dGh5IHZhbHVlIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKCcnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKDEyMykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKHRydWUpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBudWxsIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwobnVsbCkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyBmYWxzZSB3aGVuIHVuZGVmaW5lZCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHVuZGVmaW5lZCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKHVuZGVmaW5lZCkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCh7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChbXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoKCkgPT4ge30pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChOYU4pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoU3ltYm9sKCkpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKCgpID0+IHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoTmFOKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woKTtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoc3ltYm9sKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZEFuZE5vdE51bGwnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKCd0ZXN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG51bWJlciB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBudW1iZXIgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgxMjMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh7IGtleTogJ3ZhbHVlJyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBhcnJheSB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gYXJyYXkgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChbMSwgMiwgM10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoJycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKFtdKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKHt9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwodW5kZWZpbmVkKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwobnVsbCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoTmFOKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSgnaGVsbG8nKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eShbMSwgMiwgM10pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhIGJvb2xlYW4gdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhIGJvb2xlYW4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KHRydWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgYSBudW1iZXIgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhIG51bWJlciB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoNDIpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSgnJykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KHt9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KFtdKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBudWxsJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eShudWxsKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYSBzdHJpbmcgd2l0aCBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBzdHJpbmcgd2l0aCBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoJyAgICcpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIG9ubHkgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBvbmx5IG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoeyBwcm9wMTogbnVsbCwgcHJvcDI6IHVuZGVmaW5lZCB9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzQmxhbmsnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKCcnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoW10pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh7fSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBub24tZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJ2hlbGxvJykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKFsxLCAyLCAzXSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoeyBrZXk6ICd2YWx1ZScgfSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYSBudWxsIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhudWxsKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIHRydWUgZm9yIGFuIHVuZGVmaW5lZCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh1bmRlZmluZWQpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgYm9vbGVhbiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsodHJ1ZSkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoZmFsc2UpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIG51bWJlciB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuaygxMjMpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpc0JsYW5rKDApKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpc0JsYW5rKC0xKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSB3aGl0ZXNwYWNlIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSB3aGl0ZXNwYWNlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKCcgICAnKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuaygnXFx0JykpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJ1xcbicpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBOYU4gdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoTmFOKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW1vdmVVbmRlZmluZWRWYWx1ZXMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3QgaWYgaXQgaXMgbm90IGFuIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBub3QgYW4gb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAxMjM7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgYWxsIHZhbHVlcyBhcmUgZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IDEsIGI6ICdoZWxsbycsIGM6IHRydWUgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIHZhbHVlcyBhcmUgZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBzb21lIHZhbHVlcyBhcmUgZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiAxLCBiOiB1bmRlZmluZWQsIGM6IHRydWUgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBjOiB0cnVlIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogMSwgYzogdW5kZWZpbmVkIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEgfSwgZDogMiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBudWxsIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEsIGM6IG51bGwgfSwgZDogMiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5nc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiAnJyB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxLCBjOiAnJyB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBmYWxzZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIGZhbHNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogMSwgYzogZmFsc2UgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogZmFsc2UgfSwgZDogMiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgemVyb1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIHplcm8nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiAwIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEsIGM6IDAgfSwgZDogMiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgTmFOXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogMSwgYzogTmFOIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEsIGM6IE5hTiB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW1vdmVOdWxsVmFsdWVzJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGVtcHR5IG9iamVjdCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIG9iamVjdCB3aXRoIG5vIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gaW5wdXQgaGFzIG5vIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IDEsIGI6ICdoZWxsbycsIGM6IFsxLCAyLCAzXSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGI6ICdoZWxsbycsIGM6IFsxLCAyLCAzXSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyB1bmRlZmluZWQgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgd2hlbiBpbnB1dCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nIHdoZW4gaW5wdXQgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdoZWxsbyc7XG4gICAgICBjb25zdCBleHBlY3RlZCA9ICdoZWxsbyc7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBudW1iZXIgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBudW1iZXIgd2hlbiBpbnB1dCBpcyBhIG51bWJlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gMTIzO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSAxMjM7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gYXJyYXkgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBhcnJheSB3aGVuIGlucHV0IGlzIGFuIGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgMiwgM107XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgJzAnOiAxLCAnMSc6IDIsICcyJzogMyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIG9iamVjdCB3aXRoIG9ubHkgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBpbnB1dCBoYXMgb25seSBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiBudWxsLCBiOiBudWxsLCBjOiBudWxsIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIG9iamVjdCB3aXRoIG5lc3RlZCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIG5lc3RlZCBudWxsIHZhbHVlcyBmcm9tIHRoZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiBudWxsIH0sIGM6IHsgZDogeyBlOiBudWxsIH0gfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHt9LCBjOiB7IGQ6IHt9IH0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbmVzdGVkIG5vbi1udWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGlucHV0IGhhcyBuZXN0ZWQgbm9uLW51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogMSB9LCBjOiB7IGQ6IHsgZTogJ2hlbGxvJyB9IH0gfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEgfSwgYzogeyBkOiB7IGU6ICdoZWxsbycgfSB9IH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbWl4ZWQgbmVzdGVkIG51bGwgYW5kIG5vbi1udWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIG5lc3RlZCBudWxsIHZhbHVlcyBhbmQga2VlcCBub24tbnVsbCB2YWx1ZXMgaW4gdGhlIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IG51bGwsIGM6IDEgfSwgZDogeyBlOiBudWxsLCBmOiAnaGVsbG8nIH0gfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGM6IDEgfSwgZDogeyBmOiAnaGVsbG8nIH0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbnVsbCB2YWx1ZXMgYW5kIGZhbHN5IG5vbi1udWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIG51bGwgdmFsdWVzIGFuZCBrZWVwIGZhbHN5IG5vbi1udWxsIHZhbHVlcyBpbiB0aGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwsIGI6IGZhbHNlLCBjOiAwLCBkOiAnJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGI6IGZhbHNlLCBjOiAwLCBkOiAnJyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogJ3Rlc3QnLCBjOiB0cnVlIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKG9iaik7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBkZWZpbmVkIGFuZCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBvYmplY3Qgd2l0aG91dCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBkZWZpbmVkIGFuZCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogbnVsbCwgYzogJ3Rlc3QnLCBkOiBudWxsIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYzogJ3Rlc3QnIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIHBhc3NlZCBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogdW5kZWZpbmVkLCBjOiAndGVzdCcsIGQ6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBjOiAndGVzdCcgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSB3aGVuIHBhc3NlZCBhIG5vbi1vYmplY3QgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZSB3aGVuIHBhc3NlZCBhIG5vbi1vYmplY3QgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IDEyMztcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKHZhbHVlKSkudG9FcXVhbCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aXRoIG5lc3RlZCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggbmVzdGVkIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2l0aCBuZXN0ZWQgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIG5lc3RlZCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiB7IGM6ICd0ZXN0JywgZDogdHJ1ZSB9LCBlOiAndGVzdCcgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHRydWUgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBvYmplY3Qgd2l0aG91dCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6IG51bGwsIGM6ICd0ZXN0JywgZDogbnVsbCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMnLCAoKSA9PiB7XG4gICAgLy8gVE9ETzogTkVFRCBUTyBGSVggVEhJUyBURVNUU1xuICAgIC8vIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdoZW4gYWxsIHZhbHVlcyBhcmUgZGVmaW5lZCwgbm90IG51bGwsIGFuZCBub3QgZW1wdHlcbiAgICAvLyBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkLCBub3QgbnVsbCwgYW5kIG5vdCBlbXB0eScsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IG9iaiA9IHtcbiAgICAvLyAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgIC8vICAgICBwcm9wMjogMTIzLFxuICAgIC8vICAgICBwcm9wMzogWzEsIDIsIDNdLFxuICAgIC8vICAgICBwcm9wNDogeyBuZXN0ZWRQcm9wOiAnbmVzdGVkVmFsdWUnIH0sXG4gICAgLy8gICB9O1xuICAgIC8vICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0VxdWFsKG9iaik7XG4gICAgLy8gfSk7XG5cbiAgICAvLyAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQgYW5kIG5vdCBudWxsXG4gICAgLy8gaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gYWxsIHZhbHVlcyBhcmUgZGVmaW5lZCBhbmQgbm90IG51bGwnLCAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBvYmogPSB7XG4gICAgLy8gICAgIHByb3AxOiAndmFsdWUxJyxcbiAgICAvLyAgICAgcHJvcDI6IDEyMyxcbiAgICAvLyAgICAgcHJvcDM6IFsxLCAyLCAzXSxcbiAgICAvLyAgICAgcHJvcDQ6IHsgbmVzdGVkUHJvcDogJ25lc3RlZFZhbHVlJyB9LFxuICAgIC8vICAgfTtcbiAgICAvLyAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIC8vIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCB3aGVuIHRoZSBpbnB1dCBpcyBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0gbnVsbDtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB1bmRlZmluZWQ7XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IG9iamVjdCBoYXMgb25seSBlbXB0eSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgb2JqZWN0IGhhcyBvbmx5IGVtcHR5IHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgcHJvcDE6ICcnLFxuICAgICAgICBwcm9wMjogJyAgICAnLFxuICAgICAgICBwcm9wMzogW10sXG4gICAgICAgIHByb3A0OiB7fSxcbiAgICAgIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwoeyBwcm9wMjogJyAgICAnIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBvYmplY3QgYW5kIGRvZXMgbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBuZXcgb2JqZWN0IGFuZCBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgIHByb3AxOiAndmFsdWUxJyxcbiAgICAgICAgcHJvcDI6IG51bGwsXG4gICAgICAgIHByb3AzOiAnJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBwcm9wMTogJ3ZhbHVlMScgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZShvYmopO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmxhdHRlbk1hcCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnB1dCBpZiBpdCBpcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGlucHV0IHdoZW4gaXQgaXMgbm90IGFuIGFycmF5IG9yIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gNTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheVxuICAgIC8vIE9ubHkgMSBsZXZlbCBvZiBmbGF0dGVuaW5nIGlzIHBlcmZvcm1lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgWzIsIDNdLCBbNCwgWzUsIDZdXV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsIDIsIDMsIDQsIFs1LCA2XV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggYXJyYXkgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggYXJyYXkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IFsxLCAyXSwgYjogWzMsIDRdIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsIDIsIDMsIDRdKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgYXJyYXkgaWYgdGhlIGlucHV0IGlzIGFuIGVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFtdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgY29sbGVjdGlvbiBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgY29sbGVjdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgd2l0aCBudWxsIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBudWxsIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbbnVsbF07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW251bGxdKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGggbnVsbCB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggbnVsbCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIG9iamVjdCB3aXRoIG51bGwgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggbnVsbCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiBudWxsIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW251bGxdKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgd2l0aCB1bmRlZmluZWQgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdW5kZWZpbmVkIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgd2l0aCB1bmRlZmluZWQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB1bmRlZmluZWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFt1bmRlZmluZWRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFt1bmRlZmluZWRdKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdW5kZWZpbmVkIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGNvbGxlY3Rpb24gd2l0aCB1bmRlZmluZWQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdW5kZWZpbmVkIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHVuZGVmaW5lZCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFt1bmRlZmluZWRdKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgd2l0aCBOYU4gdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggTmFOIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgd2l0aCBOYU4gdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBOYU4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFtOYU5dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtOYU5dKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGggTmFOIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGNvbGxlY3Rpb24gd2l0aCBOYU4gdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggTmFOIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IE5hTiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtOYU5dKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgd2l0aCBlbXB0eSBzdHJpbmcgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggZW1wdHkgc3RyaW5nIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgd2l0aCBlbXB0eSBzdHJpbmcgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBlbXB0eSBzdHJpbmcgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsnJ107XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWycnXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsICd0d28nLCB0cnVlLCB7IG5hbWU6ICdKb2huJyB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgJ3R3bycsIHRydWUsIHsgbmFtZTogJ0pvaG4nIH1dKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgY29sbGVjdGlvbiB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSwgaXNTdHVkZW50OiB0cnVlLCBob2JiaWVzOiBbJ3JlYWRpbmcnLCAncGFpbnRpbmcnXSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsnSm9obicsIDI1LCB0cnVlLCAncmVhZGluZycsICdwYWludGluZyddKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgWzIsIFszLCA0XV0sIHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1IH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAyLCBbMywgNF0sIHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1IH1dKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgJ3R3bycsIHRydWUsIHsgbmFtZTogJ0pvaG4nIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1LCBpc1N0dWRlbnQ6IHRydWUsIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWydKb2huJywgMjUsIHRydWUsICdyZWFkaW5nJywgJ3BhaW50aW5nJ10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgWzMsIDRdXSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsIDIsIFszLCA0XSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYmFzZTY0Q29udmVydG9yJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGVtcHR5IHN0cmluZyBpbnB1dCBhbmQgcmV0dXJucyBhbiBlbXB0eSBiYXNlNjQgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYmFzZTY0IHN0cmluZyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyB0byBiYXNlNjQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAn44GT44KT44Gr44Gh44GvJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzQ0R1Q0NEtUNDRHcjQ0R2g0NEd2JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBjb252ZXJ0cyBpdCB0byBiYXNlNjQgZm9ybWF0XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGEgc3RyaW5nIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIGJhc2U2NCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICchQCMkJV4mKigpJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ0lVQWpKQ1ZlSmlvb0tRPT0nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0Q29udmVydG9yKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgaW5wdXQgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyAgIEhlbGxvIFdvcmxkICAgJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ0lDQWdTR1ZzYkc4Z1YyOXliR1FnSUNBPSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIHN0cmluZyBpbnB1dCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBjb252ZXJ0cyBpdCB0byBiYXNlNjQgZm9ybWF0XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGEgc3RyaW5nIHdpdGggbGluZSBicmVha3MgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ0hlbGxvXFxuV29ybGQnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnU0dWc2JHOEtWMjl5YkdRPSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkVXJsJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgdmFsaWQgVVJMIG9iamVjdCByZXR1cm5zIHRoZSBzYW1lIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCgnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nKTtcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCk/LnRvSlNPTigpKS50b0JlKHVybC50b0pTT04oKSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycyByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbT9wYXJhbTE9dmFsdWUxJnBhcmFtMj12YWx1ZTInO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIGhhc2ggcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGEgaGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbSNzZWN0aW9uMSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgcG9ydCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBwb3J0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tOjgwODAnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VybmFtZTpwYXNzd29yZEBleGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhbiBlbXB0eSBzdHJpbmcgcmV0dXJucyBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGdpdmVuIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICcnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gJ2lzVmFsaWRVcmwnIHJldHVybnMgbnVsbCB3aGVuIGdpdmVuIGFuIGludmFsaWQgVVJMIHN0cmluZy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYW4gaW52YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2ludmFsaWQtdXJsJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIFVSTCB3aXRoIGEgZGlmZmVyZW50IHByb3RvY29sIHJldHVybnMgdmFsaWQgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnZnRwOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIGludmFsaWQgVVJMIHdpdGggYW4gaW52YWxpZCBwb3J0IHJldHVybnMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGFuIGludmFsaWQgcG9ydCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbTphYmMnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBpbnZhbGlkIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZXR1cm5zIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggdXNlcm5hbWUgYW5kIHBhc3N3b3JkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vdXNlcm5hbWU6cGFzc3dvcmRAZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIHN1YmRvbWFpbiByZXR1cm5zIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhbiBpbnZhbGlkIHN1YmRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL2ludmFsaWQuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBwYXRoIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBwYXRoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3BhdGgnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBzdWJkb21haW4gcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHN1YmRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3N1YmRvbWFpbi5leGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpcFRyYWlsaW5nU2xhc2gnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcgaWYgaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHN0cmluZyB3aGVuIGl0IGRvZXMgbm90IGVuZCB3aXRoICcvJ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBpdFxuICAgIGl0KFwic2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgJy8nIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGl0XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIG9ubHkgb25lIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBtdWx0aXBsZVxuICAgIGl0KFwic2hvdWxkIHJlbW92ZSBvbmx5IG9uZSB0cmFpbGluZyAnLycgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggbXVsdGlwbGVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8vJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlLycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG9ubHkgJy8nXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZyB3aGVuIGl0IGNvbnRhaW5zIG9ubHkgJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHN0cmluZyBpZiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nIHdoZW4gaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBhIHN0cmluZyBpZiBpdCBleGlzdHNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBhIHN0cmluZyBpZiBpdCBleGlzdHNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzIGZyb20gYSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIHdoZW4gdGhleSBleGlzdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGV4aXN0c1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGVuZHMgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZW1vdmUgdGhlIHRyYWlsaW5nIHNsYXNoIHdoZW4gdGhlIHN0cmluZyBlbmRzIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ByaW1pdGl2ZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgYSBwcmltaXRpdmUgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSgnaGVsbG8nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgYSBwcmltaXRpdmUgbnVtYmVyXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSgxMjMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHByaW1pdGl2ZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIHRydWUgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYW4gaW5zdGFuY2Ugb2YgYSBub24tcHJpbWl0aXZlIHdyYXBwZXIgY2xhc3MgKERhdGUpXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBub24tcHJpbWl0aXZlIHdyYXBwZXIgY2xhc3MgKERhdGUpJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUobmV3IERhdGUoKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYW4gaW5zdGFuY2Ugb2YgYSBjdXN0b20gY2xhc3NcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBhIGN1c3RvbSBjbGFzcycsICgpID0+IHtcbiAgICAgIGNsYXNzIEN1c3RvbUNsYXNzIHt9XG4gICAgICBjb25zdCBhcmcgPSBuZXcgQ3VzdG9tQ2xhc3MoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKGFyZyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYSBmdW5jdGlvbiB3aXRoIHByb3BlcnRpZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIGZ1bmN0aW9uIHdpdGggcHJvcGVydGllcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7fTtcbiAgICAgIGZ1bmMucHJvcGVydHkgPSAndmFsdWUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUoZnVuYyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHN5bWJvbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYXJndW1lbnQgaXMgYSBzeW1ib2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShTeW1ib2woJ3Rlc3QnKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VHlwZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBzdHJpbmcgd2hlbiB0aGUgaW5wdXQgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdoZWxsbyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3N0cmluZycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZSBmb3IgbnVtYmVyIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVtYmVyIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSA0MjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnbnVtYmVyJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBib29sZWFuIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYm9vbGVhbiB3aGVuIHRoZSBpbnB1dCBpcyBhIGJvb2xlYW4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0VHlwZSh0cnVlKSkudG9CZSgnYm9vbGVhbicpO1xuICAgICAgZXhwZWN0KGdldFR5cGUoZmFsc2UpKS50b0JlKCdib29sZWFuJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnTlVMTCcgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KFwic2hvdWxkIHJldHVybiAnTlVMTCcgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ05VTEwnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdvYmplY3QnIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGZ1bmN0aW9uIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBiaWdpbnQgaW5wdXRcbiAgICBpdChcInNob3VsZCByZXR1cm4gJ2JpZ2ludCcgd2hlbiB0aGUgaW5wdXQgaXMgYSBiaWdpbnRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCaWdJbnQoMTApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdiaWdpbnQnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdzeW1ib2wnIHdoZW4gdGhlIGlucHV0IGlzIGEgc3ltYm9sXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdzeW1ib2wnIHdoZW4gdGhlIGlucHV0IGlzIGEgc3ltYm9sXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gU3ltYm9sKCd0ZXN0Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3N5bWJvbCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ3VuZGVmaW5lZCcgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdOVUxMJyB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ05VTEwnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGFycm93IGZ1bmN0aW9uIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyb3cgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICgpID0+IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ29iamVjdCcgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSBvYmplY3QgdGhlIGNvcnJlY3QgdHlwZSBmb3IgY2xhc3MgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYSBjbGFzcycsICgpID0+IHtcbiAgICAgIGNsYXNzIE15Q2xhc3Mge31cbiAgICAgIGNvbnN0IGlucHV0ID0gbmV3IE15Q2xhc3MoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnb2JqZWN0Jyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnZnVuY3Rpb24nIHdoZW4gdGhlIGlucHV0IGlzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgICBjb25zdCBpbnB1dCA9IGZ1bmN0aW9uKiAoKSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdmdW5jdGlvbicgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhc3luYyBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXN5bmMgKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc09iamVjdCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGFuIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYSBmdW5jdGlvblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAoKSA9PiB7fTtcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBudWxsO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhbiBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFtdO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICd0ZXN0JztcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBmb3IgYSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAxMjM7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGEgYm9vbGVhblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0cnVlO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIHN5bWJvbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBzeW1ib2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFN5bWJvbCgpO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdGhlIHZhbHVlIGlzIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBOYU47XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgMiwgM107XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGtleTogJ3ZhbHVlJyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIHRydWUgZm9yIG51bGwgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gJ2lzRW1wdHknIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIE5hTiBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBOYU47XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdCB0aGF0IHRoZSBmdW5jdGlvbiAnaXNFbXB0eScgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgd2hpdGVzcGFjZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgYSB3aGl0ZXNwYWNlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyAgICc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0VtcHR5T2JqZWN0JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IG9iamVjdCB7fVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBvYmplY3Qge2E6ICcxJ31cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAnMScgfTtcbiAgICAgIGV4cGVjdChpc0VtcHR5T2JqZWN0KG9iaikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgYXJyYXkgW11cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3QoYXJyKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheSBbMSwgMiwgM11cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBbMSwgMiwgM107XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChhcnIpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZyAnJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9ICcnO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcgJ2hlbGxvJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSAnaGVsbG8nO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHlPYmplY3QgcmV0dXJucyB0cnVlIGZvciBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSAyO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZE5vdE51bGxOb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoeyBrZXk6ICd2YWx1ZScgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBub24tZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShbMSwgMiwgM10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLXplcm8gbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi16ZXJvIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoMTIzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoJycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBmYWxzZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gZmFsc2UgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiAwIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiAwIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpdCBkb2VzIG5vdCBjb250YWluIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4sIG9yIGludGVnZXIgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHsgZDogJ25lc3RlZCcgfSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50KG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSBjbGVhbmVkIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4sIG9yIGludGVnZXIgdmFsdWVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBjbGVhbmVkIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogdW5kZWZpbmVkLCBjOiBudWxsLCBkOiAnJywgZToge30sIGY6IHRydWUsIGc6IDAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBmOiB0cnVlLCBnOiAwIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCh1bmRlZmluZWQpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQobnVsbCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCh7fSkpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGlucHV0IGNvbnRhaW5zIG9ubHkgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBjb250YWlucyBvbmx5IHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4gb3IgaW50ZWdlciB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IHVuZGVmaW5lZCwgYjogbnVsbCwgYzogJycsIGQ6IHt9LCBlOiB0cnVlLCBmOiAwIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbCh7IGU6IHRydWUsIGY6IDAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRIYXNoRnJvbUFycmF5JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gZ2l2ZW4gYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnQScsIHRvOiAnMScgfSxcbiAgICAgICAgeyBmcm9tOiAnQicsIHRvOiAnMicgfSxcbiAgICAgICAgeyBmcm9tOiAnQycsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgYTogJzEnLCBiOiAnMicsIGM6ICczJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICdmcm9tJyBwcm9wZXJ0eVxuICAgIGl0KFwic2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICcnLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSAnZnJvbScgcHJvcGVydHkgd2hlbiBnaXZlbiBhbiBhcnJheSB3aXRoIGR1cGxpY2F0ZSAnZnJvbScgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzEnIH0sXG4gICAgICAgIHsgZnJvbTogJ0InLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IGE6ICczJywgYjogJzInIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hNYXAgd2l0aCBvbmx5IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSAnZnJvbScgcHJvcGVydHkgd2hlbiBnaXZlbiBhbiBhcnJheSB3aXRoIGR1cGxpY2F0ZSAnZnJvbScgcHJvcGVydGllcyBhbmQgZGlmZmVyZW50ICd0bycgdmFsdWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzIGFuZCBkaWZmZXJlbnQgJ3RvJyB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdBJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICdCJywgdG86ICcyJyB9LFxuICAgICAgICB7IGZyb206ICdBJywgdG86ICczJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBhOiAnMycsIGI6ICcyJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggY29ycmVjdCBrZXktdmFsdWUgcGFpcnMgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbm9uLXN0cmluZyAnZnJvbScgYW5kICd0bycgcHJvcGVydGllc1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBhIGhhc2hNYXAgd2l0aCBjb3JyZWN0IGtleS12YWx1ZSBwYWlycyB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBub24tc3RyaW5nICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAxLCB0bzogdHJ1ZSB9LFxuICAgICAgICB7IGZyb206IG51bGwsIHRvOiB1bmRlZmluZWQgfSxcbiAgICAgICAgeyBmcm9tOiBbMSwgMiwgM10sIHRvOiB7IGE6ICdBJywgYjogJ0InIH0gfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgJzEnOiB0cnVlLCBudWxsOiB1bmRlZmluZWQsICcxLDIsMyc6IHsgYTogJ0EnLCBiOiAnQicgfSB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSAnZnJvbScgcHJvcGVydHkgdG8gbG93ZXJjYXNlIGluIHRoZSBoYXNoTWFwIHdoZW4gdGhlIGlzTG93ZXJDYXNlIHBhcmFtZXRlciBpcyB0cnVlXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IFwiZnJvbVwiIHByb3BlcnR5IHRvIGxvd2VyY2FzZSBpbiBoYXNoTWFwIHdoZW4gaXNMb3dlckNhc2UgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnVkFMVUUxJywgdG86ICdWYWx1ZTEnIH0sXG4gICAgICAgIHsgZnJvbTogJ1ZBTFVFMicsIHRvOiAnVmFsdWUyJyB9LFxuICAgICAgICB7IGZyb206ICdWQUxVRTMnLCB0bzogJ1ZhbHVlMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICAgICAgdmFsdWUxOiAnVmFsdWUxJyxcbiAgICAgICAgdmFsdWUyOiAnVmFsdWUyJyxcbiAgICAgICAgdmFsdWUzOiAnVmFsdWUzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cywgJ2Zyb20nLCAndG8nLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBvbmx5IG9uZSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggb25seSBvbmUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW3sgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9XTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHsgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJ10pIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICdmcm9tJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ2Zyb20nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AzJywgdG86ICd2YWwzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICAgIHByb3AzOiBuZXcgU2V0KFsndmFsMyddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDMnLCB0bzogJ3ZhbDMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgICAgcHJvcDM6IG5ldyBTZXQoWyd2YWwzJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IGhhc2hNYXAgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGhhc2hNYXAgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICdmcm9tJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGhhbmRsZSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICcnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICd2YWwzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBlbXB0eSAndG8nIGtleXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgaGFzaE1hcCB3aGVuIHRoZSAndG8nIGtleSBpcyBlbXB0eSBpbiBhbGwgb2JqZWN0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICcnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICcnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AzJywgdG86ICcnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0geyBwcm9wMTogbmV3IFNldChbJyddKSwgcHJvcDI6IG5ldyBTZXQoWycnXSksIHByb3AzOiBuZXcgU2V0KFsnJ10pIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byBmYWxzZVxuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byBmYWxzZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nLCBmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGN1c3RvbSBmcm9tS2V5IGFuZCB0b0tleSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCBjdXN0b20gZnJvbUtleSBhbmQgdG9LZXkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJywgJ3ZhbDInXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMsICdmcm9tJywgJ3RvJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzIHdoZW4gaXNMb3dlckNhc2UgaXMgc2V0IHRvIHRydWVcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXMgd2hlbiBpc0xvd2VyQ2FzZSBpcyBzZXQgdG8gdHJ1ZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXNcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJywgJ3ZhbDInXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBwcm9wZXJ0aWVzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHByb3BlcnRpZXMgd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgICB9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZyb20gdHJhaXRzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHRyYWl0cyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHtcbiAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdrZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBjb250ZXh0LnRyYWl0cyBpZiBpdCBleGlzdHMuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBjb250ZXh0LnRyYWl0cyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIG1lc3NhZ2UgaXMgbnVsbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBudWxsO1xuICAgICAgY29uc3Qga2V5ID0gJ2tleSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBrZXkgaXMgbnVsbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGtleSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW55IG9mIHRoZSBrZXlTZXRzLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIGFueSBvZiB0aGUga2V5U2V0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAnbm9uZXhpc3RlbnRLZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZsYXR0ZW5Kc29uJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgc2ltcGxlIEpTT04gb2JqZWN0IHdpdGggbm8gbmVzdGVkIG9iamVjdHMgb3IgYXJyYXlzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBzaW1wbGUgSlNPTiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgc3RyZWV0OiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICAgY291bnRyeTogJ1VTQScsXG4gICAgICAgIH0sXG4gICAgICAgIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLmNpdHknOiAnTmV3IFlvcmsnLFxuICAgICAgICAnYWRkcmVzcy5jb3VudHJ5JzogJ1VTQScsXG4gICAgICAgICdob2JiaWVzWzBdJzogJ3JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1sxXSc6ICdwYWludGluZycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiBudWxsLCBhZ2U6IHVuZGVmaW5lZCwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6IG51bGwsIGFnZTogdW5kZWZpbmVkLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGVtcHR5IGFycmF5cyBhbmQgb2JqZWN0cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBlbXB0eSBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiBbXSwgYWdlOiB7fSwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6IFtdLCBhZ2U6IHt9LCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gLy8gTmVlZCB0byBmaXggdGhpcyB0ZXN0XG4gICAgLy8gLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBoYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gYSBKU09OIG9iamVjdCBjb3JyZWN0bHkuXG4gICAgLy8gaXQoJ3Nob3VsZCBoYW5kbGUgY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBhIEpTT04gb2JqZWN0IGNvcnJlY3RseScsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICAgIC8vICAgZGF0YVsnc2VsZiddID0gZGF0YTtcbiAgICAvLyAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIHNlbGY6ICdbQ2lyY3VsYXJdJyB9O1xuICAgIC8vICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgLy8gICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICAvLyB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcgc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCAnYWdlQCc6IDMwIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgJ25hbWUuZmlyc3QnOiAnSm9obicsICduYW1lLmxhc3QnOiAnRG9lJywgJ2FnZUAnOiAzMCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3QgdGhhdCB0aGUgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tc3RyaW5nIGtleXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbm9uLXN0cmluZyBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgMTogJ29uZScsIDI6ICd0d28nLCAzOiAndGhyZWUnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgJzEnOiAnb25lJywgJzInOiAndHdvJywgJzMnOiAndGhyZWUnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCBhZ2U6IDMwLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgJ25hbWUuZmlyc3QnOiAnSm9obicsXG4gICAgICAgICduYW1lLmxhc3QnOiAnRG9lJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgdGhhdCBhcmUgcmVzZXJ2ZWQgd29yZHMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggcmVzZXJ2ZWQgd29yZCBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgY2xhc3M6ICdNYXRoJywgZnVuY3Rpb246ICdhZGQnLCByZXR1cm46ICdyZXN1bHQnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgY2xhc3M6ICdNYXRoJywgZnVuY3Rpb246ICdhZGQnLCByZXR1cm46ICdyZXN1bHQnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSAnZmxhdHRlbkpzb24nIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICBzdGF0ZTogJ05ZJyxcbiAgICAgICAgICB6aXA6ICcxMDAwMScsXG4gICAgICAgIH0sXG4gICAgICAgIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZycsICdjb29raW5nJ10sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSmFuZScsXG4gICAgICAgICAgICBhZ2U6IDI4LFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBzdHJlZXQ6ICc0NTYgRWxtIFN0JyxcbiAgICAgICAgICAgICAgY2l0eTogJ0xvcyBBbmdlbGVzJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdDQScsXG4gICAgICAgICAgICAgIHppcDogJzkwMDAxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob2JiaWVzOiBbJ2hpa2luZycsICdwaG90b2dyYXBoeSddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ01pa2UnLFxuICAgICAgICAgICAgYWdlOiAzMixcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgc3RyZWV0OiAnNzg5IE9hayBTdCcsXG4gICAgICAgICAgICAgIGNpdHk6ICdDaGljYWdvJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdJTCcsXG4gICAgICAgICAgICAgIHppcDogJzYwMDA3JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob2JiaWVzOiBbJ3J1bm5pbmcnLCAnZ2FtaW5nJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICAnYWRkcmVzcy5zdHJlZXQnOiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAnYWRkcmVzcy5jaXR5JzogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RhdGUnOiAnTlknLFxuICAgICAgICAnYWRkcmVzcy56aXAnOiAnMTAwMDEnLFxuICAgICAgICAnaG9iYmllc1swXSc6ICdyZWFkaW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0nOiAncGFpbnRpbmcnLFxuICAgICAgICAnaG9iYmllc1syXSc6ICdjb29raW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0ubmFtZSc6ICdKYW5lJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWdlJzogMjgsXG4gICAgICAgICdmcmllbmRzWzBdLmFkZHJlc3Muc3RyZWV0JzogJzQ1NiBFbG0gU3QnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLmNpdHknOiAnTG9zIEFuZ2VsZXMnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLnN0YXRlJzogJ0NBJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWRkcmVzcy56aXAnOiAnOTAwMDEnLFxuICAgICAgICAnZnJpZW5kc1swXS5ob2JiaWVzWzBdJzogJ2hpa2luZycsXG4gICAgICAgICdmcmllbmRzWzBdLmhvYmJpZXNbMV0nOiAncGhvdG9ncmFwaHknLFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ01pa2UnLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZ2UnOiAzMixcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5zdHJlZXQnOiAnNzg5IE9hayBTdCcsXG4gICAgICAgICdmcmllbmRzWzFdLmFkZHJlc3MuY2l0eSc6ICdDaGljYWdvJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5zdGF0ZSc6ICdJTCcsXG4gICAgICAgICdmcmllbmRzWzFdLmFkZHJlc3MuemlwJzogJzYwMDA3JyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uaG9iYmllc1swXSc6ICdydW5uaW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uaG9iYmllc1sxXSc6ICdnYW1pbmcnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlICdmbGF0dGVuSnNvbicgZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBrZXlzIGFuZCB2YWx1ZXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4ga2V5cyBhbmQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICBhZGRyZXNzOiB7IHN0cmVldDogJzEyMyBNYWluIFN0JywgY2l0eTogJ1NhbiBGcmFuY2lzY28nIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RyZWV0JzogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgJ2FkZHJlc3MuY2l0eSc6ICdTYW4gRnJhbmNpc2NvJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGRlZXBseSBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzLCBpbmNsdWRpbmcgbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBkZWVwbHkgbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgemlwOiAxMjM0NSxcbiAgICAgICAgICBjb3VudHJ5OiAnVVNBJyxcbiAgICAgICAgICBjb29yZGluYXRlczoge1xuICAgICAgICAgICAgbGF0aXR1ZGU6IDQwLjcxMjgsXG4gICAgICAgICAgICBsb25naXR1ZGU6IC03NC4wMDYsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJywgJ3N3aW1taW5nJ10sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdKYW5lJywgYWdlOiAyOCB9LFxuICAgICAgICAgIHsgbmFtZTogJ01pa2UnLCBhZ2U6IDMyIH0sXG4gICAgICAgICAgeyBuYW1lOiAnU2FyYWgnLCBhZ2U6IDI3IH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBldDogbnVsbCxcbiAgICAgICAgZmF2b3JpdGVDb2xvcjogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLnppcCc6IDEyMzQ1LFxuICAgICAgICAnYWRkcmVzcy5jb3VudHJ5JzogJ1VTQScsXG4gICAgICAgICdhZGRyZXNzLmNvb3JkaW5hdGVzLmxhdGl0dWRlJzogNDAuNzEyOCxcbiAgICAgICAgJ2FkZHJlc3MuY29vcmRpbmF0ZXMubG9uZ2l0dWRlJzogLTc0LjAwNixcbiAgICAgICAgJ2hvYmJpZXNbMF0nOiAncmVhZGluZycsXG4gICAgICAgICdob2JiaWVzWzFdJzogJ3BhaW50aW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMl0nOiAnc3dpbW1pbmcnLFxuICAgICAgICAnZnJpZW5kc1swXS5uYW1lJzogJ0phbmUnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZ2UnOiAyOCxcbiAgICAgICAgJ2ZyaWVuZHNbMV0ubmFtZSc6ICdNaWtlJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWdlJzogMzIsXG4gICAgICAgICdmcmllbmRzWzJdLm5hbWUnOiAnU2FyYWgnLFxuICAgICAgICAnZnJpZW5kc1syXS5hZ2UnOiAyNyxcbiAgICAgICAgcGV0OiBudWxsLFxuICAgICAgICBmYXZvcml0ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBhcnJheXMgY29udGFpbmluZyBvYmplY3RzIHdpdGggZGlmZmVyZW50IG5lc3RpbmcgbGV2ZWxzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGFycmF5cyBjb250YWluaW5nIG9iamVjdHMgd2l0aCBkaWZmZXJlbnQgbmVzdGluZyBsZXZlbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGhvYmJpZXM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdSZWFkaW5nJywgdHlwZTogJ0luZG9vcicgfSxcbiAgICAgICAgICB7IG5hbWU6ICdSdW5uaW5nJywgdHlwZTogJ091dGRvb3InIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ29va2luZycsIHR5cGU6ICdJbmRvb3InIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdBbGljZScsIGFnZTogMjggfSxcbiAgICAgICAgICB7IG5hbWU6ICdCb2InLCBhZ2U6IDMyIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ2hhcmxpZScsIGFnZTogMjcgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAnaG9iYmllc1swXS5uYW1lJzogJ1JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1swXS50eXBlJzogJ0luZG9vcicsXG4gICAgICAgICdob2JiaWVzWzFdLm5hbWUnOiAnUnVubmluZycsXG4gICAgICAgICdob2JiaWVzWzFdLnR5cGUnOiAnT3V0ZG9vcicsXG4gICAgICAgICdob2JiaWVzWzJdLm5hbWUnOiAnQ29va2luZycsXG4gICAgICAgICdob2JiaWVzWzJdLnR5cGUnOiAnSW5kb29yJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0ubmFtZSc6ICdBbGljZScsXG4gICAgICAgICdmcmllbmRzWzBdLmFnZSc6IDI4LFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ0JvYicsXG4gICAgICAgICdmcmllbmRzWzFdLmFnZSc6IDMyLFxuICAgICAgICAnZnJpZW5kc1syXS5uYW1lJzogJ0NoYXJsaWUnLFxuICAgICAgICAnZnJpZW5kc1syXS5hZ2UnOiAyNyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2VuZXJhdGVSYW5kb21TdHJpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgdGVzdENhc2VzOiBCYXNlVGVzdENhc2VbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3Nob3VsZCBnZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgb2YgdGhlIHNwZWNpZmllZCBsZW5ndGgnLFxuICAgICAgICBsZW5ndGg6IDgsXG4gICAgICAgIGV4cGVjdGVkTGVuZ3RoOiA4LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3Nob3VsZCBnZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgb2YgdGhlIGRlZmF1bHQgbGVuZ3RoJyxcbiAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IDEwLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGZpbHRlcih0ZXN0Q2FzZXMpLmZvckVhY2goKHRlc3RDYXNlKSA9PiB7XG4gICAgICBpdCh0ZXN0Q2FzZS5uYW1lLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZG9tU3RyaW5nKHRlc3RDYXNlLmxlbmd0aCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQubGVuZ3RoKS50b0JlKHRlc3RDYXNlLmV4cGVjdGVkTGVuZ3RoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0T2Zmc2V0SW5TZWMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlIGluIHNlY29uZHMgZm9yIGEgdmFsaWQgdGltZXpvbmUgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9mZnNldCB2YWx1ZSBpbiBzZWNvbmRzIGZvciBhIHZhbGlkIHRpbWV6b25lIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGdldE9mZnNldEluU2VjKCdBc2lhL0tvbGthdGEnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMTk4MDApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nICdVVEMnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMCBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyBcIlVUQ1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ1VUQycpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyAnRXRjL1VUQydcbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiRXRjL1VUQ1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0V0Yy9VVEMnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBmb3IgYW4gaW52YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGFuIGludmFsaWQgdGltZXpvbmUgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0ludmFsaWQvVGltZXpvbmUnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVuZGVmaW5lZCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJyswNTozMCcgaW52YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdW5kZWZpbmVkIG9mZnNldCB2YWx1ZSBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyBcIiswNTozMFwiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJyswNTozMCcpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29ycmVjdCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJ0FtZXJpY2EvTmV3X1lvcmsnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3Qgb2Zmc2V0IHZhbHVlIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiQW1lcmljYS9OZXdfWW9ya1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0FzaWEvQ2FsY3V0dGEnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMTk4MDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZm9ybWF0VGltZVN0YW1wJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBubyBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBubyBmb3JtYXQgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJzIwMjItMDEtMDFUMDA6MDA6MDAuMDAwWic7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0cik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKDE2NDA5OTUyMDAwMDApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXN0YW1wIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIG1vbWVudCBmb3JtYXQgd2hlbiBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHRpbWVzdGFtcCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtb21lbnQgZm9ybWF0IHdoZW4gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcyMDIyLTAxLTAxVDAwOjAwOjAwLjAwMFonO1xuICAgICAgY29uc3QgZm9ybWF0ID0gJ1lZWVktTU0tREQnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIsIGZvcm1hdCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcyMDIyLTAxLTAxJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiB0aHJvd3MgYW4gZXJyb3Igd2hlbiBhbiBpbnZhbGlkIGRhdGUgc3RyaW5nIGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBhbiBpbnZhbGlkIGRhdGUgc3RyaW5nIGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICdpbnZhbGlkLWRhdGUnO1xuICAgICAgZXhwZWN0KGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKSkudG9CZU5hTigpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBOYU4gd2hlbiBhbiBpbnZhbGlkIGRhdGUgc3RyaW5nIGlzIHByb3ZpZGVkIGFuZCBubyBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gTmFOIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZCBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICdpbnZhbGlkLWRhdGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU5hTigpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBOYU4gd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcHJvdmlkZWQgYXMgdGhlIGRhdGUgc3RyaW5nIGFuZCBubyBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gTmFOIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHByb3ZpZGVkIGFzIHRoZSBkYXRlIHN0cmluZyBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU5hTigpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBOYU4gd2hlbiBhbiBpbnZhbGlkIGZvcm1hdCBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBOYU4gd2hlbiBhbiBpbnZhbGlkIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IGZvcm1hdCA9ICdpbnZhbGlkRm9ybWF0JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyLCBmb3JtYXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnaW52YW0xLzEvMjAyMmk2Rm9yMGFtdCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyB3aGVuIGEgdmFsaWQgdGltZXN0YW1wIHN0cmluZyBpcyBwcm92aWRlZCBpbnN0ZWFkIG9mIGEgZGF0ZSBzdHJpbmcuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBhIHZhbGlkIHRpbWVzdGFtcCBzdHJpbmcgaXMgcHJvdmlkZWQgaW5zdGVhZCBvZiBhIGRhdGUgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcyMDIyLTAxLTAxVDAwOjAwOjAwLjAwMFonO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgxNjQwOTk1MjAwMDAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2hhc2hUb1NoYTI1NicsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhIHN0cmluZyBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ3Rlc3Qgc3RyaW5nJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ2Q1NTc5YzQ2ZGZjYzdmMTgyMDcwMTNlNjViNDRlNGNiNGUyYzIyOThmNGFjNDU3YmE4ZjgyNzQzZjMxZTkzMGInO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYSBCdWZmZXIgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBCdWZmZXIgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IEJ1ZmZlci5mcm9tKCd0ZXN0IGJ1ZmZlcicpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNTI1ZWY1ZjdiYWY1NjUyOGI0ODc3MDkyMmU5OGU4MDAzMTBkMzY4NTY4MWQzNGVlNTkyOTAyYWEyNTI0NThiMyc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBudW1iZXIgYXJyYXkgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgbnVtYmVyIGFycmF5IGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQ6IG51bWJlcltdID0gW107XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IEJ1ZmZlciBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBCdWZmZXIgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IEJ1ZmZlci5mcm9tKFtdKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ2UzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUnO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgc3RyaW5nIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IHN0cmluZyBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgbnVtYmVyIGFycmF5IGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGEgbnVtYmVyIGFycmF5IGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgMiwgMywgNCwgNV07XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICc3NGY4MWZlMTY3ZDk5YjRjYjQxZDZkMGNjZGE4MjI3OGNhZWU5ZjNlMmYyNWQ1ZTVhMzkzNmZmM2RjZWM2MGQwJztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgbm9uLUFTQ0lJIHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG5vbi1BU0NJSSBzdHJpbmcgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICfkvaDlpb3kuJbnlYwnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNTA4ZDY5ZGMyMWJmNWQyZjgwNDAxNGIxNjg4OTUzYTEyZDVkZmRlNzFiZTZjZDk1NDE3Nzk4MGQ1ZDE3NDFiYic7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZVVVSUQnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gcmV0dXJucyBhIFVVSUQgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVVUlEIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgdXVpZCkudG9CZSgnc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdlbmVyYXRlVVVJRCBmdW5jdGlvbiBnZW5lcmF0ZXMgYSB1bmlxdWUgVVVJRCBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIHVuaXF1ZSBVVUlEIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkMSA9IGdlbmVyYXRlVVVJRCgpO1xuICAgICAgY29uc3QgdXVpZDIgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGV4cGVjdCh1dWlkMSkubm90LnRvQmUodXVpZDIpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gcmV0dXJucyBhIFVVSUQgc3RyaW5nIHdpdGggbGVuZ3RoIDM2XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVVUlEIHN0cmluZyB3aXRoIGxlbmd0aCAzNicsICgpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGV4cGVjdCh1dWlkLmxlbmd0aCkudG9CZSgzNik7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdlbmVyYXRlVVVJRCBmdW5jdGlvbiByZXR1cm5zIGEgVVVJRCBzdHJpbmcgd2l0aCA0IGRhc2hlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVVJRCBzdHJpbmcgd2l0aCA0IGRhc2hlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGNvbnN0IGRhc2hDb3VudCA9ICh1dWlkLm1hdGNoKC8tL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgICBleHBlY3QoZGFzaENvdW50KS50b0JlKDQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndG9TdHJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nIHdoZW4gaW5wdXQgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICd0ZXN0IHN0cmluZyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBcIm51bGxcIiB3aGVuIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnbnVsbCcpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIEpTT04gc3RyaW5nIHdoZW4gaW5wdXQgaXMgYSBjdXN0b20gb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGtleTogJ3ZhbHVlJywgYW5vdGhlcktleTogMTIzIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShKU09OLnN0cmluZ2lmeShpbnB1dCkpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnB1dCBoYXMgY2lyY3VsYXIgcmVmZXJlbmNlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNpcmN1bGFyT2JqOiBhbnkgPSB7fTtcbiAgICAgIGNpcmN1bGFyT2JqLnNlbGYgPSBjaXJjdWxhck9iajtcbiAgICAgIGV4cGVjdCgoKSA9PiBjb252ZXJ0VG9TdHJpbmcoY2lyY3VsYXJPYmopKS50b1Rocm93KFR5cGVFcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYm9vbGVhbiB0cnVlIHRvIEpTT04gc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvU3RyaW5nKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3RydWUnKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYXJyYXkgdG8gSlNPTiBzdHJpbmcgd2hlbiBpbnB1dCBpcyBhbiBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIDIsIDNdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvU3RyaW5nKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBudW1iZXIgdG8gYSBKU09OIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gMTIzO1xuICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvU3RyaW5nKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJzEyMycpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGhhbmRsZSBzdHJpbmdzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnc3BlY2lhbCFAIyQlXiYqKClfK3t9OlwiPD4/JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1N0cmluZyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IGxhcmdlIGRhdGEgc3RydWN0dXJlcyB0byBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBsYXJnZU9iamVjdCA9IHtcbiAgICAgICAga2V5MTogJ3ZhbHVlMScsXG4gICAgICAgIGtleTI6IEFycmF5KDEwMDApLmZpbGwoJ3ZhbHVlMicpLFxuICAgICAgICBrZXkzOiB7IG5lc3RlZEtleTogJ25lc3RlZFZhbHVlJyB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1N0cmluZyhsYXJnZU9iamVjdCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKFxuICAgICAgICAne1wia2V5MVwiOlwidmFsdWUxXCIsXCJrZXkyXCI6W1widmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCJdLFwia2V5M1wiOntcIm5lc3RlZEtleVwiOlwibmVzdGVkVmFsdWVcIn19JyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1dWlkdjUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSB0aGUgc2FtZSBVVUlEIGZvciB0aGUgc2FtZSBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ3Rlc3QtdmFsdWUnO1xuICAgICAgY29uc3QgdXVpZDEgPSB1dWlkdjUoaW5wdXQpO1xuICAgICAgY29uc3QgdXVpZDIgPSB1dWlkdjUoaW5wdXQpO1xuXG4gICAgICBleHBlY3QodXVpZDEpLnRvQmUodXVpZDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBkaWZmZXJlbnQgVVVJRHMgZm9yIGRpZmZlcmVudCBpbnB1dHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkMSA9IHV1aWR2NSgnZmlyc3QtdmFsdWUnKTtcbiAgICAgIGNvbnN0IHV1aWQyID0gdXVpZHY1KCdzZWNvbmQtdmFsdWUnKTtcbiAgICAgIGV4cGVjdCh1dWlkMSkubm90LnRvQmUodXVpZDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSB2YWxpZCBVVUlEIHY1JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHV1aWR2NSgndmFsaWQtdGVzdCcpKS50b0JlKCc0OTg0MzE2OS1lZTkxLTUzZDQtODJhZS0wMmRkNjc2YzkyYWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IHN0cmluZyBpbnB1dHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodXVpZHY1KCcnKSkudG9CZSgnMWM3ZmNmMTMtNzRhZi01NTk1LThlZTktZDcyYmU2YzFhYzQyJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
2260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21pc2MudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQWtDZ0I7QUFDaEIsbUNBQStDO0FBRS9DLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLHFGQUFxRjtRQUNyRixFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1lBQzFFLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzRkFBc0Y7UUFDdEYsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILDhFQUE4RTtRQUM5RSxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRUFBK0U7UUFDL0UsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLElBQUksQ0FB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RUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxR0FBcUc7UUFDckcsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtZQUM1RixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvR0FBb0c7UUFDcEcsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEs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QUcsRUFBRTtZQUN4SSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcs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QUNaO2FBQ0Y7U0FDRixDQUFDO1FBRUYsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQzlDLEVBQUUsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLElBQUEseUJBQWtCLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBiYXNlNjRDb252ZXJ0b3IsXG4gIGZsYXR0ZW5NYXAsXG4gIGdldFR5cGUsXG4gIGlzQmxhbmssXG4gIGlzRGVmaW5lZCxcbiAgaXNEZWZpbmVkQW5kTm90TnVsbCxcbiAgaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5LFxuICBpc05vdEVtcHR5LFxuICBpc05vdE51bGwsXG4gIGlzUHJpbWl0aXZlLFxuICBpc1ZhbGlkVXJsLFxuICByZW1vdmVOdWxsVmFsdWVzLFxuICByZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMsXG4gIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMsXG4gIHJlbW92ZVVuZGVmaW5lZFZhbHVlcyxcbiAgc3RyaXBUcmFpbGluZ1NsYXNoLFxuICBpc09iamVjdCxcbiAgaXNFbXB0eSxcbiAgaXNFbXB0eU9iamVjdCxcbiAgaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5LFxuICByZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCxcbiAgZ2V0SGFzaEZyb21BcnJheSxcbiAgZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUsXG4gIGZsYXR0ZW5Kc29uLFxuICBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMsXG4gIGdldE9mZnNldEluU2VjLFxuICBmb3JtYXRUaW1lU3RhbXAsXG4gIGhhc2hUb1NoYTI1NixcbiAgZ2VuZXJhdGVVVUlELFxuICBjb252ZXJ0VG9TdHJpbmcsXG4gIHV1aWR2NSxcbiAgZ2VuZXJhdGVSYW5kb21TdHJpbmcsXG4gIGZsYXR0ZW5RdWVyeVBhcmFtcyxcbn0gZnJvbSAnLi9taXNjJztcbmltcG9ydCB7IEJhc2VUZXN0Q2FzZSwgZmlsdGVyIH0gZnJvbSAnLi90ZXN0cyc7XG5cbmRlc2NyaWJlKCdtaXNjJywgKCkgPT4ge1xuICBkZXNjcmliZSgnaXNEZWZpbmVkJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBkZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoNSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoJ2hlbGxvJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKCcnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKDEwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQobnVsbCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoTmFOKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChTeW1ib2woKSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUbyB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKG1hcCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgb2JqZWN0aXZlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgU2V0IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IFNldCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2V0T2JqID0gbmV3IFNldCgpO1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChzZXRPYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIG9iamVjdGl2ZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IFdlYWtNYXAgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgV2Vha01hcCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgZW1wdHlXZWFrTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoZW1wdHlXZWFrTWFwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzTm90RW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgdHJ1ZSBmb3Igbm9uLWVtcHR5IGFycmF5c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW5wdXQgaXMgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGVtcHR5IGFycmF5c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShbXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHsga2V5OiAndmFsdWUnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KCdoZWxsbycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBub24temVybyBudW1iZXJzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYSBub24temVybyBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KDQyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHplcm9cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyB6ZXJvJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkodW5kZWZpbmVkKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIE5hTicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoTmFOKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGZhbHNlIGJvb2xlYW5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBmYWxzZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgdHJ1ZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYSB0cnVlIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc05vdE51bGwnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKCd0ZXN0JykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHRydXRoeSB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSB0cnV0aHkgdmFsdWUgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCh0cnVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBudW1iZXIgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoMTIzKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChudWxsKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKE5hTikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChTeW1ib2woKSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoKCkgPT4ge30pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChOYU4pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgpO1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChzeW1ib2wpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNEZWZpbmVkQW5kTm90TnVsbCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgndGVzdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKDEyMyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKHsga2V5OiAndmFsdWUnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBhcnJheSB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoe30pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCdoZWxsbycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KFsxLCAyLCAzXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGEgYm9vbGVhbiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGEgYm9vbGVhbiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkodHJ1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhIG51bWJlciB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGEgbnVtYmVyIHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSg0MikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCcnKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoe30pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoW10pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KG51bGwpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh1bmRlZmluZWQpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIHN0cmluZyB3aXRoIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIHN0cmluZyB3aXRoIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSgnICAgJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIG9ubHkgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7IHByb3AxOiBudWxsLCBwcm9wMjogdW5kZWZpbmVkIH0pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNCbGFuaycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhbXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHt9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuaygnaGVsbG8nKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoWzEsIDIsIDNdKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh7IGtleTogJ3ZhbHVlJyB9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhIG51bGwgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKG51bGwpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gdW5kZWZpbmVkIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHVuZGVmaW5lZCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBib29sZWFuIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh0cnVlKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuayhmYWxzZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgbnVtYmVyIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG51bWJlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKDEyMykpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoMCkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoLTEpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIHdoaXRlc3BhY2Ugc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIHdoaXRlc3BhY2Ugc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJyAgICcpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpc0JsYW5rKCdcXHQnKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuaygnXFxuJykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhOYU4pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCBpZiBpdCBpcyBub3QgYW4gb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIG5vdCBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IDEyMztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgdmFsdWVzIGFyZSBkZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgdmFsdWVzIGFyZSBkZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IDEsIGI6IHVuZGVmaW5lZCwgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6IHRydWUgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGlucHV0IGlzIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiB1bmRlZmluZWQgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IG51bGwgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogbnVsbCB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6ICcnIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEsIGM6ICcnIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIGZhbHNlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZmFsc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBmYWxzZSB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxLCBjOiBmYWxzZSB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB6ZXJvXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgemVybycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IDAgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogMCB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBOYU5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBOYU4gfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogTmFOIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZU51bGxWYWx1ZXMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gZW1wdHkgb2JqZWN0IGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbm8gbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpbnB1dCBoYXMgbm8gbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogWzEsIDIsIDNdIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogWzEsIDIsIDNdIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgbnVsbCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBudWxsO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBudWxsO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIHVuZGVmaW5lZCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBzdHJpbmcgd2hlbiBpbnB1dCBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIG51bWJlciBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG51bWJlciB3aGVuIGlucHV0IGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAxMjM7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IDEyMztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBhcnJheSBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGFycmF5IHdoZW4gaW5wdXQgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAyLCAzXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyAnMCc6IDEsICcxJzogMiwgJzInOiAzIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGlucHV0IGhhcyBvbmx5IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwsIGI6IG51bGwsIGM6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbmVzdGVkIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbmVzdGVkIG51bGwgdmFsdWVzIGZyb20gdGhlIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IG51bGwgfSwgYzogeyBkOiB7IGU6IG51bGwgfSB9IH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYToge30sIGM6IHsgZDoge30gfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gaW5wdXQgaGFzIG5lc3RlZCBub24tbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxIH0sIGM6IHsgZDogeyBlOiAnaGVsbG8nIH0gfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSB9LCBjOiB7IGQ6IHsgZTogJ2hlbGxvJyB9IH0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBtaXhlZCBuZXN0ZWQgbnVsbCBhbmQgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbmVzdGVkIG51bGwgdmFsdWVzIGFuZCBrZWVwIG5vbi1udWxsIHZhbHVlcyBpbiB0aGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogbnVsbCwgYzogMSB9LCBkOiB7IGU6IG51bGwsIGY6ICdoZWxsbycgfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYzogMSB9LCBkOiB7IGY6ICdoZWxsbycgfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlcyBhbmQgZmFsc3kgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbnVsbCB2YWx1ZXMgYW5kIGtlZXAgZmFsc3kgbm9uLW51bGwgdmFsdWVzIGluIHRoZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogbnVsbCwgYjogZmFsc2UsIGM6IDAsIGQ6ICcnIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYjogZmFsc2UsIGM6IDAsIGQ6ICcnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHRydWUgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAndGVzdCcsIGQ6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBjOiAndGVzdCcgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiB1bmRlZmluZWQsIGM6ICd0ZXN0JywgZDogbnVsbCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHdoZW4gcGFzc2VkIGEgbm9uLW9iamVjdCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHdoZW4gcGFzc2VkIGEgbm9uLW9iamVjdCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gMTIzO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXModmFsdWUpKS50b0VxdWFsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdpdGggbmVzdGVkIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aXRoIG5lc3RlZCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggbmVzdGVkIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6IHsgYzogJ3Rlc3QnLCBkOiB0cnVlIH0sIGU6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6ICd0ZXN0JywgYzogdHJ1ZSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2JqZWN0IHdpdGhvdXQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogbnVsbCwgYzogJ3Rlc3QnLCBkOiBudWxsIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYzogJ3Rlc3QnIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUT0RPOiBORUVEIFRPIEZJWCBUSElTIFRFU1RTXG4gICAgLy8gLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkLCBub3QgbnVsbCwgYW5kIG5vdCBlbXB0eVxuICAgIC8vIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQsIG5vdCBudWxsLCBhbmQgbm90IGVtcHR5JywgKCkgPT4ge1xuICAgIC8vICAgY29uc3Qgb2JqID0ge1xuICAgIC8vICAgICBwcm9wMTogJ3ZhbHVlMScsXG4gICAgLy8gICAgIHByb3AyOiAxMjMsXG4gICAgLy8gICAgIHByb3AzOiBbMSwgMiwgM10sXG4gICAgLy8gICAgIHByb3A0OiB7IG5lc3RlZFByb3A6ICduZXN0ZWRWYWx1ZScgfSxcbiAgICAvLyAgIH07XG4gICAgLy8gICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICAvLyB9KTtcblxuICAgIC8vIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdoZW4gYWxsIHZhbHVlcyBhcmUgZGVmaW5lZCBhbmQgbm90IG51bGxcbiAgICAvLyBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkIGFuZCBub3QgbnVsbCcsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IG9iaiA9IHtcbiAgICAvLyAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgIC8vICAgICBwcm9wMjogMTIzLFxuICAgIC8vICAgICBwcm9wMzogWzEsIDIsIDNdLFxuICAgIC8vICAgICBwcm9wNDogeyBuZXN0ZWRQcm9wOiAnbmVzdGVkVmFsdWUnIH0sXG4gICAgLy8gICB9O1xuICAgIC8vICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0VxdWFsKG9iaik7XG4gICAgLy8gfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSBudWxsO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHVuZGVmaW5lZDtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgb2JqZWN0IGhhcyBvbmx5IGVtcHR5IHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBvYmplY3QgaGFzIG9ubHkgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICBwcm9wMTogJycsXG4gICAgICAgIHByb3AyOiAnICAgICcsXG4gICAgICAgIHByb3AzOiBbXSxcbiAgICAgICAgcHJvcDQ6IHt9LFxuICAgICAgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9FcXVhbCh7IHByb3AyOiAnICAgICcgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG9iamVjdCBhbmQgZG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIG5ldyBvYmplY3QgYW5kIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgICAgICBwcm9wMjogbnVsbCxcbiAgICAgICAgcHJvcDM6ICcnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHByb3AxOiAndmFsdWUxJyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKG9iaik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmbGF0dGVuTWFwJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGlucHV0IGlmIGl0IGlzIG5vdCBhbiBhcnJheSBvciBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgaW5wdXQgd2hlbiBpdCBpcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSA1O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5XG4gICAgLy8gT25seSAxIGxldmVsIG9mIGZsYXR0ZW5pbmcgaXMgcGVyZm9ybWVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgM10sIFs0LCBbNSwgNl1dXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgMywgNCwgWzUsIDZdXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBhcnJheSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBhcnJheSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogWzEsIDJdLCBiOiBbMywgNF0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgMywgNF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBjb2xsZWN0aW9uIGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBjb2xsZWN0aW9uIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFtudWxsXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbnVsbF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGggbnVsbCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbnVsbF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB1bmRlZmluZWQgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW3VuZGVmaW5lZF07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3VuZGVmaW5lZF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiB3aXRoIHVuZGVmaW5lZCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogdW5kZWZpbmVkIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3VuZGVmaW5lZF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBOYU4gdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW05hTl07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW05hTl0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiB3aXRoIE5hTiB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogTmFOIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW05hTl0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBlbXB0eSBzdHJpbmcgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWycnXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJyddKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgJ3R3bycsIHRydWUsIHsgbmFtZTogJ0pvaG4nIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1LCBpc1N0dWRlbnQ6IHRydWUsIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWydKb2huJywgMjUsIHRydWUsICdyZWFkaW5nJywgJ3BhaW50aW5nJ10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgWzMsIDRdXSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsIDIsIFszLCA0XSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsICd0d28nLCB0cnVlLCB7IG5hbWU6ICdKb2huJyB9XSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgY29sbGVjdGlvbiB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMjUsIGlzU3R1ZGVudDogdHJ1ZSwgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJ10gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJ0pvaG4nLCAyNSwgdHJ1ZSwgJ3JlYWRpbmcnLCAncGFpbnRpbmcnXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIFsyLCBbMywgNF1dLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgWzMsIDRdLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdiYXNlNjRDb252ZXJ0b3InLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gZW1wdHkgc3RyaW5nIGlucHV0IGFuZCByZXR1cm5zIGFuIGVtcHR5IGJhc2U2NCBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBiYXNlNjQgc3RyaW5nIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0Q29udmVydG9yKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgaW5wdXQgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBhbmQgY29udmVydHMgaXQgdG8gYmFzZTY0IGZvcm1hdFxuICAgIGl0KCdzaG91bGQgY29udmVydCBhIHN0cmluZyB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIHRvIGJhc2U2NCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICfjgZPjgpPjgavjgaHjga8nO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNDRHVDQ0S1Q0NEdyNDRHaDQ0R3YnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0Q29udmVydG9yKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgaW5wdXQgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyFAIyQlXiYqKCknO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnSVVBakpDVmVKaW9vS1E9PSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIHN0cmluZyBpbnB1dCB3aXRoIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhbmQgY29udmVydHMgaXQgdG8gYmFzZTY0IGZvcm1hdFxuICAgIGl0KCdzaG91bGQgY29udmVydCBhIHN0cmluZyB3aXRoIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBiYXNlNjQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnICAgSGVsbG8gV29ybGQgICAnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnSUNBZ1NHVnNiRzhnVjI5eWJHUWdJQ0E9JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggbGluZSBicmVha3MgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCBsaW5lIGJyZWFrcyB0byBiYXNlNjQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnSGVsbG9cXG5Xb3JsZCc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdTR1ZzYkc4S1YyOXliR1E9JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRVcmwnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgb2JqZWN0IHJldHVybnMgdGhlIHNhbWUgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCdodHRwczovL3d3dy5leGFtcGxlLmNvbScpO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKT8udG9KU09OKCkpLnRvQmUodXJsLnRvSlNPTigpKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tP3BhcmFtMT12YWx1ZTEmcGFyYW0yPXZhbHVlMic7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgaGFzaCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBoYXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tI3NlY3Rpb24xJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgVVJMIHdpdGggYSBwb3J0IHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhIHBvcnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb206ODA4MCc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3VzZXJuYW1lOnBhc3N3b3JkQGV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIGVtcHR5IHN0cmluZyByZXR1cm5zIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJyc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbiAnaXNWYWxpZFVybCcgcmV0dXJucyBudWxsIHdoZW4gZ2l2ZW4gYW4gaW52YWxpZCBVUkwgc3RyaW5nLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhbiBpbnZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaW52YWxpZC11cmwnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYW4gVVJMIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wgcmV0dXJucyB2YWxpZCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdmdHA6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYW4gaW52YWxpZCBVUkwgd2l0aCBhbiBpbnZhbGlkIHBvcnQgcmV0dXJucyBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYW4gaW52YWxpZCBwb3J0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tOmFiYyc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGludmFsaWQgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHJldHVybnMgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0IHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCB1c2VybmFtZSBhbmQgcGFzc3dvcmQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VybmFtZTpwYXNzd29yZEBleGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgc3ViZG9tYWluIHJldHVybnMgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGFuIGludmFsaWQgc3ViZG9tYWluJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vaW52YWxpZC5leGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHBhdGggcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHBhdGgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vcGF0aCc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHN1YmRvbWFpbiByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgdmFsaWQgVVJMIHN0cmluZyB3aXRoIGEgc3ViZG9tYWluJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vc3ViZG9tYWluLmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgdmFsaWQgVVJMIHN0cmluZyByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgdmFsaWQgVVJMIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0cmlwVHJhaWxpbmdTbGFzaCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHN0cmluZyBpZiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nIHdoZW4gaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgJy8nIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGl0XG4gICAgaXQoXCJzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyAnLycgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggaXRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgb25seSBvbmUgdHJhaWxpbmcgJy8nIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIG11bHRpcGxlXG4gICAgaXQoXCJzaG91bGQgcmVtb3ZlIG9ubHkgb25lIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBtdWx0aXBsZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLy8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUvJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgaXQgY29udGFpbnMgb25seSAnLydcbiAgICBpdChcInNob3VsZCByZXR1cm4gZW1wdHkgc3RyaW5nIHdoZW4gaXQgY29udGFpbnMgb25seSAnLydcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgc3RyaW5nIGlmIGl0IGRvZXMgbm90IGVuZCB3aXRoICcvJ1xuICAgIGl0KFwic2hvdWxkIHJldHVybiB0aGUgc2FtZSBzdHJpbmcgd2hlbiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAnLydcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGV4aXN0c1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGV4aXN0c1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBhIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgd2hlbiB0aGV5IGV4aXN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRyYWlsaW5nIHNsYXNoIGZyb20gYSBzdHJpbmcgaWYgaXQgZXhpc3RzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgdGhlIHRyYWlsaW5nIHNsYXNoIHdoZW4gaXQgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRyYWlsaW5nIHNsYXNoIGZyb20gYSBzdHJpbmcgaWYgaXQgZW5kcyB3aXRoICcvJ1xuICAgIGl0KFwic2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiB0aGUgc3RyaW5nIGVuZHMgd2l0aCAnLydcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2V4YW1wbGUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzUHJpbWl0aXZlJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHByaW1pdGl2ZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKCdoZWxsbycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHByaW1pdGl2ZSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlIG51bWJlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKDEyMyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIHRydWUgZm9yIGEgcHJpbWl0aXZlIGJvb2xlYW5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYXJndW1lbnQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKHVuZGVmaW5lZCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIGZhbHNlIGZvciBhbiBpbnN0YW5jZSBvZiBhIG5vbi1wcmltaXRpdmUgd3JhcHBlciBjbGFzcyAoRGF0ZSlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBhIG5vbi1wcmltaXRpdmUgd3JhcHBlciBjbGFzcyAoRGF0ZSknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShuZXcgRGF0ZSgpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIGZhbHNlIGZvciBhbiBpbnN0YW5jZSBvZiBhIGN1c3RvbSBjbGFzc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIGEgY3VzdG9tIGNsYXNzJywgKCkgPT4ge1xuICAgICAgY2xhc3MgQ3VzdG9tQ2xhc3Mge31cbiAgICAgIGNvbnN0IGFyZyA9IG5ldyBDdXN0b21DbGFzcygpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUoYXJnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIGZhbHNlIGZvciBhIGZ1bmN0aW9uIHdpdGggcHJvcGVydGllc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24gd2l0aCBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZnVuYyA9ICgpID0+IHt9O1xuICAgICAgZnVuYy5wcm9wZXJ0eSA9ICd2YWx1ZSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShmdW5jKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIHRydWUgZm9yIGEgc3ltYm9sXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHN5bWJvbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKFN5bWJvbCgndGVzdCcpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRUeXBlJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHN0cmluZyB3aGVuIHRoZSBpbnB1dCBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBudW1iZXIgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudW1iZXIgd2hlbiB0aGUgaW5wdXQgaXMgYSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IDQyO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdudW1iZXInKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGJvb2xlYW4gaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBib29sZWFuIHdoZW4gdGhlIGlucHV0IGlzIGEgYm9vbGVhbiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRUeXBlKHRydWUpKS50b0JlKCdib29sZWFuJyk7XG4gICAgICBleHBlY3QoZ2V0VHlwZShmYWxzZSkpLnRvQmUoJ2Jvb2xlYW4nKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdOVUxMJyB3aGVuIHRoZSBpbnB1dCBpcyBudWxsXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdOVUxMJyB3aGVuIHRoZSBpbnB1dCBpcyBudWxsXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnTlVMTCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ29iamVjdCcgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ29iamVjdCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZSBmb3IgZnVuY3Rpb24gaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAoKSA9PiB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGJpZ2ludCBpbnB1dFxuICAgIGl0KFwic2hvdWxkIHJldHVybiAnYmlnaW50JyB3aGVuIHRoZSBpbnB1dCBpcyBhIGJpZ2ludFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IEJpZ0ludCgxMCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2JpZ2ludCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ3N5bWJvbCcgd2hlbiB0aGUgaW5wdXQgaXMgYSBzeW1ib2xcbiAgICBpdChcInNob3VsZCByZXR1cm4gJ3N5bWJvbCcgd2hlbiB0aGUgaW5wdXQgaXMgYSBzeW1ib2xcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBTeW1ib2woJ3Rlc3QnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnc3ltYm9sJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAndW5kZWZpbmVkJyB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcbiAgICBpdChcInNob3VsZCByZXR1cm4gJ05VTEwnIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnTlVMTCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZSBmb3IgYXJyb3cgZnVuY3Rpb24gaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJvdyBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnb2JqZWN0JyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ29iamVjdCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIG9iamVjdCB0aGUgY29ycmVjdCB0eXBlIGZvciBjbGFzcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhIGNsYXNzJywgKCkgPT4ge1xuICAgICAgY2xhc3MgTXlDbGFzcyB7fVxuICAgICAgY29uc3QgaW5wdXQgPSBuZXcgTXlDbGFzcygpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdmdW5jdGlvbicgd2hlbiB0aGUgaW5wdXQgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb25cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhIGdlbmVyYXRvciBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgIGNvbnN0IGlucHV0ID0gZnVuY3Rpb24qICgpIHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ2Z1bmN0aW9uJyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhc3luYyBmdW5jdGlvblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZ1bmN0aW9uIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFzeW5jIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBhc3luYyAoKSA9PiB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzT2JqZWN0JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYW4gb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGFuIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0ge307XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGZvciBhIGZ1bmN0aW9uXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGEgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICgpID0+IHt9O1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG51bGw7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGFuIGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhbiBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gW107XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGEgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gJ3Rlc3QnO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIG51bWJlclxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IDEyMztcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBmb3IgYSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRydWU7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGEgc3ltYm9sXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIHN5bWJvbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gU3ltYm9sKCk7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiB0aGUgdmFsdWUgaXMgTmFOXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE5hTjtcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgYSBub24tZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnaGVsbG8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAyLCAzXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsga2V5OiAndmFsdWUnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgdHJ1ZSBmb3IgbnVsbCBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBudWxsO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbiAnaXNFbXB0eScgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgTmFOIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IE5hTjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0IHRoYXQgdGhlIGZ1bmN0aW9uICdpc0VtcHR5JyByZXR1cm5zIHRydWUgd2hlbiB0aGUgaW5wdXQgaXMgYSB3aGl0ZXNwYWNlIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBpbnB1dCBpcyBhIHdoaXRlc3BhY2Ugc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnICAgJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRW1wdHlPYmplY3QnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgb2JqZWN0IHt9XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChvYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IG9iamVjdCB7YTogJzEnfVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6ICcxJyB9O1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHlPYmplY3QgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBhcnJheSBbXVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChhcnIpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IGFycmF5IFsxLCAyLCAzXVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IFsxLCAyLCAzXTtcbiAgICAgIGV4cGVjdChpc0VtcHR5T2JqZWN0KGFycikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nICcnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0gJyc7XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChvYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IHN0cmluZyAnaGVsbG8nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9ICdoZWxsbyc7XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChvYmopKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIG51bWJlclxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIG51bWJlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IDI7XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChvYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgndGVzdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh7IGtleTogJ3ZhbHVlJyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBub24temVybyBudW1iZXIgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLXplcm8gbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgxMjMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGZhbHNlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBmYWxzZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIDAgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIDAgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KDApO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KE5hTik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KHVuZGVmaW5lZCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkobnVsbCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShbXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KHt9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3QgaWYgaXQgZG9lcyBub3QgY29udGFpbiB1bmRlZmluZWQsIG51bGwsIGVtcHR5LCBib29sZWFuLCBvciBpbnRlZ2VyIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGl0IGRvZXMgbm90IGNvbnRhaW4gdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6ICd0ZXN0JywgYzogeyBkOiAnbmVzdGVkJyB9IH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB1bmRlZmluZWQsIG51bGwsIGVtcHR5LCBib29sZWFuLCBvciBpbnRlZ2VyIHZhbHVlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybnMgdGhlIGNsZWFuZWQgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm4gdGhlIGNsZWFuZWQgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiB1bmRlZmluZWQsIGM6IG51bGwsIGQ6ICcnLCBlOiB7fSwgZjogdHJ1ZSwgZzogMCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGY6IHRydWUsIGc6IDAgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludChvYmopKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50KHVuZGVmaW5lZCkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludChudWxsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50KHt9KSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaW5wdXQgY29udGFpbnMgb25seSB1bmRlZmluZWQsIG51bGwsIGVtcHR5LCBib29sZWFuLCBvciBpbnRlZ2VyIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdmFsaWQgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGNvbnRhaW5zIG9ubHkgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiBvciBpbnRlZ2VyIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogdW5kZWZpbmVkLCBiOiBudWxsLCBjOiAnJywgZDoge30sIGU6IHRydWUsIGY6IDAgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludChvYmopKS50b0VxdWFsKHsgZTogdHJ1ZSwgZjogMCB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEhhc2hGcm9tQXJyYXknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGdpdmVuIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggY29ycmVjdCBrZXktdmFsdWUgcGFpcnMgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIHByb3BlcnRpZXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYSBoYXNoTWFwIHdpdGggY29ycmVjdCBrZXktdmFsdWUgcGFpcnMgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdBJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICdCJywgdG86ICcyJyB9LFxuICAgICAgICB7IGZyb206ICdDJywgdG86ICczJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBhOiAnMScsIGI6ICcyJywgYzogJzMnIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIHByb3BlcnR5XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBlbXB0eSAnZnJvbScgcHJvcGVydHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICcnLCB0bzogJzEnIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAnMicgfSxcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICczJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hNYXAgd2l0aCBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgJ2Zyb20nIHByb3BlcnR5IHdoZW4gZ2l2ZW4gYW4gYXJyYXkgd2l0aCBkdXBsaWNhdGUgJ2Zyb20nIHByb3BlcnRpZXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYSBoYXNoTWFwIHdpdGggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnQScsIHRvOiAnMScgfSxcbiAgICAgICAgeyBmcm9tOiAnQicsIHRvOiAnMicgfSxcbiAgICAgICAgeyBmcm9tOiAnQScsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgYTogJzMnLCBiOiAnMicgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzIGFuZCBkaWZmZXJlbnQgJ3RvJyB2YWx1ZXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYSBoYXNoTWFwIHdpdGggb25seSB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgJ2Zyb20nIHByb3BlcnR5IHdoZW4gZ2l2ZW4gYW4gYXJyYXkgd2l0aCBkdXBsaWNhdGUgJ2Zyb20nIHByb3BlcnRpZXMgYW5kIGRpZmZlcmVudCAndG8nIHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzEnIH0sXG4gICAgICAgIHsgZnJvbTogJ0InLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IGE6ICczJywgYjogJzInIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hNYXAgd2l0aCBjb3JyZWN0IGtleS12YWx1ZSBwYWlycyB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBub24tc3RyaW5nICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5vbi1zdHJpbmcgJ2Zyb20nIGFuZCAndG8nIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206IDEsIHRvOiB0cnVlIH0sXG4gICAgICAgIHsgZnJvbTogbnVsbCwgdG86IHVuZGVmaW5lZCB9LFxuICAgICAgICB7IGZyb206IFsxLCAyLCAzXSwgdG86IHsgYTogJ0EnLCBiOiAnQicgfSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyAnMSc6IHRydWUsIG51bGw6IHVuZGVmaW5lZCwgJzEsMiwzJzogeyBhOiAnQScsIGI6ICdCJyB9IH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29udmVydHMgdGhlICdmcm9tJyBwcm9wZXJ0eSB0byBsb3dlcmNhc2UgaW4gdGhlIGhhc2hNYXAgd2hlbiB0aGUgaXNMb3dlckNhc2UgcGFyYW1ldGVyIGlzIHRydWVcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgXCJmcm9tXCIgcHJvcGVydHkgdG8gbG93ZXJjYXNlIGluIGhhc2hNYXAgd2hlbiBpc0xvd2VyQ2FzZSBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdWQUxVRTEnLCB0bzogJ1ZhbHVlMScgfSxcbiAgICAgICAgeyBmcm9tOiAnVkFMVUUyJywgdG86ICdWYWx1ZTInIH0sXG4gICAgICAgIHsgZnJvbTogJ1ZBTFVFMycsIHRvOiAnVmFsdWUzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge1xuICAgICAgICB2YWx1ZTE6ICdWYWx1ZTEnLFxuICAgICAgICB2YWx1ZTI6ICdWYWx1ZTInLFxuICAgICAgICB2YWx1ZTM6ICdWYWx1ZTMnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzLCAnZnJvbScsICd0bycsIHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7XG4gICAgICAgIHByb3AxOiBuZXcgU2V0KFsndmFsMScsICd2YWwyJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG9ubHkgb25lIG9iamVjdFxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBvbmx5IG9uZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH1dO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0geyBwcm9wMTogbmV3IFNldChbJ3ZhbDEnXSkgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ2Zyb20nIGtleXNcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHVuaXF1ZSAnZnJvbScga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDMnLCB0bzogJ3ZhbDMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgICAgcHJvcDM6IG5ldyBTZXQoWyd2YWwzJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ3RvJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ3RvJyBrZXlzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMycsIHRvOiAndmFsMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7XG4gICAgICAgIHByb3AxOiBuZXcgU2V0KFsndmFsMSddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgICBwcm9wMzogbmV3IFNldChbJ3ZhbDMnXSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgaGFzaE1hcCB3aGVuIGdpdmVuIGFuIGVtcHR5IGFycmF5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgaGFzaE1hcCB3aGVuIGdpdmVuIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW107XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIGtleXNcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgaGFuZGxlIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBlbXB0eSAnZnJvbScga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICcnLCB0bzogJ3ZhbDMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBhbiBlbXB0eSBoYXNoTWFwIHdoZW4gdGhlICd0bycga2V5IGlzIGVtcHR5IGluIGFsbCBvYmplY3RzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJycgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJycgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDMnLCB0bzogJycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7IHByb3AxOiBuZXcgU2V0KFsnJ10pLCBwcm9wMjogbmV3IFNldChbJyddKSwgcHJvcDM6IG5ldyBTZXQoWycnXSkgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzIHdoZW4gaXNMb3dlckNhc2UgaXMgc2V0IHRvIGZhbHNlXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzIHdoZW4gaXNMb3dlckNhc2UgaXMgc2V0IHRvIGZhbHNlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7XG4gICAgICAgIHByb3AxOiBuZXcgU2V0KFsndmFsMScsICd2YWwyJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzLCAnZnJvbScsICd0bycsIGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggY3VzdG9tIGZyb21LZXkgYW5kIHRvS2V5IHZhbHVlc1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGN1c3RvbSBmcm9tS2V5IGFuZCB0b0tleSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXMgd2hlbiBpc0xvd2VyQ2FzZSBpcyBzZXQgdG8gdHJ1ZVxuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byB0cnVlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwyJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hNYXAgPSB7XG4gICAgICAgIHByb3AxOiBuZXcgU2V0KFsndmFsMScsICd2YWwyJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzLCAnZnJvbScsICd0bycsIHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHByb3BlcnRpZXMgaWYgaXQgZXhpc3RzLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZyb20gcHJvcGVydGllcyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdrZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSB0cmFpdHMgaWYgaXQgZXhpc3RzLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZyb20gdHJhaXRzIHdoZW4gaXQgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge1xuICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgfSxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3Qga2V5ID0gJ2tleSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWx1ZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIGNvbnRleHQudHJhaXRzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIGNvbnRleHQudHJhaXRzIHdoZW4gaXQgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHtcbiAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdrZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiB0aGUgbWVzc2FnZSBpcyBudWxsLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgbWVzc2FnZSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IG51bGw7XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGtleSBpcyBudWxsLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUga2V5IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3Qga2V5ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiBhbnkgb2YgdGhlIGtleVNldHMuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW55IG9mIHRoZSBrZXlTZXRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdub25leGlzdGVudEtleSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmxhdHRlbkpzb24nLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBzaW1wbGUgSlNPTiBvYmplY3Qgd2l0aCBubyBuZXN0ZWQgb2JqZWN0cyBvciBhcnJheXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIHNpbXBsZSBKU09OIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICBjb3VudHJ5OiAnVVNBJyxcbiAgICAgICAgfSxcbiAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJ10sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgJ2FkZHJlc3Muc3RyZWV0JzogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgJ2FkZHJlc3MuY2l0eSc6ICdOZXcgWW9yaycsXG4gICAgICAgICdhZGRyZXNzLmNvdW50cnknOiAnVVNBJyxcbiAgICAgICAgJ2hvYmJpZXNbMF0nOiAncmVhZGluZycsXG4gICAgICAgICdob2JiaWVzWzFdJzogJ3BhaW50aW5nJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6IG51bGwsIGFnZTogdW5kZWZpbmVkLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgbmFtZTogbnVsbCwgYWdlOiB1bmRlZmluZWQsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggZW1wdHkgYXJyYXlzIGFuZCBvYmplY3RzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGVtcHR5IGFycmF5cyBhbmQgb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6IFtdLCBhZ2U6IHt9LCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgbmFtZTogW10sIGFnZToge30sIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyAvLyBOZWVkIHRvIGZpeCB0aGlzIHRlc3RcbiAgICAvLyAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGhhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBhIEpTT04gb2JqZWN0IGNvcnJlY3RseS5cbiAgICAvLyBpdCgnc2hvdWxkIGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzIGluIGEgSlNPTiBvYmplY3QgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIC8vICAgY29uc3QgZGF0YSA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH07XG4gICAgLy8gICBkYXRhWydzZWxmJ10gPSBkYXRhO1xuICAgIC8vICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCwgc2VsZjogJ1tDaXJjdWxhcl0nIH07XG4gICAgLy8gICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAvLyAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIC8vIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGgga2V5cyBjb250YWluaW5nIHNwZWNpYWwgY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7ICduYW1lLmZpcnN0JzogJ0pvaG4nLCAnbmFtZS5sYXN0JzogJ0RvZScsICdhZ2VAJzogMzAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCAnYWdlQCc6IDMwIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdCB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIG5vbi1zdHJpbmcga2V5cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tc3RyaW5nIGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAxOiAnb25lJywgMjogJ3R3bycsIDM6ICd0aHJlZScgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyAnMSc6ICdvbmUnLCAnMic6ICd0d28nLCAnMyc6ICd0aHJlZScgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGgga2V5cyBjb250YWluaW5nIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7ICduYW1lLmZpcnN0JzogJ0pvaG4nLCAnbmFtZS5sYXN0JzogJ0RvZScsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAnbmFtZS5maXJzdCc6ICdKb2huJyxcbiAgICAgICAgJ25hbWUubGFzdCc6ICdEb2UnLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGgga2V5cyB0aGF0IGFyZSByZXNlcnZlZCB3b3Jkcy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCByZXNlcnZlZCB3b3JkIGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBjbGFzczogJ01hdGgnLCBmdW5jdGlvbjogJ2FkZCcsIHJldHVybjogJ3Jlc3VsdCcgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBjbGFzczogJ01hdGgnLCBmdW5jdGlvbjogJ2FkZCcsIHJldHVybjogJ3Jlc3VsdCcgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlICdmbGF0dGVuSnNvbicgZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBkZWVwbHkgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBkZWVwbHkgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgIHN0cmVldDogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAgIHN0YXRlOiAnTlknLFxuICAgICAgICAgIHppcDogJzEwMDAxJyxcbiAgICAgICAgfSxcbiAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJywgJ2Nvb2tpbmcnXSxcbiAgICAgICAgZnJpZW5kczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdKYW5lJyxcbiAgICAgICAgICAgIGFnZTogMjgsXG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgIHN0cmVldDogJzQ1NiBFbG0gU3QnLFxuICAgICAgICAgICAgICBjaXR5OiAnTG9zIEFuZ2VsZXMnLFxuICAgICAgICAgICAgICBzdGF0ZTogJ0NBJyxcbiAgICAgICAgICAgICAgemlwOiAnOTAwMDEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvYmJpZXM6IFsnaGlraW5nJywgJ3Bob3RvZ3JhcGh5J10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnTWlrZScsXG4gICAgICAgICAgICBhZ2U6IDMyLFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBzdHJlZXQ6ICc3ODkgT2FrIFN0JyxcbiAgICAgICAgICAgICAgY2l0eTogJ0NoaWNhZ28nLFxuICAgICAgICAgICAgICBzdGF0ZTogJ0lMJyxcbiAgICAgICAgICAgICAgemlwOiAnNjAwMDcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhvYmJpZXM6IFsncnVubmluZycsICdnYW1pbmcnXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLmNpdHknOiAnTmV3IFlvcmsnLFxuICAgICAgICAnYWRkcmVzcy5zdGF0ZSc6ICdOWScsXG4gICAgICAgICdhZGRyZXNzLnppcCc6ICcxMDAwMScsXG4gICAgICAgICdob2JiaWVzWzBdJzogJ3JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1sxXSc6ICdwYWludGluZycsXG4gICAgICAgICdob2JiaWVzWzJdJzogJ2Nvb2tpbmcnLFxuICAgICAgICAnZnJpZW5kc1swXS5uYW1lJzogJ0phbmUnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZ2UnOiAyOCxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWRkcmVzcy5zdHJlZXQnOiAnNDU2IEVsbSBTdCcsXG4gICAgICAgICdmcmllbmRzWzBdLmFkZHJlc3MuY2l0eSc6ICdMb3MgQW5nZWxlcycsXG4gICAgICAgICdmcmllbmRzWzBdLmFkZHJlc3Muc3RhdGUnOiAnQ0EnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLnppcCc6ICc5MDAwMScsXG4gICAgICAgICdmcmllbmRzWzBdLmhvYmJpZXNbMF0nOiAnaGlraW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uaG9iYmllc1sxXSc6ICdwaG90b2dyYXBoeScsXG4gICAgICAgICdmcmllbmRzWzFdLm5hbWUnOiAnTWlrZScsXG4gICAgICAgICdmcmllbmRzWzFdLmFnZSc6IDMyLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZGRyZXNzLnN0cmVldCc6ICc3ODkgT2FrIFN0JyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5jaXR5JzogJ0NoaWNhZ28nLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZGRyZXNzLnN0YXRlJzogJ0lMJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy56aXAnOiAnNjAwMDcnLFxuICAgICAgICAnZnJpZW5kc1sxXS5ob2JiaWVzWzBdJzogJ3J1bm5pbmcnLFxuICAgICAgICAnZnJpZW5kc1sxXS5ob2JiaWVzWzFdJzogJ2dhbWluZycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgJ2ZsYXR0ZW5Kc29uJyBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIGtleXMgYW5kIHZhbHVlcy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBrZXlzIGFuZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGFkZHJlc3M6IHsgc3RyZWV0OiAnMTIzIE1haW4gU3QnLCBjaXR5OiAnU2FuIEZyYW5jaXNjbycgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAnYWRkcmVzcy5zdHJlZXQnOiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAnYWRkcmVzcy5jaXR5JzogJ1NhbiBGcmFuY2lzY28nLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMsIGluY2x1ZGluZyBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGRlZXBseSBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIHdpdGggbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgIHN0cmVldDogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgICB6aXA6IDEyMzQ1LFxuICAgICAgICAgIGNvdW50cnk6ICdVU0EnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgICBsYXRpdHVkZTogNDAuNzEyOCxcbiAgICAgICAgICAgIGxvbmdpdHVkZTogLTc0LjAwNixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBob2JiaWVzOiBbJ3JlYWRpbmcnLCAncGFpbnRpbmcnLCAnc3dpbW1pbmcnXSxcbiAgICAgICAgZnJpZW5kczogW1xuICAgICAgICAgIHsgbmFtZTogJ0phbmUnLCBhZ2U6IDI4IH0sXG4gICAgICAgICAgeyBuYW1lOiAnTWlrZScsIGFnZTogMzIgfSxcbiAgICAgICAgICB7IG5hbWU6ICdTYXJhaCcsIGFnZTogMjcgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGV0OiBudWxsLFxuICAgICAgICBmYXZvcml0ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RyZWV0JzogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgJ2FkZHJlc3MuemlwJzogMTIzNDUsXG4gICAgICAgICdhZGRyZXNzLmNvdW50cnknOiAnVVNBJyxcbiAgICAgICAgJ2FkZHJlc3MuY29vcmRpbmF0ZXMubGF0aXR1ZGUnOiA0MC43MTI4LFxuICAgICAgICAnYWRkcmVzcy5jb29yZGluYXRlcy5sb25naXR1ZGUnOiAtNzQuMDA2LFxuICAgICAgICAnaG9iYmllc1swXSc6ICdyZWFkaW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0nOiAncGFpbnRpbmcnLFxuICAgICAgICAnaG9iYmllc1syXSc6ICdzd2ltbWluZycsXG4gICAgICAgICdmcmllbmRzWzBdLm5hbWUnOiAnSmFuZScsXG4gICAgICAgICdmcmllbmRzWzBdLmFnZSc6IDI4LFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ01pa2UnLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZ2UnOiAzMixcbiAgICAgICAgJ2ZyaWVuZHNbMl0ubmFtZSc6ICdTYXJhaCcsXG4gICAgICAgICdmcmllbmRzWzJdLmFnZSc6IDI3LFxuICAgICAgICBwZXQ6IG51bGwsXG4gICAgICAgIGZhdm9yaXRlQ29sb3I6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGFycmF5cyBjb250YWluaW5nIG9iamVjdHMgd2l0aCBkaWZmZXJlbnQgbmVzdGluZyBsZXZlbHMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggYXJyYXlzIGNvbnRhaW5pbmcgb2JqZWN0cyB3aXRoIGRpZmZlcmVudCBuZXN0aW5nIGxldmVscycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgaG9iYmllczogW1xuICAgICAgICAgIHsgbmFtZTogJ1JlYWRpbmcnLCB0eXBlOiAnSW5kb29yJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ1J1bm5pbmcnLCB0eXBlOiAnT3V0ZG9vcicgfSxcbiAgICAgICAgICB7IG5hbWU6ICdDb29raW5nJywgdHlwZTogJ0luZG9vcicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZnJpZW5kczogW1xuICAgICAgICAgIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAyOCB9LFxuICAgICAgICAgIHsgbmFtZTogJ0JvYicsIGFnZTogMzIgfSxcbiAgICAgICAgICB7IG5hbWU6ICdDaGFybGllJywgYWdlOiAyNyB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICdob2JiaWVzWzBdLm5hbWUnOiAnUmVhZGluZycsXG4gICAgICAgICdob2JiaWVzWzBdLnR5cGUnOiAnSW5kb29yJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0ubmFtZSc6ICdSdW5uaW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0udHlwZSc6ICdPdXRkb29yJyxcbiAgICAgICAgJ2hvYmJpZXNbMl0ubmFtZSc6ICdDb29raW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMl0udHlwZSc6ICdJbmRvb3InLFxuICAgICAgICAnZnJpZW5kc1swXS5uYW1lJzogJ0FsaWNlJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWdlJzogMjgsXG4gICAgICAgICdmcmllbmRzWzFdLm5hbWUnOiAnQm9iJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWdlJzogMzIsXG4gICAgICAgICdmcmllbmRzWzJdLm5hbWUnOiAnQ2hhcmxpZScsXG4gICAgICAgICdmcmllbmRzWzJdLmFnZSc6IDI3LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZVJhbmRvbVN0cmluZycsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0Q2FzZXM6IEJhc2VUZXN0Q2FzZVtdID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnc2hvdWxkIGdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCcsXG4gICAgICAgIGxlbmd0aDogOCxcbiAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IDgsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2hvdWxkIGdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyBvZiB0aGUgZGVmYXVsdCBsZW5ndGgnLFxuICAgICAgICBleHBlY3RlZExlbmd0aDogMTAsXG4gICAgICB9LFxuICAgIF07XG4gICAgZmlsdGVyKHRlc3RDYXNlcykuZm9yRWFjaCgodGVzdENhc2UpID0+IHtcbiAgICAgIGl0KHRlc3RDYXNlLm5hbWUsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5kb21TdHJpbmcodGVzdENhc2UubGVuZ3RoKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5sZW5ndGgpLnRvQmUodGVzdENhc2UuZXhwZWN0ZWRMZW5ndGgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRPZmZzZXRJblNlYycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvZmZzZXQgdmFsdWUgaW4gc2Vjb25kcyBmb3IgYSB2YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgb2Zmc2V0IHZhbHVlIGluIHNlY29uZHMgZm9yIGEgdmFsaWQgdGltZXpvbmUgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0FzaWEvS29sa2F0YScpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgxOTgwMCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIDAgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJ1VUQydcbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiVVRDXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnVVRDJyk7XG4gICAgICBleHBlY3Qob2Zmc2V0KS50b0JlKDApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nICdFdGMvVVRDJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIDAgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgXCJFdGMvVVRDXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnRXRjL1VUQycpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkIGZvciBhbiBpbnZhbGlkIHRpbWV6b25lIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgYW4gaW52YWxpZCB0aW1lem9uZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnSW52YWxpZC9UaW1lem9uZScpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdW5kZWZpbmVkIG9mZnNldCB2YWx1ZSBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyAnKzA1OjMwJyBpbnZhbGlkIHRpbWV6b25lIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB1bmRlZmluZWQgb2Zmc2V0IHZhbHVlIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiKzA1OjMwXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnKzA1OjMwJyk7XG4gICAgICBleHBlY3Qob2Zmc2V0KS50b0JlKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb3JyZWN0IG9mZnNldCB2YWx1ZSBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyAnQW1lcmljYS9OZXdfWW9yaydcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgXCJBbWVyaWNhL05ld19Zb3JrXCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXRJblNlYygnQXNpYS9DYWxjdXR0YScpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgxOTgwMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmb3JtYXRUaW1lU3RhbXAnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyB3aGVuIG5vIGZvcm1hdCBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyB3aGVuIG5vIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoMTY0MDk5NTIwMDAwMCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lc3RhbXAgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgbW9tZW50IGZvcm1hdCB3aGVuIGZvcm1hdCBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdGltZXN0YW1wIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIG1vbWVudCBmb3JtYXQgd2hlbiBmb3JtYXQgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJzIwMjItMDEtMDFUMDA6MDA6MDAuMDAwWic7XG4gICAgICBjb25zdCBmb3JtYXQgPSAnWVlZWS1NTS1ERCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0ciwgZm9ybWF0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJzIwMjItMDEtMDEnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvciB3aGVuIGFuIGludmFsaWQgZGF0ZSBzdHJpbmcgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGFuIGludmFsaWQgZGF0ZSBzdHJpbmcgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJ2ludmFsaWQtZGF0ZSc7XG4gICAgICBleHBlY3QoZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpKS50b0JlTmFOKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIE5hTiB3aGVuIGFuIGludmFsaWQgZGF0ZSBzdHJpbmcgaXMgcHJvdmlkZWQgYW5kIG5vIGZvcm1hdCBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBOYU4gd2hlbiBhbiBpbnZhbGlkIGRhdGUgc3RyaW5nIGlzIHByb3ZpZGVkIGFuZCBubyBmb3JtYXQgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJ2ludmFsaWQtZGF0ZSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0cik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTmFOKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIE5hTiB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwcm92aWRlZCBhcyB0aGUgZGF0ZSBzdHJpbmcgYW5kIG5vIGZvcm1hdCBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBOYU4gd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcHJvdmlkZWQgYXMgdGhlIGRhdGUgc3RyaW5nIGFuZCBubyBmb3JtYXQgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0cik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTmFOKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIE5hTiB3aGVuIGFuIGludmFsaWQgZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIE5hTiB3aGVuIGFuIGludmFsaWQgZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcyMDIyLTAxLTAxVDAwOjAwOjAwLjAwMFonO1xuICAgICAgY29uc3QgZm9ybWF0ID0gJ2ludmFsaWRGb3JtYXQnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIsIGZvcm1hdCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKCdpbnZhbTEvMS8yMDIyaTZGb3IwYW10Jyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gYSB2YWxpZCB0aW1lc3RhbXAgc3RyaW5nIGlzIHByb3ZpZGVkIGluc3RlYWQgb2YgYSBkYXRlIHN0cmluZy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyB3aGVuIGEgdmFsaWQgdGltZXN0YW1wIHN0cmluZyBpcyBwcm92aWRlZCBpbnN0ZWFkIG9mIGEgZGF0ZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJzIwMjItMDEtMDFUMDA6MDA6MDAuMDAwWic7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0cik7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKDE2NDA5OTUyMDAwMDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaGFzaFRvU2hhMjU2JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgc3RyaW5nIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGEgc3RyaW5nIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAndGVzdCBzdHJpbmcnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnZDU1NzljNDZkZmNjN2YxODIwNzAxM2U2NWI0NGU0Y2I0ZTJjMjI5OGY0YWM0NTdiYThmODI3NDNmMzFlOTMwYic7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIEJ1ZmZlciBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhIEJ1ZmZlciBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gQnVmZmVyLmZyb20oJ3Rlc3QgYnVmZmVyJyk7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICc1MjVlZjVmN2JhZjU2NTI4YjQ4NzcwOTIyZTk4ZTgwMDMxMGQzNjg1NjgxZDM0ZWU1OTI5MDJhYTI1MjQ1OGIzJztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IG51bWJlciBhcnJheSBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBudW1iZXIgYXJyYXkgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dDogbnVtYmVyW10gPSBbXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ2UzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUnO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgQnVmZmVyIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IEJ1ZmZlciBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gQnVmZmVyLmZyb20oW10pO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgc3RyaW5nIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ2UzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUnO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYSBudW1iZXIgYXJyYXkgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBudW1iZXIgYXJyYXkgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAyLCAzLCA0LCA1XTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzc0ZjgxZmUxNjdkOTliNGNiNDFkNmQwY2NkYTgyMjc4Y2FlZTlmM2UyZjI1ZDVlNWEzOTM2ZmYzZGNlYzYwZDAnO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYSBub24tQVNDSUkgc3RyaW5nIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGEgbm9uLUFTQ0lJIHN0cmluZyBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ+S9oOWlveS4lueVjCc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICc1MDhkNjlkYzIxYmY1ZDJmODA0MDE0YjE2ODg5NTNhMTJkNWRmZGU3MWJlNmNkOTU0MTc3OTgwZDVkMTc0MWJiJztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlVVVJRCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGdlbmVyYXRlVVVJRCBmdW5jdGlvbiByZXR1cm5zIGEgVVVJRCBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVVSUQgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuICAgICAgZXhwZWN0KHR5cGVvZiB1dWlkKS50b0JlKCdzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2VuZXJhdGVVVUlEIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIHVuaXF1ZSBVVUlEIGVhY2ggdGltZSBpdCBpcyBjYWxsZWRcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdW5pcXVlIFVVSUQgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQxID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBjb25zdCB1dWlkMiA9IGdlbmVyYXRlVVVJRCgpO1xuICAgICAgZXhwZWN0KHV1aWQxKS5ub3QudG9CZSh1dWlkMik7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdlbmVyYXRlVVVJRCBmdW5jdGlvbiByZXR1cm5zIGEgVVVJRCBzdHJpbmcgd2l0aCBsZW5ndGggMzZcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVVSUQgc3RyaW5nIHdpdGggbGVuZ3RoIDM2JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuICAgICAgZXhwZWN0KHV1aWQubGVuZ3RoKS50b0JlKDM2KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2VuZXJhdGVVVUlEIGZ1bmN0aW9uIHJldHVybnMgYSBVVUlEIHN0cmluZyB3aXRoIDQgZGFzaGVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVVUlEIHN0cmluZyB3aXRoIDQgZGFzaGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXVpZCA9IGdlbmVyYXRlVVVJRCgpO1xuICAgICAgY29uc3QgZGFzaENvdW50ID0gKHV1aWQubWF0Y2goLy0vZykgfHwgW10pLmxlbmd0aDtcbiAgICAgIGV4cGVjdChkYXNoQ291bnQpLnRvQmUoNCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0b1N0cmluZycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBzdHJpbmcgd2hlbiBpbnB1dCBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ3Rlc3Qgc3RyaW5nJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1N0cmluZyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIFwibnVsbFwiIHdoZW4gaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1N0cmluZyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdudWxsJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gSlNPTiBzdHJpbmcgd2hlbiBpbnB1dCBpcyBhIGN1c3RvbSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsga2V5OiAndmFsdWUnLCBhbm90aGVyS2V5OiAxMjMgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1N0cmluZyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKEpTT04uc3RyaW5naWZ5KGlucHV0KSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGlucHV0IGhhcyBjaXJjdWxhciByZWZlcmVuY2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2lyY3VsYXJPYmo6IGFueSA9IHt9O1xuICAgICAgY2lyY3VsYXJPYmouc2VsZiA9IGNpcmN1bGFyT2JqO1xuICAgICAgZXhwZWN0KCgpID0+IGNvbnZlcnRUb1N0cmluZyhjaXJjdWxhck9iaikpLnRvVGhyb3coVHlwZUVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBib29sZWFuIHRydWUgdG8gSlNPTiBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHRydWU7XG4gICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndHJ1ZScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY29udmVydCBhcnJheSB0byBKU09OIHN0cmluZyB3aGVuIGlucHV0IGlzIGFuIGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgMiwgM107XG4gICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShKU09OLnN0cmluZ2lmeShpbnB1dCkpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY29udmVydCBhIG51bWJlciB0byBhIEpTT04gc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAxMjM7XG4gICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnMTIzJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgaGFuZGxlIHN0cmluZ3Mgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdzcGVjaWFsIUAjJCVeJiooKV8re306XCI8Pj8nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvU3RyaW5nKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzIHRvIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGxhcmdlT2JqZWN0ID0ge1xuICAgICAgICBrZXkxOiAndmFsdWUxJyxcbiAgICAgICAga2V5MjogQXJyYXkoMTAwMCkuZmlsbCgndmFsdWUyJyksXG4gICAgICAgIGtleTM6IHsgbmVzdGVkS2V5OiAnbmVzdGVkVmFsdWUnIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvU3RyaW5nKGxhcmdlT2JqZWN0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoXG4gICAgICAgICd7XCJrZXkxXCI6XCJ2YWx1ZTFcIixcImtleTJcIjpbXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIixcInZhbHVlMlwiLFwidmFsdWUyXCIsXCJ2YWx1ZTJcIl0sXCJrZXkzXCI6e1wibmVzdGVkS2V5XCI6XCJuZXN0ZWRWYWx1ZVwifX0nLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3V1aWR2NScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIHRoZSBzYW1lIFVVSUQgZm9yIHRoZSBzYW1lIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAndGVzdC12YWx1ZSc7XG4gICAgICBjb25zdCB1dWlkMSA9IHV1aWR2NShpbnB1dCk7XG4gICAgICBjb25zdCB1dWlkMiA9IHV1aWR2NShpbnB1dCk7XG5cbiAgICAgIGV4cGVjdCh1dWlkMSkudG9CZSh1dWlkMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGRpZmZlcmVudCBVVUlEcyBmb3IgZGlmZmVyZW50IGlucHV0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV1aWQxID0gdXVpZHY1KCdmaXJzdC12YWx1ZScpO1xuICAgICAgY29uc3QgdXVpZDIgPSB1dWlkdjUoJ3NlY29uZC12YWx1ZScpO1xuICAgICAgZXhwZWN0KHV1aWQxKS5ub3QudG9CZSh1dWlkMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkIFVVSUQgdjUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodXVpZHY1KCd2YWxpZC10ZXN0JykpLnRvQmUoJzQ5ODQzMTY5LWVlOTEtNTNkNC04MmFlLTAyZGQ2NzZjOTJhZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgc3RyaW5nIGlucHV0cycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1dWlkdjUoJycpKS50b0JlKCcxYzdmY2YxMy03NGFmLTU1OTUtOGVlOS1kNzJiZTZjMWFjNDInKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZsYXR0ZW5RdWVyeVBhcmFtcycsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0Q2FzZXM6IGFueSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2ZsYXR0ZW4gYXJyYXkgdmFsdWVzIHRvIGZpcnN0IGVsZW1lbnRzJyxcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBrZXkxOiBbJ3ZhbHVlMSddLFxuICAgICAgICAgIGtleTI6IFsndmFsdWUyJ10sXG4gICAgICAgICAga2V5MzogWzEyM10sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAga2V5MTogJ3ZhbHVlMScsXG4gICAgICAgICAga2V5MjogJ3ZhbHVlMicsXG4gICAgICAgICAga2V5MzogMTIzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2hhbmRsZSBudWxsIGlucHV0JyxcbiAgICAgICAgaW5wdXQ6IG51bGwsXG4gICAgICAgIGV4cGVjdGVkOiB7fSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdoYW5kbGUgdW5kZWZpbmVkIGlucHV0JyxcbiAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgZXhwZWN0ZWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2hhbmRsZSBlbXB0eSBvYmplY3QnLFxuICAgICAgICBpbnB1dDoge30sXG4gICAgICAgIGV4cGVjdGVkOiB7fSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdpZ25vcmUgbnVsbC91bmRlZmluZWQgYXJyYXkgZWxlbWVudHMnLFxuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGtleTE6IFt1bmRlZmluZWRdLFxuICAgICAgICAgIGtleTI6IFtudWxsXSxcbiAgICAgICAgICBrZXkzOiBbdW5kZWZpbmVkLCAndmFsdWUnXSxcbiAgICAgICAgICBrZXk0OiBbbnVsbCwgJ3ZhbHVlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAga2V5MzogW3VuZGVmaW5lZCwgJ3ZhbHVlJ10sXG4gICAgICAgICAga2V5NDogW251bGwsICd2YWx1ZSddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2hhbmRsZSBtaXhlZCB0eXBlIHZhbHVlcyBpbiBhcnJheXMnLFxuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIG51bWJlcjogWzQyXSxcbiAgICAgICAgICBzdHJpbmc6IFsndGVzdCddLFxuICAgICAgICAgIGJvb2xlYW46IFt0cnVlXSxcbiAgICAgICAgICBvYmplY3Q6IFt7IG5lc3RlZDogJ3ZhbHVlJyB9XSxcbiAgICAgICAgICBkYXRlOiBbbmV3IERhdGUoJzIwMjQtMDEtMDEnKV0sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgbnVtYmVyOiA0MixcbiAgICAgICAgICBzdHJpbmc6ICd0ZXN0JyxcbiAgICAgICAgICBib29sZWFuOiB0cnVlLFxuICAgICAgICAgIG9iamVjdDogeyBuZXN0ZWQ6ICd2YWx1ZScgfSxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgnMjAyNC0wMS0wMScpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2hhbmRsZSBlbXB0eSBhcnJheXMnLFxuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGtleTE6IFtdLFxuICAgICAgICAgIGtleTI6IFsndmFsdWUnXSxcbiAgICAgICAgICBrZXkzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgZXhwZWN0ZWQ6IHtcbiAgICAgICAgICBrZXkyOiAndmFsdWUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2tlZXAgbm9uLWFycmF5IHZhbHVlcyB1bmNoYW5nZWQnLFxuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIHN0cmluZzogJ2RpcmVjdCBzdHJpbmcnLFxuICAgICAgICAgIG51bWJlcjogNDIsXG4gICAgICAgICAgYm9vbGVhbjogdHJ1ZSxcbiAgICAgICAgICBvYmplY3Q6IHsgdGVzdDogJ3ZhbHVlJyB9LFxuICAgICAgICAgIGFycmF5OiBbJ2ZpcnN0JywgJ3NlY29uZCddLFxuICAgICAgICB9LFxuICAgICAgICBleHBlY3RlZDoge1xuICAgICAgICAgIHN0cmluZzogJ2RpcmVjdCBzdHJpbmcnLFxuICAgICAgICAgIG51bWJlcjogNDIsXG4gICAgICAgICAgYm9vbGVhbjogdHJ1ZSxcbiAgICAgICAgICBvYmplY3Q6IHsgdGVzdDogJ3ZhbHVlJyB9LFxuICAgICAgICAgIGFycmF5OiBbJ2ZpcnN0JywgJ3NlY29uZCddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2hhbmRsZSBtaXhlZCBhcnJheSBhbmQgbm9uLWFycmF5IHZhbHVlcycsXG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgYXJyYXlWYWx1ZTogWydmaXJzdCddLFxuICAgICAgICAgIGVtcHR5QXJyYXk6IFtdLFxuICAgICAgICAgIGRpcmVjdFZhbHVlOiAnc3RyaW5nJyxcbiAgICAgICAgICBudWxsVmFsdWU6IG51bGwsXG4gICAgICAgICAgdW5kZWZpbmVkVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgZXhwZWN0ZWQ6IHtcbiAgICAgICAgICBhcnJheVZhbHVlOiAnZmlyc3QnLFxuICAgICAgICAgIGRpcmVjdFZhbHVlOiAnc3RyaW5nJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdoYW5kbGUgbmVzdGVkIGFycmF5cycsXG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgbmVzdGVkOiBbXG4gICAgICAgICAgICBbMSwgMl0sXG4gICAgICAgICAgICBbMywgNF0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtaXhlZDogW1snYScsICdiJ10sICdjJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgbmVzdGVkOiBbXG4gICAgICAgICAgICBbMSwgMl0sXG4gICAgICAgICAgICBbMywgNF0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtaXhlZDogW1snYScsICdiJ10sICdjJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaGFuZGxlIHNwZWNpYWwgdmFsdWVzIGluIGFycmF5cycsXG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgbmFuOiBbTmFOXSxcbiAgICAgICAgICBpbmZpbml0eTogW0luZmluaXR5XSxcbiAgICAgICAgICBuZWdJbmZpbml0eTogWy1JbmZpbml0eV0sXG4gICAgICAgICAgemVybzogWzBdLFxuICAgICAgICAgIG5lZ1plcm86IFstMF0sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGVjdGVkOiB7XG4gICAgICAgICAgbmFuOiBOYU4sXG4gICAgICAgICAgaW5maW5pdHk6IEluZmluaXR5LFxuICAgICAgICAgIG5lZ0luZmluaXR5OiAtSW5maW5pdHksXG4gICAgICAgICAgemVybzogMCxcbiAgICAgICAgICBuZWdaZXJvOiAtMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7IG5hbWUsIGlucHV0LCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkICR7bmFtZX1gLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChmbGF0dGVuUXVlcnlQYXJhbXMoaW5wdXQpKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19