@discordeno/rest 22.0.1-next.4e4bc48 → 22.0.1-next.4eccbea
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/invalidBucket.d.ts.map +1 -1
- package/dist/invalidBucket.js +1 -1
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +10 -14
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +14 -6
- package/dist/routes.d.ts +7 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +202 -187
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/typings/routes.d.ts +2 -0
- package/dist/typings/routes.d.ts.map +1 -1
- package/dist/typings/routes.js +1 -1
- package/package.json +20 -22
package/dist/manager.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
2
|
import { inspect } from 'node:util';
|
|
3
|
-
import {
|
|
3
|
+
import { camelize, camelToSnakeCase, DISCORDENO_VERSION, delay, getBotIdFromToken, hasProperty, logger, processReactionString, snowflakeToTimestamp, urlToBase64 } from '@discordeno/utils';
|
|
4
4
|
import { createInvalidRequestBucket } from './invalidBucket.js';
|
|
5
5
|
import { Queue } from './queue.js';
|
|
6
6
|
import { createRoutes } from './routes.js';
|
|
@@ -132,17 +132,8 @@ export function createRestManager(options) {
|
|
|
132
132
|
newObj[key] = value;
|
|
133
133
|
continue;
|
|
134
134
|
}
|
|
135
|
-
// Some falsy values should be allowed like null or 0
|
|
136
135
|
if (value !== undefined) {
|
|
137
136
|
switch(key){
|
|
138
|
-
case 'permissions':
|
|
139
|
-
case 'allow':
|
|
140
|
-
case 'deny':
|
|
141
|
-
newObj[key] = typeof value === 'string' ? value : calculateBits(value);
|
|
142
|
-
continue;
|
|
143
|
-
case 'defaultMemberPermissions':
|
|
144
|
-
newObj.default_member_permissions = typeof value === 'string' ? value : calculateBits(value);
|
|
145
|
-
continue;
|
|
146
137
|
case 'nameLocalizations':
|
|
147
138
|
newObj.name_localizations = value;
|
|
148
139
|
continue;
|
|
@@ -317,7 +308,7 @@ export function createRestManager(options) {
|
|
|
317
308
|
headers: loggingHeaders
|
|
318
309
|
});
|
|
319
310
|
const response = await fetch(request).catch(async (error)=>{
|
|
320
|
-
rest.logger.
|
|
311
|
+
rest.logger.debug(`request fetch to ${url} failed.`, error);
|
|
321
312
|
rest.events.requestError(request, error, {
|
|
322
313
|
body: options.requestBodyOptions?.body
|
|
323
314
|
});
|
|
@@ -326,10 +317,12 @@ export function createRestManager(options) {
|
|
|
326
317
|
options.reject({
|
|
327
318
|
ok: false,
|
|
328
319
|
status: 999,
|
|
329
|
-
error: 'Possible network or request shape issue occurred. If this is rare, its a network glitch. If it occurs a lot something is wrong.'
|
|
320
|
+
error: 'Possible network or request shape issue occurred. If this is rare, its a network glitch. If it occurs a lot something is wrong.',
|
|
321
|
+
errorObject: error
|
|
330
322
|
});
|
|
331
|
-
throw error;
|
|
332
323
|
});
|
|
324
|
+
// If response is undefined, the error has been handled in the catch block above
|
|
325
|
+
if (!response) return;
|
|
333
326
|
rest.logger.debug(`request fetched from ${url} with status ${response.status} & ${response.statusText}`);
|
|
334
327
|
// Sometimes the Content-Type may be "application/json; charset=utf-8", for this reason, we need to check the start of the header
|
|
335
328
|
const body = await (response.headers.get('Content-Type')?.startsWith('application/json') ? response.json() : response.text()).catch(()=>null);
|
|
@@ -650,6 +643,9 @@ export function createRestManager(options) {
|
|
|
650
643
|
reason
|
|
651
644
|
});
|
|
652
645
|
},
|
|
646
|
+
async getGuildRoleMemberCounts (guildId) {
|
|
647
|
+
return await rest.get(rest.routes.guilds.roles.memberCounts(guildId));
|
|
648
|
+
},
|
|
653
649
|
async createRole (guildId, body, reason) {
|
|
654
650
|
return await rest.post(rest.routes.guilds.roles.all(guildId), {
|
|
655
651
|
body,
|
|
@@ -1620,4 +1616,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
|
|
|
1620
1616
|
return HttpResponseCode;
|
|
1621
1617
|
}(HttpResponseCode || {});
|
|
1622
1618
|
|
|
1623
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICBzbm93Zmxha2VUb1RpbWVzdGFtcCxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9WRVJTSU9OID0gMTBcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknXG5cbmV4cG9ydCBjb25zdCBBVURJVF9MT0dfUkVBU09OX0hFQURFUiA9ICd4LWF1ZGl0LWxvZy1yZWFzb24nXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZydcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIgPSAneC1yYXRlbGltaXQtZ2xvYmFsJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1idWNrZXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9TQ09QRV9IRUFERVIgPSAneC1yYXRlbGltaXQtc2NvcGUnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBvcHRpb25zLmFwcGxpY2F0aW9uSWQgPyBCaWdJbnQob3B0aW9ucy5hcHBsaWNhdGlvbklkKSA6IGdldEJvdElkRnJvbVRva2VuKG9wdGlvbnMudG9rZW4pXG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMXG4gIC8vIERpc2NvcmQgZXJyb3IgY2FuIGdldCBuZXN0ZWQgYSBsb3QsIHNvIHdlIHVzZSBhIGN1c3RvbSBpbnNwZWN0IHRvIGNoYW5nZSB0aGUgZGVwdGggdG8gSW5maW5pdHlcbiAgY29uc3QgYmFzZUVycm9yUHJvdG90eXBlID0ge1xuICAgIFtpbnNwZWN0LmN1c3RvbV0oX2RlcHRoOiBudW1iZXIsIG9wdGlvbnM6IEluc3BlY3RPcHRpb25zLCBfaW5zcGVjdDogdHlwZW9mIGluc3BlY3QpIHtcbiAgICAgIHJldHVybiBfaW5zcGVjdCh0aGlzLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlcHRoOiBJbmZpbml0eSxcbiAgICAgICAgLy8gU2luY2Ugd2UgY2FsbCBpbnNwZWN0IG9uIG91cnNlbGYsIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgY2FsbHMgdG8gdGhlIGluc3BlY3QuY3VzdG9tIHN5bWJvbCBvciBlbHNlIGl0IHdpbGwgY2F1c2UgYW4gaW5maW5pdGUgbG9vcC5cbiAgICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2UsXG4gICAgICB9KVxuICAgIH0sXG4gIH1cblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb24sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlcjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbkhlYWRlciA/PyAnYXV0aG9yaXphdGlvbicsXG4gICAgYmFzZVVybCxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7IGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgfSksXG4gICAgaXNQcm94aWVkOiAhYmFzZVVybC5zdGFydHNXaXRoKERJU0NPUkRfQVBJX1VSTCksXG4gICAgdXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludDogb3B0aW9ucy5wcm94eT8udXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuICAgIGV2ZW50czoge1xuICAgICAgcmVxdWVzdDogKCkgPT4ge30sXG4gICAgICByZXNwb25zZTogKCkgPT4ge30sXG4gICAgICByZXF1ZXN0RXJyb3I6ICgpID0+IHt9LFxuICAgICAgLi4ub3B0aW9ucy5ldmVudHMsXG4gICAgfSxcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZXNbJHtpfV1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBwYXlsb2FkKVxuICAgICAgcmVzdC5ldmVudHMucmVxdWVzdChyZXF1ZXN0LCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zPy5ib2R5LFxuICAgICAgfSlcblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmVycm9yKGVycm9yKVxuICAgICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0RXJyb3IocmVxdWVzdCwgZXJyb3IsIHsgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHkgfSlcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFzIGNvbXBsZXRlZFxuICAgICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdCg5OTksIGZhbHNlKVxuICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogOTk5LFxuICAgICAgICAgIGVycm9yOiAnUG9zc2libGUgbmV0d29yayBvciByZXF1ZXN0IHNoYXBlIGlzc3VlIG9jY3VycmVkLiBJZiB0aGlzIGlzIHJhcmUsIGl0cyBhIG5ldHdvcmsgZ2xpdGNoLiBJZiBpdCBvY2N1cnMgYSBsb3Qgc29tZXRoaW5nIGlzIHdyb25nLicsXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9KVxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHJlcXVlc3QgZmV0Y2hlZCBmcm9tICR7dXJsfSB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c30gJiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YClcblxuICAgICAgLy8gU29tZXRpbWVzIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXJcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXNwb25zZS5qc29uKCkgOiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlLCB7XG4gICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSxcbiAgICAgICAgcmVzcG9uc2VCb2R5OiBib2R5LFxuICAgICAgfSlcblxuICAgICAgLy8gTWFyayByZXF1ZXN0IGFzIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCwgYm9keSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBhIHJlc3BvbnNlIHdpdGggbm8gY29udGVudFxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYm9keSB9KVxuICAgIH0sXG5cbiAgICBzaW1wbGlmeVVybCh1cmwsIG1ldGhvZCkge1xuICAgICAgY29uc3Qgcm91dGVJbmZvcm1hdGlvbktleTogc3RyaW5nW10gPSBbbWV0aG9kXVxuXG4gICAgICBjb25zdCBxdWVyeVBhcmFtSW5kZXggPSB1cmwuaW5kZXhPZignPycpXG4gICAgICBjb25zdCByb3V0ZSA9IHF1ZXJ5UGFyYW1JbmRleCAhPT0gLTEgPyB1cmwuc2xpY2UoMCwgcXVlcnlQYXJhbUluZGV4KSA6IHVybFxuXG4gICAgICAvLyBTaW5jZSB0aGUgdXJscyBzdGFydCB3aXRoIC8gdGhlIGZpcnN0IHBhcnQgd2lsbCBhbHdheXMgYmUgZW1wdHlcbiAgICAgIGNvbnN0IHNwbGl0dGVkUm91dGUgPSByb3V0ZS5zcGxpdCgnLycpXG5cbiAgICAgIC8vIDEpIFN0cmlwIHRoZSBtaW5vciBwYXJhbXNcbiAgICAgIC8vICAgIFRoZSBvbmx5IG1ham9ycyBhcmUgY2hhbm5lbHMsIGd1aWxkcywgd2ViaG9va3MgYW5kIHdlYmhvb2tzIHdpdGggdGhlaXIgdG9rZW5cblxuICAgICAgY29uc3Qgc3RyaXBwZWRSb3V0ZSA9IHNwbGl0dGVkUm91dGVcbiAgICAgICAgLm1hcCgocGFydCwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgLy8gV2hpbGUgcGFyc2VJbnQgd2lsbCB0cnVuY2F0ZSB0aGUgc25vd2ZsYWtlIGlkLCBpdCB3aWxsIHN0aWxsIHRlbGwgdXMgaWYgaXQgaXMgYSBudW1iZXJcbiAgICAgICAgICBjb25zdCBpc051bWJlciA9IE51bWJlci5pc0Zpbml0ZShwYXJzZUludChwYXJ0LCAxMCkpXG5cbiAgICAgICAgICBpZiAoIWlzTnVtYmVyKSB7XG4gICAgICAgICAgICAvLyBSZWFjdGlvbnMgZW1vamkgbmVlZCB0byBiZSBzdHJpcHBlZCBhcyBpdCBpcyBhIG1pbm9yIHBhcmFtZXRlclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDEgJiYgYXJyYXlbaW5kZXggLSAxXSA9PT0gJ3JlYWN0aW9ucycpIHJldHVybiAneCdcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBvbiBhIHdlYmhvb2sgb3IgaWYgaXQgaXMgcGFydCBvZiB0aGUgcm91dGUsIGtlZXAgaXQgYXMgaXQgaXMgYSBtYWpvciBwYXJhbWV0ZXJcbiAgICAgICAgICAgIHJldHVybiBwYXJ0XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIG9uIGEgY2hhbm5lbCBpZCwgYSBndWlsZCBpZCBvciBhIHdlYmhvb2sgaWRcbiAgICAgICAgICBjb25zdCBpc01ham9yID0gaW5kZXggPj0gMSAmJiAoYXJyYXlbaW5kZXggLSAxXSA9PT0gJ2NoYW5uZWxzJyB8fCBhcnJheVtpbmRleCAtIDFdID09PSAnZ3VpbGRzJyB8fCBhcnJheVtpbmRleCAtIDFdID09PSAnd2ViaG9va3MnKVxuXG4gICAgICAgICAgaWYgKGlzTWFqb3IpIHJldHVybiBwYXJ0XG5cbiAgICAgICAgICByZXR1cm4gJ3gnXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcvJylcblxuICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKHN0cmlwcGVkUm91dGUpXG5cbiAgICAgIC8vIDIpIEFjY291bnQgZm9yIGV4Y2VwdGlvbnNcbiAgICAgIC8vICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTA5MlxuICAgICAgLy8gICAgLSBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZC9kaXNjb3JkLWFwaS1kb2NzL2lzc3Vlcy8xMjk1XG5cbiAgICAgIC8vIFRoZSAyIGV4Y2VwdGlvbnMgYXJlIGZvciBtZXNzYWdlIGRlbGV0ZSwgc28gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBhcmUgaW4gdGhhdCByb3V0ZVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc3BsaXR0ZWRSb3V0ZS5sZW5ndGggPT09IDUgJiYgc3BsaXR0ZWRSb3V0ZVsxXSA9PT0gJ2NoYW5uZWxzJyAmJiBzdHJpcHBlZFJvdXRlLmVuZHNXaXRoKCcvbWVzc2FnZXMveCcpKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHNwbGl0dGVkUm91dGVbNF1cbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gc25vd2ZsYWtlVG9UaW1lc3RhbXAobWVzc2FnZUlkKVxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTA5MlxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wIDwgMTBfMDAwKSB7XG4gICAgICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKCdtZXNzYWdlLWRlbGV0ZS0xMHMnKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTI5NVxuICAgICAgICAvLyAyIHdlZWtzID0gMiAqIDcgKiAyNCAqIDYwICogNjAgKiAxMDAwID0gMTIwOTYwMDAwMFxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wID4gMTIwOTYwMDAwMCkge1xuICAgICAgICAgIHJvdXRlSW5mb3JtYXRpb25LZXkucHVzaCgnbWVzc2FnZS1kZWxldGUtMncnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3V0ZUluZm9ybWF0aW9uS2V5LmpvaW4oJzonKVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0OiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IHJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5tZXRob2QpXG5cbiAgICAgIGlmIChyZXF1ZXN0LnJ1blRocm91Z2hRdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSB0aGUgcmVxdWVzdCBoYXMgYSB0b2tlbiwgdXNlIGl0XG4gICAgICAvLyBFbHNlIGZhbGxiYWNrIHRvIHByZWZpeCB3aXRoIHRoZSBib3QgdG9rZW5cbiAgICAgIGNvbnN0IHF1ZXVlSWRlbnRpZmllciA9IHJlcXVlc3QucmVxdWVzdEJvZHlPcHRpb25zPy5oZWFkZXJzPy5hdXRob3JpemF0aW9uID8/IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgY29uc3QgcXVldWUgPSByZXN0LnF1ZXVlcy5nZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDUkVBVEVTIEEgTkVXIFFVRVVFXG4gICAgICAgIGNvbnN0IGJ1Y2tldFF1ZXVlID0gbmV3IFF1ZXVlKHJlc3QsIHsgdXJsLCBkZWxldGVRdWV1ZURlbGF5OiByZXN0LmRlbGV0ZVF1ZXVlRGVsYXksIGlkZW50aWZpZXI6IHF1ZXVlSWRlbnRpZmllciB9KVxuXG4gICAgICAgIC8vIFNhdmUgcXVldWVcbiAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gLCBidWNrZXRRdWV1ZSlcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHJvdXRlLCBvcHRpb25zKSB7XG4gICAgICAvLyBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaGVyZSBiZWNhdXNlIG9mIGhvdyBzdGFjayB0cmFjZXMgZ2V0IGNhbGN1bGF0ZWRcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKClcblxuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuICAgICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgICBib2R5OiBvcHRpb25zPy5ib2R5LFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKHJlcXVlc3QpXG5cbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXN1bHQuanNvbigpIDogcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgICByZXN0LmV2ZW50cy5yZXNwb25zZShyZXF1ZXN0LCByZXN1bHQsIHtcbiAgICAgICAgICByZXF1ZXN0Qm9keTogb3B0aW9ucz8uYm9keSxcbiAgICAgICAgICByZXNwb25zZUJvZHk6IGJvZHksXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/ICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keSkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyAodHlwZW9mIGRhdGEuYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGRhdGEuYm9keSkgOiBkYXRhLmJvZHkpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JUZXh0OiBzdHJpbmdcblxuICAgICAgICAgICAgc3dpdGNoIChyZWFzb24uc3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgNDAwOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIG9wdGlvbnMgd2FzIGltcHJvcGVybHkgZm9ybWF0dGVkLCBvciB0aGUgc2VydmVyIGNvdWxkbid0IHVuZGVyc3RhbmQgaXQuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHdhcyBtaXNzaW5nIG9yIGludmFsaWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiB0b2tlbiB5b3UgcGFzc2VkIGRpZCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHRoZSByZXNvdXJjZS4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgcmVzb3VyY2UgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBkb2Vzbid0IGV4aXN0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDU6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBIVFRQIG1ldGhvZCB1c2VkIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGxvY2F0aW9uIHNwZWNpZmllZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJZb3UncmUgYmVpbmcgcmF0ZWxpbWl0ZWQuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDUwMjpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlcmUgd2FzIG5vdCBhIGdhdGV3YXkgYXZhaWxhYmxlIHRvIHByb2Nlc3MgeW91ciBvcHRpb25zLiBXYWl0IGEgYml0IGFuZCByZXRyeS4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSByZWFzb24uc3RhdHVzVGV4dCA/PyAnVW5rbm93biBlcnJvcidcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBbJHtyZWFzb24uc3RhdHVzfV0gJHtlcnJvclRleHR9YFxuXG4gICAgICAgICAgICAvLyBJZiBkaXNjb3JkIHNlbnQgdXMgSlNPTiwgaXQgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHdoaWNoIHdlIGNhbiBnZXQgYW5kIGFkZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhlIGZ1bGwgYm9keSB3aWxsIGJlIGluIHRoZSBlcnJvci5jYXVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVmZXJlbmNlI2Vycm9yLW1lc3NhZ2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlYXNvbi5ib2R5ID09PSAnb2JqZWN0JyAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ2NvZGUnKSAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ21lc3NhZ2UnKSkge1xuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGBcXG5EaXNjb3JkIGVycm9yOiBbJHtyZWFzb24uYm9keS5jb2RlfV0gJHtyZWFzb24uYm9keS5tZXNzYWdlfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IuY2F1c2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYmFzZUVycm9yUHJvdG90eXBlKSwgcmVhc29uKVxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25FbW9qaShpZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIGJvZHk6IE1vZGlmeUd1aWxkVGVtcGxhdGUpOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdFRvU3BlYWtUaW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va0NoYW5uZWxJZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50SWQ6IHVzZXJJZCB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppKGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaXMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZEVtb2ppW10gfT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkLCBvcHRpb25zPy53aXRoTG9jYWxpemF0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aExvY2FsaXphdGlvbnMpLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldChyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEluY2lkZW50c0RhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uW10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb24+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFNvdW5kYm9hcmRTb3VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLnNlbmRTb3VuZChjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmxpc3REZWZhdWx0KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRTb3VuZGJvYXJkU291bmRbXSB9PihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUxvYmJ5KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5jcmVhdGUoKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TG9iYnkobG9iYnlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUxvYmJ5KGxvYmJ5SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUxvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkTWVtYmVyVG9Mb2JieShsb2JieUlkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkTG9iYnlNZW1iZXI+KHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVNZW1iZXJGcm9tTG9iYnkobG9iYnlJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubWVtYmVyKGxvYmJ5SWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sZWF2ZShsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpbmtDaGFubmVsVG9Mb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5saW5rKGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5saW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsImluc3BlY3QiLCJjYWxjdWxhdGVCaXRzIiwiY2FtZWxpemUiLCJjYW1lbFRvU25ha2VDYXNlIiwiRElTQ09SREVOT19WRVJTSU9OIiwiZGVsYXkiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImhhc1Byb3BlcnR5IiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwic25vd2ZsYWtlVG9UaW1lc3RhbXAiLCJ1cmxUb0Jhc2U2NCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwiUXVldWUiLCJjcmVhdGVSb3V0ZXMiLCJESVNDT1JEX0FQSV9WRVJTSU9OIiwiRElTQ09SRF9BUElfVVJMIiwiQVVESVRfTE9HX1JFQVNPTl9IRUFERVIiLCJSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIiLCJSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwidG9rZW4iLCJiYXNlVXJsIiwicHJveHkiLCJiYXNlRXJyb3JQcm90b3R5cGUiLCJjdXN0b20iLCJfZGVwdGgiLCJfaW5zcGVjdCIsImRlcHRoIiwiSW5maW5pdHkiLCJjdXN0b21JbnNwZWN0IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwicHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMiLCJxdWV1ZXMiLCJNYXAiLCJyYXRlTGltaXRlZFBhdGhzIiwidmVyc2lvbiIsImV2ZW50cyIsInJlcXVlc3QiLCJyZXNwb25zZSIsInJlcXVlc3RFcnJvciIsInJvdXRlcyIsImNyZWF0ZUJhc2VIZWFkZXJzIiwiY2hlY2tSYXRlTGltaXRzIiwidXJsIiwiaWRlbnRpZmllciIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwiRGF0ZSIsInJlc2V0VGltZXN0YW1wIiwidXBkYXRlVG9rZW5RdWV1ZXMiLCJvbGRUb2tlbiIsIm5ld1Rva2VuIiwiRXJyb3IiLCJoZWFkZXJzIiwidW5kZWZpbmVkIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm5ld0lkZW50aWZpZXIiLCJrZXkiLCJxdWV1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJuZXdLZXkiLCJuZXdRdWV1ZSIsIndhaXRpbmciLCJ1bnNoaWZ0IiwicGVuZGluZyIsImNsZWFudXAiLCJzZXQiLCJyYXRlbGltaXRQYXRoIiwiYnVja2V0SWQiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwiaW5jbHVkZXMiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsIlJlcXVlc3QiLCJkZWJ1ZyIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJqc29uIiwidGV4dCIsInJlcXVlc3RCb2R5IiwicmVzcG9uc2VCb2R5Iiwic2ltcGxpZnlVcmwiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJyb3V0ZUluZm9ybWF0aW9uS2V5IiwicXVlcnlQYXJhbUluZGV4IiwiaW5kZXhPZiIsInNsaWNlIiwic3BsaXR0ZWRSb3V0ZSIsInN0cmlwcGVkUm91dGUiLCJwYXJ0IiwiaW5kZXgiLCJhcnJheSIsImlzTnVtYmVyIiwiaXNGaW5pdGUiLCJwYXJzZUludCIsImlzTWFqb3IiLCJlbmRzV2l0aCIsIm1lc3NhZ2VJZCIsInRpbWVzdGFtcCIsInByb2Nlc3NSZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWVJZGVudGlmaWVyIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsInJlc3VsdCIsImNhdXNlIiwiY3JlYXRlIiwicGFyc2UiLCJQcm9taXNlIiwiZGF0YSIsImVycm9yVGV4dCIsIm1lc3NhZ2UiLCJjb2RlIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJyZWFjdGlvbiIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlcyIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwicnVsZUlkIiwicnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJjaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsIm92ZXJ3cml0ZUlkIiwib3ZlcndyaXRlIiwiZGVsZXRlRW1vamkiLCJpZCIsImVtb2ppIiwiZGVsZXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJyZXNwb25zZXMiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjb21tYW5kSWQiLCJjb21tYW5kIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImd1aWxkIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJpbnZpdGVDb2RlIiwiaW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwid2l0aExvY2FsaXphdGlvbnMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkcyIsIm1ha2VSZXF1ZXN0T3B0aW9ucyIsInVzZXJHdWlsZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsInByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiaW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldFN0aWNrZXJQYWNrIiwic3RpY2tlclBhY2tJZCIsInN0aWNrZXJQYWNrIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0Q2hhbm5lbFBpbnMiLCJtZXNzYWdlUGlucyIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VXNlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwibWVzc2FnZVBpbiIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJxdWVyeSIsInNlYXJjaCIsImdldEd1aWxkT25ib2FyZGluZyIsIm9uYm9hcmRpbmciLCJlZGl0R3VpbGRPbmJvYXJkaW5nIiwibW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMiLCJpbmNpZGVudEFjdGlvbnMiLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ0eXBpbmciLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwiYWRkR3VpbGRNZW1iZXIiLCJjcmVhdGVUZXN0RW50aXRsZW1lbnQiLCJtb25ldGl6YXRpb24iLCJlbnRpdGxlbWVudHMiLCJsaXN0RW50aXRsZW1lbnRzIiwiZ2V0RW50aXRsZW1lbnQiLCJlbnRpdGxlbWVudElkIiwiZW50aXRsZW1lbnQiLCJkZWxldGVUZXN0RW50aXRsZW1lbnQiLCJjb25zdW1lRW50aXRsZW1lbnQiLCJsaXN0U2t1cyIsInNrdXMiLCJsaXN0U3Vic2NyaXB0aW9ucyIsInNrdUlkIiwic3Vic2NyaXB0aW9ucyIsImdldFN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbklkIiwic3Vic2NyaXB0aW9uIiwic2VuZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kYm9hcmQiLCJzZW5kU291bmQiLCJsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMiLCJsaXN0RGVmYXVsdCIsImxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMiLCJndWlsZFNvdW5kcyIsImdldEd1aWxkU291bmRib2FyZFNvdW5kIiwic291bmRJZCIsImd1aWxkU291bmQiLCJjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsIm1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kIiwiZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJhcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEiLCJ1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImNyZWF0ZUxvYmJ5IiwibG9iYnkiLCJnZXRMb2JieSIsImxvYmJ5SWQiLCJtb2RpZnlMb2JieSIsImRlbGV0ZUxvYmJ5IiwiYWRkTWVtYmVyVG9Mb2JieSIsInJlbW92ZU1lbWJlckZyb21Mb2JieSIsImxlYXZlTG9iYnkiLCJsaW5rQ2hhbm5lbFRvTG9iYnkiLCJsaW5rIiwidW5saW5rQ2hhbm5lbFRvTG9iYnkiLCJwcmVmZXJTbmFrZUNhc2UiLCJlbmFibGVkIiwiY2FtZWxpemVyIiwieCIsIkh0dHBSZXNwb25zZUNvZGUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxjQUFhO0FBQ3BDLFNBQThCQyxPQUFPLFFBQVEs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
|
|
1619
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbmltcG9ydCB7IHR5cGUgSW5zcGVjdE9wdGlvbnMsIGluc3BlY3QgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHR5cGUge1xuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEsXG4gIERpc2NvcmRBdWRpdExvZyxcbiAgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgRGlzY29yZEJhbixcbiAgRGlzY29yZEJ1bGtCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkQ29ubmVjdGlvbixcbiAgRGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbCxcbiAgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICBEaXNjb3JkSW52aXRlLFxuICBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRMb2JieSxcbiAgRGlzY29yZExvYmJ5TWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIERpc2NvcmRNZXNzYWdlLFxuICBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIERpc2NvcmRSb2xlLFxuICBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIERpc2NvcmRTa3UsXG4gIERpc2NvcmRTb3VuZGJvYXJkU291bmQsXG4gIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICBEaXNjb3JkU3RpY2tlcixcbiAgRGlzY29yZFN0aWNrZXJQYWNrLFxuICBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICBEaXNjb3JkVGVtcGxhdGUsXG4gIERpc2NvcmRUaHJlYWRNZW1iZXIsXG4gIERpc2NvcmRVc2VyLFxuICBEaXNjb3JkVmFuaXR5VXJsLFxuICBEaXNjb3JkVm9pY2VSZWdpb24sXG4gIERpc2NvcmRWb2ljZVN0YXRlLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIE1vZGlmeUd1aWxkVGVtcGxhdGUsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJztcbmltcG9ydCB7XG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICBzbm93Zmxha2VUb1RpbWVzdGFtcCxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJztcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMDtcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknO1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJztcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJztcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcic7XG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCc7XG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCc7XG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnO1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbik7XG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMO1xuICAvLyBEaXNjb3JkIGVycm9yIGNhbiBnZXQgbmVzdGVkIGEgbG90LCBzbyB3ZSB1c2UgYSBjdXN0b20gaW5zcGVjdCB0byBjaGFuZ2UgdGhlIGRlcHRoIHRvIEluZmluaXR5XG4gIGNvbnN0IGJhc2VFcnJvclByb3RvdHlwZSA9IHtcbiAgICBbaW5zcGVjdC5jdXN0b21dKF9kZXB0aDogbnVtYmVyLCBvcHRpb25zOiBJbnNwZWN0T3B0aW9ucywgX2luc3BlY3Q6IHR5cGVvZiBpbnNwZWN0KSB7XG4gICAgICByZXR1cm4gX2luc3BlY3QodGhpcywge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBkZXB0aDogSW5maW5pdHksXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbGwgaW5zcGVjdCBvbiBvdXJzZWxmLCB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIGNhbGxzIHRvIHRoZSBpbnNwZWN0LmN1c3RvbSBzeW1ib2wgb3IgZWxzZSBpdCB3aWxsIGNhdXNlIGFuIGluZmluaXRlIGxvb3AuXG4gICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb24sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlcjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbkhlYWRlciA/PyAnYXV0aG9yaXphdGlvbicsXG4gICAgYmFzZVVybCxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7IGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgfSksXG4gICAgaXNQcm94aWVkOiAhYmFzZVVybC5zdGFydHNXaXRoKERJU0NPUkRfQVBJX1VSTCksXG4gICAgdXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludDogb3B0aW9ucy5wcm94eT8udXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuICAgIGV2ZW50czoge1xuICAgICAgcmVxdWVzdDogKCkgPT4ge30sXG4gICAgICByZXNwb25zZTogKCkgPT4ge30sXG4gICAgICByZXF1ZXN0RXJyb3I6ICgpID0+IHt9LFxuICAgICAgLi4ub3B0aW9ucy5ldmVudHMsXG4gICAgfSxcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApO1xuXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKTtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3c7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3c7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gO1xuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWU7XG5cbiAgICAgICAgcmVzdC5xdWV1ZXMuZGVsZXRlKGtleSk7XG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyO1xuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YDtcbiAgICAgICAgY29uc3QgbmV3UXVldWUgPSByZXN0LnF1ZXVlcy5nZXQobmV3S2V5KTtcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKTtcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZyk7XG5cbiAgICAgICAgICBxdWV1ZS53YWl0aW5nID0gW107XG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdO1xuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QucXVldWVzLnNldChuZXdLZXksIHF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpO1xuXG4gICAgICAgIGlmIChyYXRlbGltaXRQYXRoLmJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC5idWNrZXRJZH1gLCByYXRlbGltaXRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpO1xuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gO1xuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnM/LnJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlYWRlcnNbQVVESVRfTE9HX1JFQVNPTl9IRUFERVJdID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnM/LnJlYXNvbik7XG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZDtcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlc1ske2l9XWAsIG9wdGlvbnMuZmlsZXNbaV0uYmxvYiwgb3B0aW9ucy5maWxlc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKTtcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICYmIG9wdGlvbnMuaGVhZGVycyAmJiBvcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAvLyBPQXV0aDIgYm9keSBoYW5kbGluZ1xuICAgICAgICBjb25zdCBmb3JtQm9keTogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBmb3JtQm9keS5qb2luKCcmJyk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5O1xuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSk7XG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBgYXBwbGljYXRpb24vanNvbmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWU7XG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSk7XG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlO1xuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIpO1xuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKTtcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDA7XG4gICAgICBjb25zdCBnbG9iYWwgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIpO1xuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUik7XG5cbiAgICAgIC8vIElmIHdlIGRpZG4ndCByZWNlaXZlZCB0aGUgaWRlbnRpZmllciwgZmFsbGJhY2sgdG8gdGhlIGJvdCB0b2tlblxuICAgICAgaWRlbnRpZmllciA/Pz0gYEJvdCAke3Jlc3QudG9rZW59YDtcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDA7XG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIHJldHJ5QWZ0ZXI7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWU7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSwgcmV0cnlBZnRlcik7XG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKTtcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9O1xuXG4gICAgICBpZiAocGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdO1xuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwgcGF5bG9hZCk7XG4gICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHksXG4gICAgICB9KTtcblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaCB0byAke3VybH0gZmFpbGVkLmAsIGVycm9yKTtcbiAgICAgICAgcmVzdC5ldmVudHMucmVxdWVzdEVycm9yKHJlcXVlc3QsIGVycm9yLCB7IGJvZHk6IG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zPy5ib2R5IH0pO1xuICAgICAgICAvLyBNYXJrIHJlcXVlc3QgYXMgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpO1xuICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogOTk5LFxuICAgICAgICAgIGVycm9yOiAnUG9zc2libGUgbmV0d29yayBvciByZXF1ZXN0IHNoYXBlIGlzc3VlIG9jY3VycmVkLiBJZiB0aGlzIGlzIHJhcmUsIGl0cyBhIG5ldHdvcmsgZ2xpdGNoLiBJZiBpdCBvY2N1cnMgYSBsb3Qgc29tZXRoaW5nIGlzIHdyb25nLicsXG4gICAgICAgICAgZXJyb3JPYmplY3Q6IGVycm9yLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiByZXNwb25zZSBpcyB1bmRlZmluZWQsIHRoZSBlcnJvciBoYXMgYmVlbiBoYW5kbGVkIGluIHRoZSBjYXRjaCBibG9jayBhYm92ZVxuICAgICAgaWYgKCFyZXNwb25zZSkgcmV0dXJuO1xuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcblxuICAgICAgLy8gU29tZXRpbWVzIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXJcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXNwb25zZS5qc29uKCkgOiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpO1xuXG4gICAgICByZXN0LmV2ZW50cy5yZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSwge1xuICAgICAgICByZXF1ZXN0Qm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHksXG4gICAgICAgIHJlc3BvbnNlQm9keTogYm9keSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYXMgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpO1xuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKTtcblxuICAgICAgaWYgKGJ1Y2tldElkKSBvcHRpb25zLmJ1Y2tldElkID0gYnVja2V0SWQ7XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCwgYm9keSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApO1xuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpO1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxO1xuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUik7XG4gICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKTtcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgYSByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnRcbiAgICAgIG9wdGlvbnMucmVzb2x2ZSh7IG9rOiB0cnVlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgYm9keTogcmVzcG9uc2Uuc3RhdHVzID09PSBIdHRwUmVzcG9uc2VDb2RlLk5vQ29udGVudCA/IHVuZGVmaW5lZCA6IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCByb3V0ZUluZm9ybWF0aW9uS2V5OiBzdHJpbmdbXSA9IFttZXRob2RdO1xuXG4gICAgICBjb25zdCBxdWVyeVBhcmFtSW5kZXggPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgY29uc3Qgcm91dGUgPSBxdWVyeVBhcmFtSW5kZXggIT09IC0xID8gdXJsLnNsaWNlKDAsIHF1ZXJ5UGFyYW1JbmRleCkgOiB1cmw7XG5cbiAgICAgIC8vIFNpbmNlIHRoZSB1cmxzIHN0YXJ0IHdpdGggLyB0aGUgZmlyc3QgcGFydCB3aWxsIGFsd2F5cyBiZSBlbXB0eVxuICAgICAgY29uc3Qgc3BsaXR0ZWRSb3V0ZSA9IHJvdXRlLnNwbGl0KCcvJyk7XG5cbiAgICAgIC8vIDEpIFN0cmlwIHRoZSBtaW5vciBwYXJhbXNcbiAgICAgIC8vICAgIFRoZSBvbmx5IG1ham9ycyBhcmUgY2hhbm5lbHMsIGd1aWxkcywgd2ViaG9va3MgYW5kIHdlYmhvb2tzIHdpdGggdGhlaXIgdG9rZW5cblxuICAgICAgY29uc3Qgc3RyaXBwZWRSb3V0ZSA9IHNwbGl0dGVkUm91dGVcbiAgICAgICAgLm1hcCgocGFydCwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgLy8gV2hpbGUgcGFyc2VJbnQgd2lsbCB0cnVuY2F0ZSB0aGUgc25vd2ZsYWtlIGlkLCBpdCB3aWxsIHN0aWxsIHRlbGwgdXMgaWYgaXQgaXMgYSBudW1iZXJcbiAgICAgICAgICBjb25zdCBpc051bWJlciA9IE51bWJlci5pc0Zpbml0ZShwYXJzZUludChwYXJ0LCAxMCkpO1xuXG4gICAgICAgICAgaWYgKCFpc051bWJlcikge1xuICAgICAgICAgICAgLy8gUmVhY3Rpb25zIGVtb2ppIG5lZWQgdG8gYmUgc3RyaXBwZWQgYXMgaXQgaXMgYSBtaW5vciBwYXJhbWV0ZXJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAxICYmIGFycmF5W2luZGV4IC0gMV0gPT09ICdyZWFjdGlvbnMnKSByZXR1cm4gJ3gnO1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgd2ViaG9vayBvciBpZiBpdCBpcyBwYXJ0IG9mIHRoZSByb3V0ZSwga2VlcCBpdCBhcyBpdCBpcyBhIG1ham9yIHBhcmFtZXRlclxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIG9uIGEgY2hhbm5lbCBpZCwgYSBndWlsZCBpZCBvciBhIHdlYmhvb2sgaWRcbiAgICAgICAgICBjb25zdCBpc01ham9yID0gaW5kZXggPj0gMSAmJiAoYXJyYXlbaW5kZXggLSAxXSA9PT0gJ2NoYW5uZWxzJyB8fCBhcnJheVtpbmRleCAtIDFdID09PSAnZ3VpbGRzJyB8fCBhcnJheVtpbmRleCAtIDFdID09PSAnd2ViaG9va3MnKTtcblxuICAgICAgICAgIGlmIChpc01ham9yKSByZXR1cm4gcGFydDtcblxuICAgICAgICAgIHJldHVybiAneCc7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcvJyk7XG5cbiAgICAgIHJvdXRlSW5mb3JtYXRpb25LZXkucHVzaChzdHJpcHBlZFJvdXRlKTtcblxuICAgICAgLy8gMikgQWNjb3VudCBmb3IgZXhjZXB0aW9uc1xuICAgICAgLy8gICAgLSBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZC9kaXNjb3JkLWFwaS1kb2NzL2lzc3Vlcy8xMDkyXG4gICAgICAvLyAgICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkL2Rpc2NvcmQtYXBpLWRvY3MvaXNzdWVzLzEyOTVcblxuICAgICAgLy8gVGhlIDIgZXhjZXB0aW9ucyBhcmUgZm9yIG1lc3NhZ2UgZGVsZXRlLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGFyZSBpbiB0aGF0IHJvdXRlXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzcGxpdHRlZFJvdXRlLmxlbmd0aCA9PT0gNSAmJiBzcGxpdHRlZFJvdXRlWzFdID09PSAnY2hhbm5lbHMnICYmIHN0cmlwcGVkUm91dGUuZW5kc1dpdGgoJy9tZXNzYWdlcy94JykpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZUlkID0gc3BsaXR0ZWRSb3V0ZVs0XTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gc25vd2ZsYWtlVG9UaW1lc3RhbXAobWVzc2FnZUlkKTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZC9kaXNjb3JkLWFwaS1kb2NzL2lzc3Vlcy8xMDkyXG4gICAgICAgIGlmIChub3cgLSB0aW1lc3RhbXAgPCAxMF8wMDApIHtcbiAgICAgICAgICByb3V0ZUluZm9ybWF0aW9uS2V5LnB1c2goJ21lc3NhZ2UtZGVsZXRlLTEwcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTI5NVxuICAgICAgICAvLyAyIHdlZWtzID0gMiAqIDcgKiAyNCAqIDYwICogNjAgKiAxMDAwID0gMTIwOTYwMDAwMFxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wID4gMTIwOTYwMDAwMCkge1xuICAgICAgICAgIHJvdXRlSW5mb3JtYXRpb25LZXkucHVzaCgnbWVzc2FnZS1kZWxldGUtMncnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm91dGVJbmZvcm1hdGlvbktleS5qb2luKCc6Jyk7XG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZCk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnJ1blRocm91Z2hRdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5zZW5kUmVxdWVzdChyZXF1ZXN0KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YDtcblxuICAgICAgY29uc3QgcXVldWUgPSByZXN0LnF1ZXVlcy5nZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWApO1xuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pO1xuXG4gICAgICAgIC8vIFNhdmUgcXVldWVcbiAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gLCBidWNrZXRRdWV1ZSk7XG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcblxuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fTtcbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9O1xuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKTtcbiAgICAgICAgcmVzdC5ldmVudHMucmVxdWVzdChyZXF1ZXN0LCB7XG4gICAgICAgICAgYm9keTogb3B0aW9ucz8uYm9keSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXN1bHQuanNvbigpIDogcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cbiAgICAgICAgcmVzdC5ldmVudHMucmVzcG9uc2UocmVxdWVzdCwgcmVzdWx0LCB7XG4gICAgICAgICAgcmVxdWVzdEJvZHk6IG9wdGlvbnM/LmJvZHksXG4gICAgICAgICAgcmVzcG9uc2VCb2R5OiBib2R5LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShib2R5KSA6IGJvZHkpIDogdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyAodHlwZW9mIGRhdGEuYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGRhdGEuYm9keSkgOiBkYXRhLmJvZHkpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yVGV4dDogc3RyaW5nO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHJlYXNvbi5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSA0MDA6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgb3B0aW9ucyB3YXMgaW1wcm9wZXJseSBmb3JtYXR0ZWQsIG9yIHRoZSBzZXJ2ZXIgY291bGRuJ3QgdW5kZXJzdGFuZCBpdC5cIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIGhlYWRlciB3YXMgbWlzc2luZyBvciBpbnZhbGlkLic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiB0b2tlbiB5b3UgcGFzc2VkIGRpZCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHRoZSByZXNvdXJjZS4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSByZXNvdXJjZSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3QuXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDA1OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgSFRUUCBtZXRob2QgdXNlZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJZb3UncmUgYmVpbmcgcmF0ZWxpbWl0ZWQuXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNTAyOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGVyZSB3YXMgbm90IGEgZ2F0ZXdheSBhdmFpbGFibGUgdG8gcHJvY2VzcyB5b3VyIG9wdGlvbnMuIFdhaXQgYSBiaXQgYW5kIHJldHJ5Lic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gcmVhc29uLnN0YXR1c1RleHQgPz8gJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFske3JlYXNvbi5zdGF0dXN9XSAke2Vycm9yVGV4dH1gO1xuXG4gICAgICAgICAgICAvLyBJZiBkaXNjb3JkIHNlbnQgdXMgSlNPTiwgaXQgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHdoaWNoIHdlIGNhbiBnZXQgYW5kIGFkZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhlIGZ1bGwgYm9keSB3aWxsIGJlIGluIHRoZSBlcnJvci5jYXVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVmZXJlbmNlI2Vycm9yLW1lc3NhZ2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlYXNvbi5ib2R5ID09PSAnb2JqZWN0JyAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ2NvZGUnKSAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ21lc3NhZ2UnKSkge1xuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGBcXG5EaXNjb3JkIGVycm9yOiBbJHtyZWFzb24uYm9keS5jb2RlfV0gJHtyZWFzb24uYm9keS5tZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHJlYXNvbik7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPjtcbiAgICB9LFxuXG4gICAgYXN5bmMgcG9zdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPjtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPjtcbiAgICB9LFxuXG4gICAgYXN5bmMgcHV0PFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPjtcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbik7XG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb25zLCBvcmRlcmVkID0gZmFsc2UpIHtcbiAgICAgIGlmICghb3JkZXJlZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICByZWFjdGlvbnMubWFwKGFzeW5jIChyZWFjdGlvbikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVhY3Rpb24gb2YgcmVhY3Rpb25zKSB7XG4gICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZERtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCksIHsgYm9keSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUVtb2ppKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH07XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlO1xuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9O1xuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZTtcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpO1xuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpO1xuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbik7XG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncyk7XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUm9sZU1lbWJlckNvdW50cyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlckNvdW50cyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXBwbGljYXRpb25FbW9qaShpZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZHMsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmJ1bGsoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VJZHMuc2xpY2UoMCwgMTAwKS5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pO1xuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbik7XG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5lbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKTtcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgcGVybWlzc2lvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCB9LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMO1xuICAgICAgY29uc3QgYmFubmVyID0gb3B0aW9ucz8uYm90QmFubmVyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QmFubmVyVVJMKSA6IG9wdGlvbnM/LmJvdEJhbm5lclVSTDtcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgYm9keS5pZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uRW1vamkoaWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSwgeyBib2R5IH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RUb1NwZWFrVGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tDaGFubmVsSWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge307XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlO1xuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9O1xuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZTtcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKTtcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApO1xuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50SWQ6IHVzZXJJZCB9LFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppKGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBlbW9qaUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkLCBvcHRpb25zPy53aXRoTG9jYWxpemF0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBvcHRpb25zPy53aXRoTG9jYWxpemF0aW9ucyksXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldChyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIHVzZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJDb25uZWN0aW9ucyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDb25uZWN0aW9uW10+KHJlc3Qucm91dGVzLm9hdXRoMi5jb25uZWN0aW9ucygpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Vm9pY2VSZWdpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJlZ2lvbnMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldFNldHRpbmdzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8dm9pZCB8IERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4sIHBhcmFtcyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZGF0YT8uZmlsZXMsXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWxsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHN5bmNHdWlsZFRlbXBsYXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RNZW1iZXIoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5ib3QoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50TWVtYmVyKGd1aWxkSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5jdXJyZW50TWVtYmVyKGd1aWxkSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkSW5jaWRlbnRzRGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmluY2lkZW50QWN0aW9ucyhndWlsZElkKSwgeyBib2R5OiBvcHRpb25zIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH07XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlO1xuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucyk7XG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH07XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlO1xuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5jb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbltdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbj4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFNvdW5kYm9hcmRTb3VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLnNlbmRTb3VuZChjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmRbXT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5saXN0RGVmYXVsdCgpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdIH0+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUxvYmJ5KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5jcmVhdGUoKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldExvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5TG9iYnkobG9iYnlJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUxvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZE1lbWJlclRvTG9iYnkobG9iYnlJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZExvYmJ5TWVtYmVyPihyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZU1lbWJlckZyb21Mb2JieShsb2JieUlkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sZWF2ZShsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBsaW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyB1bmxpbmtDaGFubmVsVG9Mb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5saW5rKGxvYmJ5SWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplO1xuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSk7XG4gICAgICB9O1xuXG4gICAgICByZXN0LmRlbGV0ZSA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpO1xuICAgICAgfTtcblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpO1xuICAgICAgfTtcblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcmVzdDtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiByZXN0O1xufVxuXG5lbnVtIEh0dHBSZXNwb25zZUNvZGUge1xuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb2RlciB0byBjb25zaWRlciB0aGF0IGl0IHdhcyBzdWNjZXNzZnVsLiAqL1xuICBTdWNjZXNzID0gMjAwLFxuICAvKiogUmVxdWVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBidXQgRGlzY29yZCByZXR1cm5lZCBhbiBlbXB0eSBib2R5LiAqL1xuICBOb0NvbnRlbnQgPSAyMDQsXG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvcmRlciB0byBjb25zaWRlciB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLiAqL1xuICBFcnJvciA9IDQwMCxcbiAgLyoqIFRoaXMgcmVxdWVzdCBnb3QgcmF0ZSBsaW1pdGVkLiAqL1xuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG59XG4iXSwibmFtZXMiOlsiQnVmZmVyIiwiaW5zcGVjdCIsImNhbWVsaXplIiwiY2FtZWxUb1NuYWtlQ2FzZSIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImRlbGF5IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJoYXNQcm9wZXJ0eSIsImxvZ2dlciIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsInNub3dmbGFrZVRvVGltZXN0YW1wIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUm91dGVzIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIkRJU0NPUkRfQVBJX1VSTCIsIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwiYmFzZUVycm9yUHJvdG90eXBlIiwiY3VzdG9tIiwiX2RlcHRoIiwiX2luc3BlY3QiLCJkZXB0aCIsIkluZmluaXR5IiwiY3VzdG9tSW5zcGVjdCIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJ1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50IiwibWF4UmV0cnlDb3VudCIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJldmVudHMiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJyZXF1ZXN0RXJyb3IiLCJyb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiUmVxdWVzdCIsImRlYnVnIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwiZXJyb3JPYmplY3QiLCJzdGF0dXNUZXh0IiwianNvbiIsInRleHQiLCJyZXF1ZXN0Qm9keSIsInJlc3BvbnNlQm9keSIsInNpbXBsaWZ5VXJsIiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJyZXRyeVJlcXVlc3QiLCJyZXNvbHZlIiwicm91dGVJbmZvcm1hdGlvbktleSIsInF1ZXJ5UGFyYW1JbmRleCIsImluZGV4T2YiLCJzbGljZSIsInNwbGl0dGVkUm91dGUiLCJzdHJpcHBlZFJvdXRlIiwicGFydCIsImluZGV4IiwiYXJyYXkiLCJpc051bWJlciIsImlzRmluaXRlIiwicGFyc2VJbnQiLCJpc01ham9yIiwiZW5kc1dpdGgiLCJtZXNzYWdlSWQiLCJ0aW1lc3RhbXAiLCJwcm9jZXNzUmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsInF1ZXVlSWRlbnRpZmllciIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJyZXN1bHQiLCJjYXVzZSIsImNyZWF0ZSIsInBhcnNlIiwiUHJvbWlzZSIsImRhdGEiLCJlcnJvclRleHQiLCJtZXNzYWdlIiwiY29kZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwicmVhY3Rpb24iLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJ0ZW1wbGF0ZXMiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImdldEd1aWxkUm9sZU1lbWJlckNvdW50cyIsIm1lbWJlckNvdW50cyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJndWlsZCIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEFwcGxpY2F0aW9uRW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rQ2hhbm5lbElkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImFjdGl2ZSIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJhY2Nlc3NUb2tlbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwib2F1dGgyIiwiYXBwbGljYXRpb24iLCJlZGl0QXBwbGljYXRpb25JbmZvIiwiZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiZXhjaGFuZ2VUb2tlbiIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiYmFzaWNDcmVkZW50aWFscyIsImZyb20iLCJncmFudFR5cGUiLCJzY29wZSIsInRva2VuRXhjaGFuZ2UiLCJyZXZva2VUb2tlbiIsInRva2VuUmV2b2tlIiwiZ2V0QXVkaXRMb2ciLCJhdWRpdGxvZ3MiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsInJlZ2lvbnMiLCJnZXRCYW4iLCJtZW1iZXJzIiwiYmFuIiwiZ2V0QmFucyIsImJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsImRtIiwicmVjaXBpZW50SWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEFwcGxpY2F0aW9uRW1vamkiLCJnZXRFbW9qaXMiLCJnZXRBcHBsaWNhdGlvbkVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsIndpdGhMb2NhbGl6YXRpb25zIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldENoYW5uZWxQaW5zIiwibWVzc2FnZVBpbnMiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFJvbGUiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRPd25Wb2ljZVN0YXRlIiwiZ2V0VXNlclZvaWNlU3RhdGUiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFVzZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImluc3RhbmNlSWQiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsIm1lc3NhZ2VQaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsIm1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zIiwiaW5jaWRlbnRBY3Rpb25zIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhIiwidXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJjcmVhdGVMb2JieSIsImxvYmJ5IiwiZ2V0TG9iYnkiLCJsb2JieUlkIiwibW9kaWZ5TG9iYnkiLCJkZWxldGVMb2JieSIsImFkZE1lbWJlclRvTG9iYnkiLCJyZW1vdmVNZW1iZXJGcm9tTG9iYnkiLCJsZWF2ZUxvYmJ5IiwibGlua0NoYW5uZWxUb0xvYmJ5IiwibGluayIsInVubGlua0NoYW5uZWxUb0xvYmJ5IiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUFNLFFBQVEsY0FBYztBQUNyQyxTQUE4QkMsT0FBTyxRQUFRLFlBQVk7QUEyRHpELFNBQ0VDLFFBQVEsRUFDUkMsZ0JBQWdCLEVBQ2hCQyxrQkFBa0IsRUFDbEJDLEtBQUssRUFDTEMsaUJBQWlCLEVBQ2pCQyxXQUFXLEVBQ1hDLE1BQU0sRUFDTkMscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLFdBQVcsUUFDTixvQkFBb0I7QUFDM0IsU0FBU0MsMEJBQTBCLFFBQVEscUJBQXFCO0FBQ2hFLFNBQVNDLEtBQUssUUFBUSxhQUFhO0FBQ25DLFNBQVNDLFlBQVksUUFBUSxjQUFjO0FBRzNDLE9BQU8sTUFBTUMsc0JBQXNCLEdBQUc7QUFDdEMsT0FBTyxNQUFNQyxrQkFBa0IsMEJBQTBCO0FBRXpELE9BQU8sTUFBTUMsMEJBQTBCLHFCQUFxQjtBQUM1RCxPQUFPLE1BQU1DLDhCQUE4Qix3QkFBd0I7QUFDbkUsT0FBTyxNQUFNQyxnQ0FBZ0MsMEJBQTBCO0FBQ3ZFLE9BQU8sTUFBTUMsMkJBQTJCLHFCQUFxQjtBQUM3RCxPQUFPLE1BQU1DLDJCQUEyQixxQkFBcUI7QUFDN0QsT0FBTyxNQUFNQywwQkFBMEIsb0JBQW9CO0FBQzNELE9BQU8sTUFBTUMsMEJBQTBCLG9CQUFvQjtBQUUzRCxPQUFPLFNBQVNDLGtCQUFrQkMsT0FBaUM7SUFDakUsTUFBTUMsZ0JBQWdCRCxR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
|