@discordeno/rest 21.0.0-next.c4f2fc2 → 21.0.0-next.c842a8a

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.
@@ -5,38 +5,38 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- AUDIT_LOG_REASON_HEADER: function() {
12
+ get AUDIT_LOG_REASON_HEADER () {
13
13
  return AUDIT_LOG_REASON_HEADER;
14
14
  },
15
- DISCORD_API_URL: function() {
15
+ get DISCORD_API_URL () {
16
16
  return DISCORD_API_URL;
17
17
  },
18
- DISCORD_API_VERSION: function() {
18
+ get DISCORD_API_VERSION () {
19
19
  return DISCORD_API_VERSION;
20
20
  },
21
- RATE_LIMIT_BUCKET_HEADER: function() {
21
+ get RATE_LIMIT_BUCKET_HEADER () {
22
22
  return RATE_LIMIT_BUCKET_HEADER;
23
23
  },
24
- RATE_LIMIT_GLOBAL_HEADER: function() {
24
+ get RATE_LIMIT_GLOBAL_HEADER () {
25
25
  return RATE_LIMIT_GLOBAL_HEADER;
26
26
  },
27
- RATE_LIMIT_LIMIT_HEADER: function() {
27
+ get RATE_LIMIT_LIMIT_HEADER () {
28
28
  return RATE_LIMIT_LIMIT_HEADER;
29
29
  },
30
- RATE_LIMIT_REMAINING_HEADER: function() {
30
+ get RATE_LIMIT_REMAINING_HEADER () {
31
31
  return RATE_LIMIT_REMAINING_HEADER;
32
32
  },
33
- RATE_LIMIT_RESET_AFTER_HEADER: function() {
33
+ get RATE_LIMIT_RESET_AFTER_HEADER () {
34
34
  return RATE_LIMIT_RESET_AFTER_HEADER;
35
35
  },
36
- RATE_LIMIT_SCOPE_HEADER: function() {
36
+ get RATE_LIMIT_SCOPE_HEADER () {
37
37
  return RATE_LIMIT_SCOPE_HEADER;
38
38
  },
39
- createRestManager: function() {
39
+ get createRestManager () {
40
40
  return createRestManager;
41
41
  }
42
42
  });
@@ -1624,4 +1624,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1624
1624
  return HttpResponseCode;
1625
1625
  }(HttpResponseCode || {});
1626
1626
 
1627
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHR5cGUge1xuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEsXG4gIERpc2NvcmRBdWRpdExvZyxcbiAgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgRGlzY29yZEJhbixcbiAgRGlzY29yZEJ1bGtCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkQ29ubmVjdGlvbixcbiAgRGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbCxcbiAgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICBEaXNjb3JkSW52aXRlLFxuICBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRMb2JieSxcbiAgRGlzY29yZExvYmJ5TWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIERpc2NvcmRNZXNzYWdlLFxuICBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIERpc2NvcmRSb2xlLFxuICBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIERpc2NvcmRTa3UsXG4gIERpc2NvcmRTb3VuZGJvYXJkU291bmQsXG4gIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICBEaXNjb3JkU3RpY2tlcixcbiAgRGlzY29yZFN0aWNrZXJQYWNrLFxuICBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICBEaXNjb3JkVGVtcGxhdGUsXG4gIERpc2NvcmRUaHJlYWRNZW1iZXIsXG4gIERpc2NvcmRVc2VyLFxuICBEaXNjb3JkVmFuaXR5VXJsLFxuICBEaXNjb3JkVm9pY2VSZWdpb24sXG4gIERpc2NvcmRWb2ljZVN0YXRlLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIE1mYUxldmVscyxcbiAgTW9kaWZ5R3VpbGRUZW1wbGF0ZSxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQge1xuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsVG9TbmFrZUNhc2UsXG4gIGNhbWVsaXplLFxuICBkZWxheSxcbiAgZ2V0Qm90SWRGcm9tVG9rZW4sXG4gIGhhc1Byb3BlcnR5LFxuICBsb2dnZXIsXG4gIHByb2Nlc3NSZWFjdGlvblN0cmluZyxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9WRVJTSU9OID0gMTBcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknXG5cbmV4cG9ydCBjb25zdCBBVURJVF9MT0dfUkVBU09OX0hFQURFUiA9ICd4LWF1ZGl0LWxvZy1yZWFzb24nXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZydcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIgPSAneC1yYXRlbGltaXQtZ2xvYmFsJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1idWNrZXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9TQ09QRV9IRUFERVIgPSAneC1yYXRlbGltaXQtc2NvcGUnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBvcHRpb25zLmFwcGxpY2F0aW9uSWQgPyBCaWdJbnQob3B0aW9ucy5hcHBsaWNhdGlvbklkKSA6IGdldEJvdElkRnJvbVRva2VuKG9wdGlvbnMudG9rZW4pXG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMXG5cbiAgY29uc3QgcmVzdDogUmVzdE1hbmFnZXIgPSB7XG4gICAgYXBwbGljYXRpb25JZCxcbiAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uLFxuICAgIGF1dGhvcml6YXRpb25IZWFkZXI6IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb25IZWFkZXIgPz8gJ2F1dGhvcml6YXRpb24nLFxuICAgIGJhc2VVcmwsXG4gICAgZGVsZXRlUXVldWVEZWxheTogNjAwMDAsXG4gICAgZ2xvYmFsbHlSYXRlTGltaXRlZDogZmFsc2UsXG4gICAgaW52YWxpZEJ1Y2tldDogY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQoeyBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyIH0pLFxuICAgIGlzUHJveGllZDogIWJhc2VVcmwuc3RhcnRzV2l0aChESVNDT1JEX0FQSV9VUkwpLFxuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ6IG9wdGlvbnMucHJveHk/LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQsXG4gICAgbWF4UmV0cnlDb3VudDogSW5maW5pdHksXG4gICAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGZhbHNlLFxuICAgIHF1ZXVlczogbmV3IE1hcCgpLFxuICAgIHJhdGVMaW1pdGVkUGF0aHM6IG5ldyBNYXAoKSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gRElTQ09SRF9BUElfVkVSU0lPTixcbiAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlcixcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZXNbJHtpfV1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gKChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIG9iamVjdCkgOiBhd2FpdCByZXNwb25zZS50ZXh0KClcblxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCwgYm9keSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uc3VtZSB0aGUgcmVzcG9uc2UgYm9keSB0byBhdm9pZCBsZWFraW5nIG1lbW9yeVxuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgdGhlIHJlcXVlc3QgaGFzIGEgdG9rZW4sIHVzZSBpdFxuICAgICAgLy8gRWxzZSBmYWxsYmFjayB0byBwcmVmaXggd2l0aCB0aGUgYm90IHRva2VuXG4gICAgICBjb25zdCBxdWV1ZUlkZW50aWZpZXIgPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5LCBpZGVudGlmaWVyOiBxdWV1ZUlkZW50aWZpZXIgfSlcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YCwgYnVja2V0UXVldWUpXG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCByb3V0ZSwgb3B0aW9ucykge1xuICAgICAgLy8gVGhpcyBlcnJvciBuZWVkcyB0byBiZSBjcmVhdGVkIGhlcmUgYmVjYXVzZSBvZiBob3cgc3RhY2sgdHJhY2VzIGdldCBjYWxjdWxhdGVkXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpXG5cbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpID09PSAnYXBwbGljYXRpb24vanNvbicgPyByZXN1bHQuanNvbigpIDogcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgICAgIGVycm9yLmNhdXNlID0ge1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/IGF3YWl0IHJlc3VsdC5qc29uKCkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yVGV4dDogc3RyaW5nXG5cbiAgICAgICAgICAgIHN3aXRjaCAocmVhc29uLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIDQwMDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSBvcHRpb25zIHdhcyBpbXByb3Blcmx5IGZvcm1hdHRlZCwgb3IgdGhlIHNlcnZlciBjb3VsZG4ndCB1bmRlcnN0YW5kIGl0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIGhlYWRlciB3YXMgbWlzc2luZyBvciBpbnZhbGlkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gdG9rZW4geW91IHBhc3NlZCBkaWQgbm90IGhhdmUgcGVybWlzc2lvbiB0byB0aGUgcmVzb3VyY2UuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIHJlc291cmNlIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgZG9lc24ndCBleGlzdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA1OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgSFRUUCBtZXRob2QgdXNlZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDI5OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiWW91J3JlIGJlaW5nIHJhdGVsaW1pdGVkLlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA1MDI6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZXJlIHdhcyBub3QgYSBnYXRld2F5IGF2YWlsYWJsZSB0byBwcm9jZXNzIHlvdXIgb3B0aW9ucy4gV2FpdCBhIGJpdCBhbmQgcmV0cnkuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gcmVhc29uLnN0YXR1c1RleHQgPz8gJ1Vua25vd24gZXJyb3InXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgWyR7cmVhc29uLnN0YXR1c31dICR7ZXJyb3JUZXh0fWBcblxuICAgICAgICAgICAgLy8gSWYgZGlzY29yZCBzZW50IHVzIEpTT04sIGl0IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSB3aGljaCB3ZSBjYW4gZ2V0IGFuZCBhZGQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIHRoZSBmdWxsIGJvZHkgd2lsbCBiZSBpbiB0aGUgZXJyb3IuY2F1c2VcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3JlZmVyZW5jZSNlcnJvci1tZXNzYWdlc1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWFzb24uYm9keSA9PT0gJ29iamVjdCcgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdjb2RlJykgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdtZXNzYWdlJykpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgXFxuRGlzY29yZCBlcnJvcjogWyR7cmVhc29uLmJvZHkuY29kZX1dICR7cmVhc29uLmJvZHkubWVzc2FnZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RUb1NwZWFrVGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tDaGFubmVsSWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudElkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaShlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamlzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRFbW9qaVtdIH0+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkSW5jaWRlbnRzRGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmluY2lkZW50QWN0aW9ucyhndWlsZElkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbltdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRTb3VuZGJvYXJkU291bmQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuc291bmRib2FyZC5zZW5kU291bmQoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmRbXT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5saXN0RGVmYXVsdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkU291bmRib2FyZFNvdW5kW10gfT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVMb2JieShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkuY3JlYXRlKCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldExvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlMb2JieShsb2JieUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZE1lbWJlclRvTG9iYnkobG9iYnlJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZExvYmJ5TWVtYmVyPihyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5KGxvYmJ5SWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUxvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubGVhdmUobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVubGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIkRJU0NPUkRfQVBJX1VSTCIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwibG9nZ2VyIiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwicm91dGVzIiwiY3JlYXRlUm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImNhbGN1bGF0ZUJpdHMiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJjYW1lbFRvU25ha2VDYXNlIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiZm9ybUJvZHkiLCJkaXNjb3JkQm9keSIsInByb3AiLCJwdXNoIiwiam9pbiIsImFzc2lnbiIsInByb2Nlc3NSYXRlTGltaXRlZFBhdGhzIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJhdGVMaW1pdGVkIiwicmVtYWluaW5nIiwicmV0cnlBZnRlciIsInJlc2V0IiwiTnVtYmVyIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwic3BsaXQiLCJkZWJ1ZyIsInJlc3BvbnNlIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwianNvbiIsInRleHQiLCJhcnJheUJ1ZmZlciIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwiZGVsYXkiLCJyZXRyeVJlcXVlc3QiLCJyZXNvbHZlIiwicGFydHMiLCJzZWNvbmRMYXN0UGFydCIsInNwbGljZSIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsInF1ZXVlSWRlbnRpZmllciIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJRdWV1ZSIsInJlc3VsdCIsImNhdXNlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImVycm9yVGV4dCIsIm1lc3NhZ2UiLCJoYXNQcm9wZXJ0eSIsImNvZGUiLCJjYW1lbGl6ZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwibWVzc2FnZUlkIiwicmVhY3Rpb24iLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZCIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJpY29uIiwidXJsVG9CYXNlNjQiLCJ0ZW1wbGF0ZXMiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VXNlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyIsImluY2lkZW50QWN0aW9ucyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSIsInVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiY3JlYXRlTG9iYnkiLCJsb2JieSIsImNyZWF0ZSIsImdldExvYmJ5IiwibG9iYnlJZCIsIm1vZGlmeUxvYmJ5IiwiZGVsZXRlTG9iYnkiLCJhZGRNZW1iZXJUb0xvYmJ5IiwicmVtb3ZlTWVtYmVyRnJvbUxvYmJ5IiwibGVhdmVMb2JieSIsImxpbmtDaGFubmVsVG9Mb2JieSIsImxpbmsiLCJ1bmxpbmtDaGFubmVsVG9Mb2JieSIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFnRmFBLHVCQUF1QjtlQUF2QkE7O0lBRkFDLGVBQWU7ZUFBZkE7O0lBREFDLG1CQUFtQjtlQUFuQkE7O0lBT0FDLHdCQUF3QjtlQUF4QkE7O0lBREFDLHdCQUF3QjtlQUF4QkE7O0lBRUFDLHVCQUF1QjtlQUF2QkE7O0lBSkFDLDJCQUEyQjtlQUEzQkE7O0lBQ0FDLDZCQUE2QjtlQUE3QkE7O0lBSUFDLHVCQUF1QjtlQUF2QkE7O0lBRUdDLGlCQUFpQjtlQUFqQkE7Ozs0QkF4Rk87dUJBdUVoQjsrQkFDb0M7dUJBQ3JCO3dCQUNPO0FBR3RCLE1BQU1QLHNCQUFzQjtBQUM1QixNQUFNRCxrQkFBa0I7QUFFeEIsTUFBTUQsMEJBQTBCO0FBQ2hDLE1BQU1NLDhCQUE4QjtBQUNwQyxNQUFNQyxnQ0FBZ0M7QUFDdEMsTUFBTUgsMkJBQTJCO0FBQ2pDLE1BQU1ELDJCQUEyQjtBQUNqQyxNQUFNRSwwQkFBMEI7QUFDaEMsTUFBTUcsMEJBQTBCO0FBRWhDLFNBQVNDLGtCQUFrQkMsT0FBaUM7SUFDakUsTUFBTUMsZ0JBQWdC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
1627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHR5cGUge1xuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEsXG4gIERpc2NvcmRBdWRpdExvZyxcbiAgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgRGlzY29yZEJhbixcbiAgRGlzY29yZEJ1bGtCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkQ29ubmVjdGlvbixcbiAgRGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbCxcbiAgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICBEaXNjb3JkSW52aXRlLFxuICBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRMb2JieSxcbiAgRGlzY29yZExvYmJ5TWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIERpc2NvcmRNZXNzYWdlLFxuICBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIERpc2NvcmRSb2xlLFxuICBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIERpc2NvcmRTa3UsXG4gIERpc2NvcmRTb3VuZGJvYXJkU291bmQsXG4gIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICBEaXNjb3JkU3RpY2tlcixcbiAgRGlzY29yZFN0aWNrZXJQYWNrLFxuICBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICBEaXNjb3JkVGVtcGxhdGUsXG4gIERpc2NvcmRUaHJlYWRNZW1iZXIsXG4gIERpc2NvcmRVc2VyLFxuICBEaXNjb3JkVmFuaXR5VXJsLFxuICBEaXNjb3JkVm9pY2VSZWdpb24sXG4gIERpc2NvcmRWb2ljZVN0YXRlLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIE1mYUxldmVscyxcbiAgTW9kaWZ5R3VpbGRUZW1wbGF0ZSxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQge1xuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsVG9TbmFrZUNhc2UsXG4gIGNhbWVsaXplLFxuICBkZWxheSxcbiAgZ2V0Qm90SWRGcm9tVG9rZW4sXG4gIGhhc1Byb3BlcnR5LFxuICBsb2dnZXIsXG4gIHByb2Nlc3NSZWFjdGlvblN0cmluZyxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9WRVJTSU9OID0gMTBcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknXG5cbmV4cG9ydCBjb25zdCBBVURJVF9MT0dfUkVBU09OX0hFQURFUiA9ICd4LWF1ZGl0LWxvZy1yZWFzb24nXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZydcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIgPSAneC1yYXRlbGltaXQtZ2xvYmFsJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1idWNrZXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9TQ09QRV9IRUFERVIgPSAneC1yYXRlbGltaXQtc2NvcGUnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBvcHRpb25zLmFwcGxpY2F0aW9uSWQgPyBCaWdJbnQob3B0aW9ucy5hcHBsaWNhdGlvbklkKSA6IGdldEJvdElkRnJvbVRva2VuKG9wdGlvbnMudG9rZW4pXG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMXG5cbiAgY29uc3QgcmVzdDogUmVzdE1hbmFnZXIgPSB7XG4gICAgYXBwbGljYXRpb25JZCxcbiAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uLFxuICAgIGF1dGhvcml6YXRpb25IZWFkZXI6IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb25IZWFkZXIgPz8gJ2F1dGhvcml6YXRpb24nLFxuICAgIGJhc2VVcmwsXG4gICAgZGVsZXRlUXVldWVEZWxheTogNjAwMDAsXG4gICAgZ2xvYmFsbHlSYXRlTGltaXRlZDogZmFsc2UsXG4gICAgaW52YWxpZEJ1Y2tldDogY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQoeyBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyIH0pLFxuICAgIGlzUHJveGllZDogIWJhc2VVcmwuc3RhcnRzV2l0aChESVNDT1JEX0FQSV9VUkwpLFxuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ6IG9wdGlvbnMucHJveHk/LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQsXG4gICAgbWF4UmV0cnlDb3VudDogSW5maW5pdHksXG4gICAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGZhbHNlLFxuICAgIHF1ZXVlczogbmV3IE1hcCgpLFxuICAgIHJhdGVMaW1pdGVkUGF0aHM6IG5ldyBNYXAoKSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gRElTQ09SRF9BUElfVkVSU0lPTixcbiAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlcixcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZXNbJHtpfV1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gKChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIG9iamVjdCkgOiBhd2FpdCByZXNwb25zZS50ZXh0KClcblxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCwgYm9keSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uc3VtZSB0aGUgcmVzcG9uc2UgYm9keSB0byBhdm9pZCBsZWFraW5nIG1lbW9yeVxuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgdGhlIHJlcXVlc3QgaGFzIGEgdG9rZW4sIHVzZSBpdFxuICAgICAgLy8gRWxzZSBmYWxsYmFjayB0byBwcmVmaXggd2l0aCB0aGUgYm90IHRva2VuXG4gICAgICBjb25zdCBxdWV1ZUlkZW50aWZpZXIgPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5LCBpZGVudGlmaWVyOiBxdWV1ZUlkZW50aWZpZXIgfSlcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YCwgYnVja2V0UXVldWUpXG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCByb3V0ZSwgb3B0aW9ucykge1xuICAgICAgLy8gVGhpcyBlcnJvciBuZWVkcyB0byBiZSBjcmVhdGVkIGhlcmUgYmVjYXVzZSBvZiBob3cgc3RhY2sgdHJhY2VzIGdldCBjYWxjdWxhdGVkXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpXG5cbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpID09PSAnYXBwbGljYXRpb24vanNvbicgPyByZXN1bHQuanNvbigpIDogcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgICAgIGVycm9yLmNhdXNlID0ge1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/IGF3YWl0IHJlc3VsdC5qc29uKCkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yVGV4dDogc3RyaW5nXG5cbiAgICAgICAgICAgIHN3aXRjaCAocmVhc29uLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIDQwMDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSBvcHRpb25zIHdhcyBpbXByb3Blcmx5IGZvcm1hdHRlZCwgb3IgdGhlIHNlcnZlciBjb3VsZG4ndCB1bmRlcnN0YW5kIGl0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIGhlYWRlciB3YXMgbWlzc2luZyBvciBpbnZhbGlkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gdG9rZW4geW91IHBhc3NlZCBkaWQgbm90IGhhdmUgcGVybWlzc2lvbiB0byB0aGUgcmVzb3VyY2UuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIHJlc291cmNlIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgZG9lc24ndCBleGlzdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA1OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgSFRUUCBtZXRob2QgdXNlZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDI5OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiWW91J3JlIGJlaW5nIHJhdGVsaW1pdGVkLlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA1MDI6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZXJlIHdhcyBub3QgYSBnYXRld2F5IGF2YWlsYWJsZSB0byBwcm9jZXNzIHlvdXIgb3B0aW9ucy4gV2FpdCBhIGJpdCBhbmQgcmV0cnkuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gcmVhc29uLnN0YXR1c1RleHQgPz8gJ1Vua25vd24gZXJyb3InXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgWyR7cmVhc29uLnN0YXR1c31dICR7ZXJyb3JUZXh0fWBcblxuICAgICAgICAgICAgLy8gSWYgZGlzY29yZCBzZW50IHVzIEpTT04sIGl0IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSB3aGljaCB3ZSBjYW4gZ2V0IGFuZCBhZGQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIHRoZSBmdWxsIGJvZHkgd2lsbCBiZSBpbiB0aGUgZXJyb3IuY2F1c2VcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3JlZmVyZW5jZSNlcnJvci1tZXNzYWdlc1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWFzb24uYm9keSA9PT0gJ29iamVjdCcgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdjb2RlJykgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdtZXNzYWdlJykpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgXFxuRGlzY29yZCBlcnJvcjogWyR7cmVhc29uLmJvZHkuY29kZX1dICR7cmVhc29uLmJvZHkubWVzc2FnZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RUb1NwZWFrVGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tDaGFubmVsSWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudElkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaShlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamlzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRFbW9qaVtdIH0+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkSW5jaWRlbnRzRGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmluY2lkZW50QWN0aW9ucyhndWlsZElkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbltdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRTb3VuZGJvYXJkU291bmQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuc291bmRib2FyZC5zZW5kU291bmQoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmRbXT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5saXN0RGVmYXVsdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkU291bmRib2FyZFNvdW5kW10gfT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVMb2JieShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkuY3JlYXRlKCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldExvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlMb2JieShsb2JieUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZE1lbWJlclRvTG9iYnkobG9iYnlJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZExvYmJ5TWVtYmVyPihyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5KGxvYmJ5SWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUxvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubGVhdmUobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVubGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIkRJU0NPUkRfQVBJX1VSTCIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwibG9nZ2VyIiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwicm91dGVzIiwiY3JlYXRlUm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImNhbGN1bGF0ZUJpdHMiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJjYW1lbFRvU25ha2VDYXNlIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiZm9ybUJvZHkiLCJkaXNjb3JkQm9keSIsInByb3AiLCJwdXNoIiwiam9pbiIsImFzc2lnbiIsInByb2Nlc3NSYXRlTGltaXRlZFBhdGhzIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJhdGVMaW1pdGVkIiwicmVtYWluaW5nIiwicmV0cnlBZnRlciIsInJlc2V0IiwiTnVtYmVyIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwic3BsaXQiLCJkZWJ1ZyIsInJlc3BvbnNlIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwianNvbiIsInRleHQiLCJhcnJheUJ1ZmZlciIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwiZGVsYXkiLCJyZXRyeVJlcXVlc3QiLCJyZXNvbHZlIiwicGFydHMiLCJzZWNvbmRMYXN0UGFydCIsInNwbGljZSIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsInF1ZXVlSWRlbnRpZmllciIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJRdWV1ZSIsInJlc3VsdCIsImNhdXNlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImVycm9yVGV4dCIsIm1lc3NhZ2UiLCJoYXNQcm9wZXJ0eSIsImNvZGUiLCJjYW1lbGl6ZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwibWVzc2FnZUlkIiwicmVhY3Rpb24iLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZCIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJpY29uIiwidXJsVG9CYXNlNjQiLCJ0ZW1wbGF0ZXMiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VXNlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyIsImluY2lkZW50QWN0aW9ucyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSIsInVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiY3JlYXRlTG9iYnkiLCJsb2JieSIsImNyZWF0ZSIsImdldExvYmJ5IiwibG9iYnlJZCIsIm1vZGlmeUxvYmJ5IiwiZGVsZXRlTG9iYnkiLCJhZGRNZW1iZXJUb0xvYmJ5IiwicmVtb3ZlTWVtYmVyRnJvbUxvYmJ5IiwibGVhdmVMb2JieSIsImxpbmtDaGFubmVsVG9Mb2JieSIsImxpbmsiLCJ1bmxpbmtDaGFubmVsVG9Mb2JieSIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFnRmFBO2VBQUFBOztRQUZBQztlQUFBQTs7UUFEQUM7ZUFBQUE7O1FBT0FDO2VBQUFBOztRQURBQztlQUFBQTs7UUFFQUM7ZUFBQUE7O1FBSkFDO2VBQUFBOztRQUNBQztlQUFBQTs7UUFJQUM7ZUFBQUE7O1FBRUdDO2VBQUFBOzs7NEJBeEZPO3VCQXVFaEI7K0JBQ29DO3VCQUNyQjt3QkFDTztBQUd0QixNQUFNUCxzQkFBc0I7QUFDNUIsTUFBTUQsa0JBQWtCO0FBRXhCLE1BQU1ELDBCQUEwQjtBQUNoQyxNQUFNTSw4QkFBOEI7QUFDcEMsTUFBTUMsZ0NBQWdDO0FBQ3RDLE1BQU1ILDJCQUEyQjtBQUNqQyxNQUFNRCwyQkFBMkI7QUFDakMsTUFBTUUsMEJBQTBCO0FBQ2hDLE1BQU1HLDBCQUEwQjtBQUVoQyxTQUFTQyxrQkFBa0JDLE9BQWlDO0lBQ2pFLE1BQU1DLGdCQUFnQkQsUUFBUUMsYUFBYSxHQUFHQyxPQUFPRixRQUFRQyxhQUFhLElBQUlFLElBQUFBLHdCQUFpQixFQUFDSCxRQUFRSSxLQUFLO0lBRTdHLE1BQU1DLFVBQVVMLFFBQVFNLEtBQUssRUFBRUQsV0FBV2Q7SUFFMUMsTUFBTWdCLE9BQW9CO1FBQ3hCTjtRQUNBTyxlQUFlUixRQUFRTSxLQUFLLEVBQUVFO1FBQzlCQyxxQkFBcUJULFFBQVFNLEtBQUssRUFBRUcsdUJBQXVCO1FBQzNESjtRQUNBSyxrQkFBa0I7UUFDbEJDLHFCQUFxQjtRQUNyQkMsZUFBZUMsSUFBQUEseUNBQTBCLEVBQUM7WUFBRUMsUUFBUWQsUUFBUWMsTUFBTTtRQUFDO1FBQ25FQyxXQUFXLENBQUNWLFFBQVFXLFVBQVUsQ0FBQ3pCO1FBQy9CMEIsMkJBQTJCakIsUUFBUU0sS0FBSyxFQUFFVztRQUMxQ0MsZUFBZUM7UUFDZkMsNEJBQTRCO1FBQzVCQyxRQUFRLElBQUlDO1FBQ1pDLGtCQUFrQixJQUFJRDtRQUN0QmxCLE9BQU9KLFFBQVFJLEtBQUs7UUFDcEJvQixTQUFTeEIsUUFBUXdCLE9BQU8sSUFBSWhDO1FBQzVCc0IsUUFBUWQsUUFBUWMsTUFBTSxJQUFJQSxhQUFNO1FBRWhDVyxRQUFRQyxJQUFBQSxvQkFBWTtRQUVwQkM7WUFDRSxPQUFPO2dCQUNMLGNBQWMsQ0FBQyx1REFBdUQsRUFBRUMseUJBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQy9GO1FBQ0Y7UUFFQUMsaUJBQWdCQyxHQUFHLEVBQUVDLFVBQVU7WUFDN0IsTUFBTUMsY0FBY3pCLEtBQUtnQixnQkFBZ0IsQ0FBQ1UsR0FBRyxDQUFDLEdBQUdGLGFBQWFELEtBQUs7WUFFbkUsTUFBTUksU0FBUzNCLEtBQUtnQixnQkFBZ0IsQ0FBQ1UsR0FBRyxDQUFDO1lBQ3pDLE1BQU1FLE1BQU1DLEtBQUtELEdBQUc7WUFFcEIsSUFBSUgsZUFBZUcsTUFBTUgsWUFBWUssY0FBYyxFQUFFO2dCQUNuRCxPQUFPTCxZQUFZSyxjQUFjLEdBQUdGO1lBQ3RDO1lBRUEsSUFBSUQsVUFBVUMsTUFBTUQsT0FBT0csY0FBYyxFQUFFO2dCQUN6QyxPQUFPSCxPQUFPRyxjQUFjLEdBQUdGO1lBQ2pDO1lBRUEsT0FBTztRQUNUO1FBRUEsTUFBTUcsbUJBQWtCQyxRQUFRLEVBQUVDLFFBQVE7WUFDeEMsSUFBSWpDLEtBQUtRLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDUixLQUFLVSx5QkFBeUIsRUFBRTtvQkFDbkMsTUFBTSxJQUFJd0IsTUFDUjtnQkFFSjtnQkFFQSxNQUFNQyxVQUFVO29CQUNkLGdCQUFnQjtnQkFDbEI7Z0JBRUEsSUFBSW5DLEtBQUtDLGFBQWEsS0FBS21DLFdBQVc7b0JBQ3BDRCxPQUFPLENBQUNuQyxLQUFLRSxtQkFBbUIsQ0FBQyxHQUFHRixLQUFLQyxhQUFhO2dCQUN4RDtnQkFFQSxNQUFNb0MsTUFBTSxHQUFHckMsS0FBS0YsT0FBTyxDQUFDLENBQUMsRUFBRUUsS0FBS1UseUJBQXlCLEVBQUUsRUFBRTtvQkFDL0Q0QixRQUFRO29CQUNSQyxNQUFNQyxLQUFLQyxTQUFTLENBQUM7d0JBQ25CVDt3QkFDQUM7b0JBQ0Y7b0JBQ0FFO2dCQUNGO2dCQUVBO1lBQ0Y7WUFFQSxNQUFNTyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVULFVBQVU7WUFFMUMsd0JBQXdCO1lBQ3hCLEtBQUssTUFBTSxDQUFDVSxLQUFLQyxNQUFNLElBQUk1QyxLQUFLYyxNQUFNLENBQUMrQixPQUFPLEdBQUk7Z0JBQ2hELElBQUksQ0FBQ0YsSUFBSWxDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRXVCLFVBQVUsR0FBRztnQkFFM0NoQyxLQUFLYyxNQUFNLENBQUNnQyxNQUFNLENBQUNIO2dCQUNuQkMsTUFBTXBCLFVBQVUsR0FBR2tCO2dCQUVuQixNQUFNSyxTQUFTLEdBQUdMLGdCQUFnQkUsTUFBTXJCLEdBQUcsRUFBRTtnQkFDN0MsTUFBTXlCLFdBQVdoRCxLQUFLYyxNQUFNLENBQUNZLEdBQUcsQ0FBQ3FCO2dCQUVqQyxtQkFBbUI7Z0JBQ25CLElBQUlDLFVBQVU7b0JBQ1pBLFNBQVNDLE9BQU8sQ0FBQ0MsT0FBTyxJQUFJTixNQUFNSyxPQUFPO29CQUN6Q0QsU0FBU0csT0FBTyxDQUFDRCxPQUFPLElBQUlOLE1BQU1PLE9BQU87b0JBRXpDUCxNQUFNSyxPQUFPLEdBQUcsRUFBRTtvQkFDbEJMLE1BQU1PLE9BQU8sR0FBRyxFQUFFO29CQUVsQlAsTUFBTVEsT0FBTztnQkFDZixPQUFPO29CQUNMcEQsS0FBS2MsTUFBTSxDQUFDdUMsR0FBRyxDQUFDTixRQUFRSDtnQkFDMUI7WUFDRjtZQUVBLEtBQUssTUFBTSxDQUFDRCxLQUFLVyxjQUFjLElBQUl0RCxLQUFLZ0IsZ0JBQWdCLENBQUM2QixPQUFPLEdBQUk7Z0JBQ2xFLElBQUksQ0FBQ0YsSUFBSWxDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRXVCLFVBQVUsR0FBRztnQkFFM0NoQyxLQUFLZ0IsZ0JBQWdCLENBQUNxQyxHQUFHLENBQUMsR0FBR1gsZ0JBQWdCWSxjQUFjL0IsR0FBRyxFQUFFLEVBQUUrQjtnQkFFbEUsSUFBSUEsY0FBY0MsUUFBUSxFQUFFO29CQUMxQnZELEtBQUtnQixnQkFBZ0IsQ0FBQ3FDLEdBQUcsQ0FBQyxHQUFHWCxnQkFBZ0JZLGNBQWNDLFFBQVEsRUFBRSxFQUFFRDtnQkFDekU7WUFDRjtRQUNGO1FBRUFFLHVCQUFzQkMsR0FBUTtZQUM1QixJQUFJQSxRQUFRLE1BQU0sT0FBTztZQUV6QixJQUFJLE9BQU9BLFFBQVEsVUFBVTtnQkFDM0IsSUFBSUMsTUFBTUMsT0FBTyxDQUFDRixNQUFNO29CQUN0QixPQUFPQSxJQUFJRyxHQUFHLENBQUMsQ0FBQ0MsT0FBUzdELEtBQUt3RCxxQkFBcUIsQ0FBQ0s7Z0JBQ3REO2dCQUVBLE1BQU1DLFNBQWMsQ0FBQztnQkFFckIsS0FBSyxNQUFNbkIsT0FBT29CLE9BQU9DLElBQUksQ0FBQ1AsS0FBTTtvQkFDbEMsTUFBTVEsUUFBUVIsR0FBRyxDQUFDZCxJQUFJO29CQUV0Qix5RkFBeUY7b0JBQ3pGLElBQUlBLElBQUl1QixRQUFRLENBQUMsTUFBTTt3QkFDckJKLE1BQU0sQ0FBQ25CLElBQUksR0FBR3NCO3dCQUNkO29CQUNGO29CQUVBLHFEQUFxRDtvQkFDckQsSUFBSUEsVUFBVTdCLFdBQVc7d0JBQ3ZCLE9BQVFPOzRCQUNOLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLO2dDQUNIbUIsTUFBTSxDQUFDbkIsSUFBSSxHQUFHLE9BQU9zQixVQUFVLFdBQVdBLFFBQVFFLElBQUFBLG9CQUFhLEVBQUNGO2dDQUNoRTs0QkFDRixLQUFLO2dDQUNISCxPQUFPTSwwQkFBMEIsR0FBRyxPQUFPSCxVQUFVLFdBQVdBLFFBQVFFLElBQUFBLG9CQUFhLEVBQUNGO2dDQUN0Rjs0QkFDRixLQUFLO2dDQUNISCxPQUFPTyxrQkFBa0IsR0FBR0o7Z0NBQzVCOzRCQUNGLEtBQUs7Z0NBQ0hILE9BQU9RLHlCQUF5QixHQUFHTDtnQ0FDbkM7d0JBQ0o7b0JBQ0Y7b0JBRUFILE1BQU0sQ0FBQ1MsSUFBQUEsdUJBQWdCLEVBQUM1QixLQUFLLEdBQUczQyxLQUFLd0QscUJBQXFCLENBQUNTO2dCQUM3RDtnQkFFQSxPQUFPSDtZQUNUO1lBRUEsSUFBSSxPQUFPTCxRQUFRLFVBQVUsT0FBT0EsSUFBSWUsUUFBUTtZQUVoRCxPQUFPZjtRQUNUO1FBRUFnQixtQkFBa0JuQyxNQUFNLEVBQUU3QyxPQUFPO1lBQy9CLE1BQU0wQyxVQUFVLElBQUksQ0FBQ2YsaUJBQWlCO1lBRXRDLElBQUkzQixTQUFTaUYsaUJBQWlCLE1BQU12QyxRQUFRbEMsYUFBYSxHQUFHLENBQUMsSUFBSSxFQUFFRCxLQUFLSCxLQUFLLEVBQUU7WUFFL0UsK0NBQStDO1lBQy9DLElBQUlKLFNBQVNrRixXQUFXdkMsV0FBVztnQkFDakNELE9BQU8sQ0FBQ3BELHdCQUF3QixHQUFHNkYsbUJBQW1CbkYsU0FBU2tGO1lBQ2pFO1lBRUEsSUFBSXBDO1lBRUosOERBQThEO1lBQzlELGtDQUFrQztZQUVsQywwRkFBMEY7WUFDMUYsSUFBSTlDLFNBQVNvRixVQUFVekMsV0FBVztnQkFDaEMsTUFBTTBDLE9BQU8sSUFBSUM7Z0JBQ2pCLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJdkYsUUFBUW9GLEtBQUssQ0FBQ0ksTUFBTSxFQUFFLEVBQUVELEVBQUc7b0JBQzdDRixLQUFLSSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUVGLEVBQUUsQ0FBQyxDQUFDLEVBQUV2RixRQUFRb0YsS0FBSyxDQUFDRyxFQUFFLENBQUNHLElBQUksRUFBRTFGLFFBQVFvRixLQUFLLENBQUNHLEVBQUUsQ0FBQ0ksSUFBSTtnQkFDekU7Z0JBRUEsd0hBQXdIO2dCQUN4SE4sS0FBS0ksTUFBTSxDQUFDLGdCQUFnQjFDLEtBQUtDLFNBQVMsQ0FBQ3pDLEtBQUt3RCxxQkFBcUIsQ0FBQztvQkFBRSxHQUFHL0QsUUFBUThDLElBQUk7b0JBQUVzQyxPQUFPekM7Z0JBQVU7Z0JBRTFHLHlIQUF5SDtnQkFDekhHLE9BQU91QztZQUNULE9BQU8sSUFBSXJGLFNBQVM4QyxRQUFROUMsUUFBUTBDLE9BQU8sSUFBSTFDLFFBQVEwQyxPQUFPLENBQUMsZUFBZSxLQUFLLHFDQUFxQztnQkFDdEgsdUJBQXVCO2dCQUN2QixNQUFNa0QsV0FBcUIsRUFBRTtnQkFFN0IsTUFBTUMsY0FBY3RGLEtBQUt3RCxxQkFBcUIsQ0FBQy9ELFFBQVE4QyxJQUFJO2dCQUUzRCxJQUFLLE1BQU1nRCxRQUFRRCxZQUFhO29CQUM5QkQsU0FBU0csSUFBSSxDQUFDLEdBQUdaLG1CQUFtQlcsTUFBTSxDQUFDLEVBQUVYLG1CQUFtQlUsV0FBVyxDQUFDQyxLQUFLLEdBQUc7Z0JBQ3RGO2dCQUVBaEQsT0FBTzhDLFNBQVNJLElBQUksQ0FBQztZQUN2QixPQUFPLElBQUloRyxTQUFTOEMsU0FBU0gsV0FBVztnQkFDdEMsSUFBSTNDLFFBQVE4QyxJQUFJLFlBQVl3QyxVQUFVO29CQUNwQ3hDLE9BQU85QyxRQUFROEMsSUFBSTtnQkFDbkIseUhBQXlIO2dCQUMzSCxPQUFPO29CQUNMQSxPQUFPQyxLQUFLQyxTQUFTLENBQUN6QyxLQUFLd0QscUJBQXFCLENBQUMvRCxRQUFROEMsSUFBSTtvQkFDN0RKLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDOUM7WUFDRjtZQUVBLHdFQUF3RTtZQUN4RSxJQUFJMUMsU0FBUzBDLFNBQVM7Z0JBQ3BCNEIsT0FBTzJCLE1BQU0sQ0FBQ3ZELFNBQVMxQyxRQUFRMEMsT0FBTztZQUN4QztZQUVBLE9BQU87Z0JBQ0xJO2dCQUNBSjtnQkFDQUc7WUFDRjtRQUNGO1FBRUFxRDtZQUNFLE1BQU0vRCxNQUFNQyxLQUFLRCxHQUFHO1lBRXBCLEtBQUssTUFBTSxDQUFDZSxLQUFLc0IsTUFBTSxJQUFJakUsS0FBS2dCLGdCQUFnQixDQUFDNkIsT0FBTyxHQUFJO2dCQUMxRCxnQkFBZ0I7Z0JBQ2hCLDREQUE0RDtnQkFDNUQsK0JBQStCO2dCQUMvQixLQUFLO2dCQUNMLE1BQU07Z0JBQ04scUNBQXFDO2dCQUNyQyxJQUFJb0IsTUFBTW5DLGNBQWMsR0FBR0YsS0FBSztnQkFFaEMsOENBQThDO2dCQUM5QzVCLEtBQUtnQixnQkFBZ0IsQ0FBQzhCLE1BQU0sQ0FBQ0g7Z0JBQzdCLHdEQUF3RDtnQkFDeEQsSUFBSUEsUUFBUSxVQUFVM0MsS0FBS0ksbUJBQW1CLEdBQUc7WUFDbkQ7WUFFQSx3Q0FBd0M7WUFDeEMsSUFBSUosS0FBS2dCLGdCQUFnQixDQUFDNEUsSUFBSSxLQUFLLEdBQUc7Z0JBQ3BDNUYsS0FBS2EsMEJBQTBCLEdBQUc7WUFDcEMsT0FBTztnQkFDTGIsS0FBS2EsMEJBQTBCLEdBQUc7Z0JBQ2xDLHNCQUFzQjtnQkFDdEJnRixXQUFXO29CQUNULHFFQUFxRTtvQkFDckU3RixLQUFLMkYsdUJBQXVCO2dCQUM5QixHQUFHO1lBQ0w7UUFDRjtRQUVBLDBIQUEwSCxHQUMxSEcsZ0JBQWV2RSxHQUFHLEVBQUVZLE9BQU8sRUFBRVgsVUFBVTtZQUNyQyxJQUFJdUUsY0FBYztZQUVsQiw0QkFBNEI7WUFDNUIsTUFBTUMsWUFBWTdELFFBQVFULEdBQUcsQ0FBQ3JDO1lBQzlCLE1BQU00RyxhQUFhOUQsUUFBUVQsR0FBRyxDQUFDcEM7WUFDL0IsTUFBTTRHLFFBQVFyRSxLQUFLRCxHQUFHLEtBQUt1RSxPQUFPRixjQUFjO1lBQ2hELE1BQU10RSxTQUFTUSxRQUFRVCxHQUFHLENBQUN2QztZQUMzQiw2Q0FBNkM7WUFDN0MsTUFBTW9FLFdBQVdwQixRQUFRVCxHQUFHLENBQUN4Qyw2QkFBNkJrRDtZQUMxRCxNQUFNZ0UsUUFBUWpFLFFBQVFULEdBQUcsQ0FBQ3RDO1lBRTFCLGtFQUFrRTtZQUNsRW9DLGVBQWUsQ0FBQyxJQUFJLEVBQUV4QixLQUFLSCxLQUFLLEVBQUU7WUFFbENHLEtBQUtjLE1BQU0sQ0FBQ1ksR0FBRyxDQUFDLEdBQUdGLGFBQWFELEtBQUssR0FBRzhFLHVCQUF1QjtnQkFDN0RMLFdBQVdBLFlBQVlHLE9BQU9ILGFBQWE1RDtnQkFDM0NrRSxVQUFVTCxhQUFhRSxPQUFPRixjQUFjLE9BQU83RDtnQkFDbkRtRSxLQUFLSCxRQUFRRCxPQUFPQyxTQUFTaEU7WUFDL0I7WUFFQSwrREFBK0Q7WUFDL0QsSUFBSTRELGNBQWMsS0FBSztnQkFDckJELGNBQWM7Z0JBRWQsNkVBQTZFO2dCQUM3RS9GLEtBQUtnQixnQkFBZ0IsQ0FBQ3FDLEdBQUcsQ0FBQyxHQUFHN0IsYUFBYUQsS0FBSyxFQUFFO29CQUMvQ0E7b0JBQ0FPLGdCQUFnQm9FO29CQUNoQjNDO2dCQUNGO2dCQUVBLHFFQUFxRTtnQkFDckUsSUFBSUEsVUFBVTtvQkFDWnZELEtBQUtnQixnQkFBZ0IsQ0FBQ3FDLEdBQUcsQ0FBQyxHQUFHN0IsYUFBYStCLFVBQVUsRUFBRTt3QkFDcERoQzt3QkFDQU8sZ0JBQWdCb0U7d0JBQ2hCM0M7b0JBQ0Y7Z0JBQ0Y7WUFDRjtZQUVBLHVFQUF1RTtZQUN2RSxJQUFJNUIsUUFBUTtnQkFDVixNQUFNc0UsYUFBYUUsT0FBT2hFLFFBQVFULEdBQUcsQ0FBQyxrQkFBa0I7Z0JBQ3hELE1BQU04RSxjQUFjM0UsS0FBS0QsR0FBRyxLQUFLcUU7Z0JBQ2pDLGdCQUFnQjtnQkFDaEIsNkVBQTZFO2dCQUM3RSxNQUFNO2dCQUNOakcsS0FBS0ksbUJBQW1CLEdBQUc7Z0JBQzNCMkYsY0FBYztnQkFFZEYsV0FBVztvQkFDVDdGLEtBQUtJLG1CQUFtQixHQUFHO2dCQUM3QixHQUFHNkY7Z0JBRUhqRyxLQUFLZ0IsZ0JBQWdCLENBQUNxQyxHQUFHLENBQUMsVUFBVTtvQkFDbEM5QixLQUFLO29CQUNMTyxnQkFBZ0IwRTtvQkFDaEJqRDtnQkFDRjtnQkFFQSxJQUFJQSxVQUFVO29CQUNadkQsS0FBS2dCLGdCQUFnQixDQUFDcUMsR0FBRyxDQUFDN0IsWUFBWTt3QkFDcENELEtBQUs7d0JBQ0xPLGdCQUFnQjBFO3dCQUNoQmpEO29CQUNGO2dCQUNGO1lBQ0Y7WUFFQSxJQUFJd0MsZUFBZSxDQUFDL0YsS0FBS2EsMEJBQTBCLEVBQUU7Z0JBQ25EYixLQUFLMkYsdUJBQXVCO1lBQzlCO1lBQ0EsT0FBT0ksY0FBY3hDLFdBQVduQjtRQUNsQztRQUVBLE1BQU1xRSxhQUFZaEgsT0FBTztZQUN2QixNQUFNOEIsTUFBTSxHQUFHdkIsS0FBS0YsT0FBTyxDQUFDLEVBQUUsRUFBRUUsS0FBS2lCLE9BQU8sR0FBR3hCLFFBQVFpSCxLQUFLLEVBQUU7WUFDOUQsTUFBTUMsVUFBVTNHLEtBQUt5RSxpQkFBaUIsQ0FBQ2hGLFFBQVE2QyxNQUFNLEVBQUU3QyxRQUFRbUgsa0JBQWtCO1lBRWpGLE1BQU1DLGlCQUFpQjtnQkFBRSxHQUFHRixRQUFReEUsT0FBTztZQUFDO1lBRTVDLElBQUl3RSxRQUFReEUsT0FBTyxDQUFDbEMsYUFBYSxFQUFFO2dCQUNqQyxNQUFNNkcsc0JBQXNCSCxRQUFReEUsT0FBTyxDQUFDbEMsYUFBYSxFQUFFOEcsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDeEVGLGVBQWU1RyxhQUFhLEdBQUcsR0FBRzZHLG9CQUFvQixVQUFVLENBQUM7WUFDbkU7WUFFQTlHLEtBQUtPLE1BQU0sQ0FBQ3lHLEtBQUssQ0FBQyxDQUFDLG1CQUFtQixFQUFFekYsS0FBSyxFQUFFLGlCQUFpQjtnQkFBRSxHQUFHb0YsT0FBTztnQkFBRXhFLFNBQVMwRTtZQUFlO1lBQ3RHLE1BQU1JLFdBQVcsTUFBTTVFLE1BQU1kLEtBQUtvRixTQUFTTyxLQUFLLENBQUMsT0FBT0M7Z0JBQ3REbkgsS0FBS08sTUFBTSxDQUFDNEcsS0FBSyxDQUFDQTtnQkFDbEIsNkJBQTZCO2dCQUM3Qm5ILEtBQUtLLGFBQWEsQ0FBQ2dHLHNCQUFzQixDQUFDLEtBQUs7Z0JBQy9DNUcsUUFBUTJILE1BQU0sQ0FBQztvQkFDYkMsSUFBSTtvQkFDSkMsUUFBUTtvQkFDUkgsT0FBTztnQkFDVDtnQkFDQSxNQUFNQTtZQUNSO1lBQ0FuSCxLQUFLTyxNQUFNLENBQUN5RyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsRUFBRXpGLElBQUksYUFBYSxFQUFFMEYsU0FBU0ssTUFBTSxDQUFDLEdBQUcsRUFBRUwsU0FBU00sVUFBVSxFQUFFO1lBRXZHLDZCQUE2QjtZQUM3QnZILEtBQUtLLGFBQWEsQ0FBQ2dHLHNCQUFzQixDQUFDWSxTQUFTSyxNQUFNLEVBQUVMLFNBQVM5RSxPQUFPLENBQUNULEdBQUcsQ0FBQ25DLDZCQUE2QjtZQUU3Ryx1REFBdUQ7WUFDdkQsTUFBTWdFLFdBQVd2RCxLQUFLOEYsY0FBYyxDQUFDOUYsS0FBS3dILFdBQVcsQ0FBQy9ILFFBQVFpSCxLQUFLLEVBQUVqSCxRQUFRNkMsTUFBTSxHQUFHMkUsU0FBUzlFLE9BQU8sRUFBRXdFLFFBQVF4RSxPQUFPLENBQUNsQyxhQUFhO1lBRXJJLElBQUlzRCxVQUFVOUQsUUFBUThELFFBQVEsR0FBR0E7WUFFakMsSUFBSTBELFNBQVNLLE1BQU0sVUFBK0JMLFNBQVNLLE1BQU0sU0FBNEI7Z0JBQzNGdEgsS0FBS08sTUFBTSxDQUFDeUcsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFekYsSUFBSSxRQUFRLENBQUM7Z0JBRTdDLElBQUkwRixTQUFTSyxNQUFNLFVBQXVDO29CQUN4RCxNQUFNL0UsT0FBTzBFLFNBQVM5RSxPQUFPLENBQUNULEdBQUcsQ0FBQyxvQkFBb0IscUJBQXVCLE1BQU11RixTQUFTUSxJQUFJLEtBQWlCLE1BQU1SLFNBQVNTLElBQUk7b0JBRXBJakksUUFBUTJILE1BQU0sQ0FBQzt3QkFBRUMsSUFBSTt3QkFBT0MsUUFBUUwsU0FBU0ssTUFBTTt3QkFBRUMsWUFBWU4sU0FBU00sVUFBVTt3QkFBRWhGO29CQUFLO29CQUMzRjtnQkFDRjtnQkFFQSxvREFBb0Q7Z0JBQ3BELE1BQU0wRSxTQUFTVSxXQUFXO2dCQUUxQjNILEtBQUtPLE1BQU0sQ0FBQ3lHLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRXpGLElBQUksaUJBQWlCLENBQUM7Z0JBQ3RELG9EQUFvRDtnQkFDcEQsSUFBSTlCLFFBQVFtSSxVQUFVLElBQUk1SCxLQUFLVyxhQUFhLEVBQUU7b0JBQzVDWCxLQUFLTyxNQUFNLENBQUN5RyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUV6RixJQUFJLHNDQUFzQyxDQUFDLEVBQUUsaUJBQWlCb0Y7b0JBQzlGLGlFQUFpRTtvQkFDakVsSCxRQUFRMkgsTUFBTSxDQUFDO3dCQUNiQyxJQUFJO3dCQUNKQyxRQUFRTCxTQUFTSyxNQUFNO3dCQUN2QkMsWUFBWU4sU0FBU00sVUFBVTt3QkFDL0JKLE9BQU87b0JBQ1Q7b0JBRUE7Z0JBQ0Y7Z0JBRUExSCxRQUFRbUksVUFBVSxJQUFJO2dCQUV0QixNQUFNQyxhQUFhWixTQUFTOUUsT0FBTyxDQUFDVCxHQUFHLENBQUNwQztnQkFDeEMsSUFBSXVJLFlBQVksTUFBTUMsSUFBQUEsWUFBSyxFQUFDM0IsT0FBTzBCLGNBQWM7Z0JBRWpELE9BQU8sTUFBTXBJLFFBQVFzSSxZQUFZLEdBQUd0STtZQUN0QztZQUVBLHVEQUF1RDtZQUN2REEsUUFBUXVJLE9BQU8sQ0FBQztnQkFBRVgsSUFBSTtnQkFBTUMsUUFBUUwsU0FBU0ssTUFBTTtnQkFBRS9FLE1BQU0wRSxTQUFTSyxNQUFNLFdBQWtDbEYsWUFBWSxNQUFNNkUsU0FBU1MsSUFBSTtZQUFHO1FBQ2hKO1FBRUFGLGFBQVlqRyxHQUFHLEVBQUVlLE1BQU07WUFDckIsTUFBTTJGLFFBQVExRyxJQUFJd0YsS0FBSyxDQUFDO1lBQ3hCLE1BQU1tQixpQkFBaUJELEtBQUssQ0FBQ0EsTUFBTWhELE1BQU0sR0FBRyxFQUFFO1lBRTlDLElBQUlpRCxtQkFBbUIsY0FBY0EsbUJBQW1CLFVBQVU7Z0JBQ2hFLE9BQU8zRztZQUNUO1lBRUEsSUFBSTJHLG1CQUFtQixlQUFlRCxLQUFLLENBQUNBLE1BQU1oRCxNQUFNLEdBQUcsRUFBRSxLQUFLLE9BQU87Z0JBQ3ZFZ0QsTUFBTUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2RGLE1BQU16QyxJQUFJLENBQUM7WUFDYixPQUFPO2dCQUNMeUMsTUFBTUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2RGLE1BQU16QyxJQUFJLENBQUM7WUFDYjtZQUVBLElBQUl5QyxLQUFLLENBQUNBLE1BQU1oRCxNQUFNLEdBQUcsRUFBRSxLQUFLLGFBQWE7Z0JBQzNDZ0QsTUFBTUUsTUFBTSxDQUFDLENBQUM7WUFDaEI7WUFFQSxJQUFJN0YsV0FBVyxZQUFZNEYsbUJBQW1CLFlBQVk7Z0JBQ3hELE9BQU8sQ0FBQyxDQUFDLEVBQUVELE1BQU14QyxJQUFJLENBQUMsTUFBTTtZQUM5QjtZQUVBLE9BQU93QyxNQUFNeEMsSUFBSSxDQUFDO1FBQ3BCO1FBRUEsTUFBTTJDLGdCQUFlQyxPQUEyQjtZQUM5QyxNQUFNOUcsTUFBTXZCLEtBQUt3SCxXQUFXLENBQUNhLFFBQVEzQixLQUFLLEVBQUUyQixRQUFRL0YsTUFBTTtZQUUxRCxJQUFJK0YsUUFBUUMsZUFBZSxLQUFLLE9BQU87Z0JBQ3JDLE1BQU10SSxLQUFLeUcsV0FBVyxDQUFDNEI7Z0JBRXZCO1lBQ0Y7WUFFQSx3Q0FBd0M7WUFDeEMsNkNBQTZDO1lBQzdDLE1BQU1FLGtCQUFrQkYsUUFBUXpCLGtCQUFrQixFQUFFekUsU0FBU2xDLGlCQUFpQixDQUFDLElBQUksRUFBRUQsS0FBS0gsS0FBSyxFQUFFO1lBRWpHLE1BQU0rQyxRQUFRNUMsS0FBS2MsTUFBTSxDQUFDWSxHQUFHLENBQUMsR0FBRzZHLGtCQUFrQmhILEtBQUs7WUFFeEQsSUFBSXFCLFVBQVVSLFdBQVc7Z0JBQ3ZCUSxNQUFNNEYsV0FBVyxDQUFDSDtZQUNwQixPQUFPO2dCQUNMLHNCQUFzQjtnQkFDdEIsTUFBTUksY0FBYyxJQUFJQyxZQUFLLENBQUMxSSxNQUFNO29CQUFFdUI7b0JBQUtwQixrQkFBa0JILEtBQUtHLGdCQUFnQjtvQkFBRXFCLFlBQVkrRztnQkFBZ0I7Z0JBRWhILGFBQWE7Z0JBQ2J2SSxLQUFLYyxNQUFNLENBQUN1QyxHQUFHLENBQUMsR0FBR2tGLGtCQUFrQmhILEtBQUssRUFBRWtIO2dCQUU1Qyx1QkFBdUI7Z0JBQ3ZCQSxZQUFZRCxXQUFXLENBQUNIO1lBQzFCO1FBQ0Y7UUFFQSxNQUFNRyxhQUFZbEcsTUFBTSxFQUFFb0UsS0FBSyxFQUFFakgsT0FBTztZQUN0QyxpRkFBaUY7WUFDakYsTUFBTTBILFFBQVEsSUFBSWpGO1lBRWxCLElBQUlsQyxLQUFLUSxTQUFTLEVBQUU7Z0JBQ2xCLElBQUlSLEtBQUtDLGFBQWEsRUFBRTtvQkFDdEJSLFlBQVksQ0FBQztvQkFDYkEsUUFBUTBDLE9BQU8sS0FBSyxDQUFDO29CQUNyQjFDLFFBQVEwQyxPQUFPLENBQUNuQyxLQUFLRSxtQkFBbUIsQ0FBQyxHQUFHRixLQUFLQyxhQUFhO2dCQUNoRTtnQkFFQSxNQUFNMEksU0FBUyxNQUFNdEcsTUFBTSxHQUFHckMsS0FBS0YsT0FBTyxDQUFDLEVBQUUsRUFBRUUsS0FBS2lCLE9BQU8sR0FBR3lGLE9BQU8sRUFBRTFHLEtBQUt5RSxpQkFBaUIsQ0FBQ25DLFFBQVE3QztnQkFFdEcsSUFBSSxDQUFDa0osT0FBT3RCLEVBQUUsRUFBRTtvQkFDZCxNQUFNOUUsT0FBTyxNQUFNLEFBQUNvRyxDQUFBQSxPQUFPeEcsT0FBTyxDQUFDVCxHQUFHLENBQUMsb0JBQW9CLHFCQUFxQmlILE9BQU9sQixJQUFJLEtBQUtrQixPQUFPakIsSUFBSSxFQUFDLEVBQUdSLEtBQUssQ0FBQyxJQUFNO29CQUUzSEMsTUFBTXlCLEtBQUssR0FBRzt3QkFDWnZCLElBQUk7d0JBQ0pDLFFBQVFxQixPQUFPckIsTUFBTTt3QkFDckIvRTtvQkFDRjtvQkFFQSxNQUFNNEU7Z0JBQ1I7Z0JBRUEsT0FBT3dCLE9BQU9yQixNQUFNLEtBQUssTUFBTSxNQUFNcUIsT0FBT2xCLElBQUksS0FBS3JGO1lBQ3ZEO1lBRUEsT0FBTyxNQUFNLElBQUl5RyxRQUFRLE9BQU9iLFNBQVNaO2dCQUN2QyxNQUFNVCxVQUE4QjtvQkFDbENEO29CQUNBcEU7b0JBQ0FzRSxvQkFBb0JuSDtvQkFDcEJtSSxZQUFZO29CQUNaRyxjQUFjLE9BQU9wQjt3QkFDbkIsTUFBTTNHLEtBQUtvSSxjQUFjLENBQUN6QjtvQkFDNUI7b0JBQ0FxQixTQUFTLENBQUNjO3dCQUNSZCxRQUFRYyxLQUFLeEIsTUFBTSxLQUFLLE1BQU05RSxLQUFLdUcsS0FBSyxDQUFDRCxLQUFLdkcsSUFBSSxJQUFJLFFBQVFIO29CQUNoRTtvQkFDQWdGLFFBQVEsQ0FBQ3pDO3dCQUNQLElBQUlxRTt3QkFFSixPQUFRckUsT0FBTzJDLE1BQU07NEJBQ25CLEtBQUs7Z0NBQ0gwQixZQUFZO2dDQUNaOzRCQUNGLEtBQUs7Z0NBQ0hBLFlBQVk7Z0NBQ1o7NEJBQ0YsS0FBSztnQ0FDSEEsWUFBWTtnQ0FDWjs0QkFDRixLQUFLO2dDQUNIQSxZQUFZO2dDQUNaOzRCQUNGLEtBQUs7Z0NBQ0hBLFlBQVk7Z0NBQ1o7NEJBQ0YsS0FBSztnQ0FDSEEsWUFBWTtnQ0FDWjs0QkFDRixLQUFLO2dDQUNIQSxZQUFZO2dDQUNaOzRCQUNGO2dDQUNFQSxZQUFZckUsT0FBTzRDLFVBQVUsSUFBSTt3QkFDckM7d0JBRUFKLE1BQU04QixPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUV0RSxPQUFPMkMsTUFBTSxDQUFDLEVBQUUsRUFBRTBCLFdBQVc7d0JBRWpELHFNQUFxTTt3QkFDck0sK0RBQStEO3dCQUMvRCxJQUFJLE9BQU9yRSxPQUFPcEMsSUFBSSxLQUFLLFlBQVkyRyxJQUFBQSxrQkFBVyxFQUFDdkUsT0FBT3BDLElBQUksRUFBRSxXQUFXMkcsSUFBQUEsa0JBQVcsRUFBQ3ZFLE9BQU9wQyxJQUFJLEVBQUUsWUFBWTs0QkFDOUc0RSxNQUFNOEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUV0RSxPQUFPcEMsSUFBSSxDQUFDNEcsSUFBSSxDQUFDLEVBQUUsRUFBRXhFLE9BQU9wQyxJQUFJLENBQUMwRyxPQUFPLEVBQUU7d0JBQ2xGO3dCQUVBOUIsTUFBTXlCLEtBQUssR0FBR2pFO3dCQUNkeUMsT0FBT0Q7b0JBQ1Q7b0JBQ0FtQixpQkFBaUI3SSxTQUFTNkk7Z0JBQzVCO2dCQUVBLE1BQU10SSxLQUFLb0ksY0FBYyxDQUFDekI7WUFDNUI7UUFDRjtRQUVBLE1BQU1qRixLQUFpQ0gsR0FBVyxFQUFFOUIsT0FBMkQ7WUFDN0csT0FBTzJKLElBQUFBLGVBQVEsRUFBQyxNQUFNcEosS0FBS3dJLFdBQVcsQ0FBQyxPQUFPakgsS0FBSzlCO1FBQ3JEO1FBRUEsTUFBTTRKLE1BQWtDOUgsR0FBVyxFQUFFOUIsT0FBMkQ7WUFDOUcsT0FBTzJKLElBQUFBLGVBQVEsRUFBQyxNQUFNcEosS0FBS3dJLFdBQVcsQ0FBQyxRQUFRakgsS0FBSzlCO1FBQ3REO1FBRUEsTUFBTXFELFFBQU92QixHQUFXLEVBQUU5QixPQUEyRDtZQUNuRjJKLElBQUFBLGVBQVEsRUFBQyxNQUFNcEosS0FBS3dJLFdBQVcsQ0FBQyxVQUFVakgsS0FBSzlCO1FBQ2pEO1FBRUEsTUFBTTZKLE9BQW1DL0gsR0FBVyxFQUFFOUIsT0FBMkQ7WUFDL0csT0FBTzJKLElBQUFBLGVBQVEsRUFBQyxNQUFNcEosS0FBS3dJLFdBQVcsQ0FBQyxTQUFTakgsS0FBSzlCO1FBQ3ZEO1FBRUEsTUFBTThKLEtBQWNoSSxHQUFXLEVBQUU5QixPQUEyRDtZQUMxRixPQUFPMkosSUFBQUEsZUFBUSxFQUFDLE1BQU1wSixLQUFLd0ksV0FBVyxDQUFDLE9BQU9qSCxLQUFLOUI7UUFDckQ7UUFFQSxNQUFNK0osYUFBWUMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLFFBQVE7WUFDOUNBLFdBQVdDLElBQUFBLDRCQUFxQixFQUFDRDtZQUVqQyxNQUFNM0osS0FBS3VKLEdBQUcsQ0FBQ3ZKLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNDLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDTixXQUFXQyxXQUFXQztRQUMxRTtRQUVBLE1BQU1LLGNBQWFQLFNBQVMsRUFBRUMsU0FBUyxFQUFFSSxTQUFTLEVBQUVHLFVBQVUsS0FBSztZQUNqRSxJQUFJLENBQUNBLFNBQVM7Z0JBQ1osTUFBTXBCLFFBQVFxQixHQUFHLENBQ2ZKLFVBQVVsRyxHQUFHLENBQUMsT0FBTytGO29CQUNuQixNQUFNM0osS0FBS3dKLFdBQVcsQ0FBQ0MsV0FBV0MsV0FBV0M7Z0JBQy9DO2dCQUVGO1lBQ0Y7WUFFQSxLQUFLLE1BQU1BLFlBQVlHLFVBQVc7Z0JBQ2hDLE1BQU05SixLQUFLd0osV0FBVyxDQUFDQyxXQUFXQyxXQUFXQztZQUMvQztRQUNGO1FBRUEsTUFBTVEsU0FBUUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRTNGLE1BQU07WUFDM0MsTUFBTTNFLEtBQUt1SixHQUFHLENBQUN2SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0wsU0FBU0MsUUFBUUMsU0FBUztnQkFBRTNGO1lBQU87UUFDcEY7UUFFQSxNQUFNK0YsaUJBQWdCakIsU0FBUyxFQUFFWSxNQUFNO1lBQ3JDLE1BQU1ySyxLQUFLdUosR0FBRyxDQUFDdkosS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ2MsT0FBTyxDQUFDQyxJQUFJLENBQUNuQixXQUFXWTtRQUM5RDtRQUVBLE1BQU1RLGdCQUFlcEIsU0FBUyxFQUFFWSxNQUFNLEVBQUU5SCxJQUFJO1lBQzFDLE1BQU12QyxLQUFLdUosR0FBRyxDQUFDdkosS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ2lCLFdBQVcsQ0FBQ3JCLFdBQVdZLFNBQVM7Z0JBQUU5SDtZQUFLO1FBQzdFO1FBRUEsTUFBTXdJLG1CQUFrQlgsT0FBTyxFQUFFN0gsSUFBSSxFQUFFb0MsTUFBTTtZQUMzQyxPQUFPLE1BQU0zRSxLQUFLcUosSUFBSSxDQUE0QnJKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNTLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDYixVQUFVO2dCQUFFN0g7Z0JBQU1vQztZQUFPO1FBQzlHO1FBRUEsTUFBTXVHLGVBQWNkLE9BQU8sRUFBRTdILElBQUksRUFBRW9DLE1BQU07WUFDdkMsT0FBTyxNQUFNM0UsS0FBS3FKLElBQUksQ0FBaUJySixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDVixRQUFRLENBQUNPLFVBQVU7Z0JBQUU3SDtnQkFBTW9DO1lBQU87UUFDOUY7UUFFQSxNQUFNd0csYUFBWWYsT0FBTyxFQUFFN0gsSUFBSSxFQUFFb0MsTUFBTTtZQUNyQyxPQUFPLE1BQU0zRSxLQUFLcUosSUFBSSxDQUFlckosS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ2EsTUFBTSxDQUFDaEIsVUFBVTtnQkFBRTdIO2dCQUFNb0M7WUFBTztRQUMxRjtRQUVBLE1BQU0wRyx3QkFBdUI5SSxJQUFJO1lBQy9CLE9BQU8sTUFBTXZDLEtBQUtxSixJQUFJLENBQWVySixLQUFLa0IsTUFBTSxDQUFDb0ssaUJBQWlCLENBQUN0TCxLQUFLTixhQUFhLEdBQUc7Z0JBQUU2QztZQUFLO1FBQ2pHO1FBRUEsTUFBTWdKLGdDQUErQmhKLElBQUksRUFBRTlDLE9BQU87WUFDaEQsTUFBTStMLGNBQWtDO2dCQUFFako7WUFBSztZQUUvQyxJQUFJOUMsU0FBU2dNLGFBQWE7Z0JBQ3hCRCxZQUFZOUcsWUFBWSxHQUFHO2dCQUMzQjhHLFlBQVlySixPQUFPLEdBQUc7b0JBQ3BCbEMsZUFBZSxDQUFDLE9BQU8sRUFBRVIsUUFBUWdNLFdBQVcsRUFBRTtnQkFDaEQ7WUFDRjtZQUVBLE9BQU8sTUFBTXpMLEtBQUtxSixJQUFJLENBQTRCckosS0FBS2tCLE1BQU0sQ0FBQ3dLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDQSxRQUFRLENBQUMzTCxLQUFLTixhQUFhLEdBQUc4TDtRQUNwSDtRQUVBLE1BQU1JLGFBQVlySixJQUFJO1lBQ3BCLE9BQU8sTUFBTXZDLEtBQUtxSixJQUFJLENBQWVySixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDTCxHQUFHLElBQUk7Z0JBQUUzSDtZQUFLO1FBQ3hFO1FBRUEsTUFBTXNKLCtCQUE4QnRKLElBQUksRUFBRTZILE9BQU8sRUFBRTNLLE9BQU87WUFDeEQsTUFBTStMLGNBQWtDO2dCQUFFako7WUFBSztZQUUvQyxJQUFJOUMsU0FBU2dNLGFBQWE7Z0JBQ3hCRCxZQUFZOUcsWUFBWSxHQUFHO2dCQUMzQjhHLFlBQVlySixPQUFPLEdBQUc7b0JBQ3BCbEMsZUFBZSxDQUFDLE9BQU8sRUFBRVIsUUFBUWdNLFdBQVcsRUFBRTtnQkFDaEQ7WUFDRjtZQUVBLE9BQU8sTUFBTXpMLEtBQUtxSixJQUFJLENBQTRCckosS0FBS2tCLE1BQU0sQ0FBQ3dLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDcEIsTUFBTSxDQUFDTCxHQUFHLENBQUNsSyxLQUFLTixhQUFhLEVBQUUwSyxVQUFVb0I7UUFDL0g7UUFFQSxNQUFNTSx5QkFBd0JDLFlBQVksRUFBRXhKLElBQUk7WUFDOUMsSUFBSUEsS0FBS3lKLElBQUksRUFBRTtnQkFDYnpKLEtBQUt5SixJQUFJLEdBQUcsTUFBTUMsSUFBQUEsa0JBQVcsRUFBQzFKLEtBQUt5SixJQUFJO1lBQ3pDO1lBRUEsT0FBTyxNQUFNaE0sS0FBS3FKLElBQUksQ0FBZXJKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUMyQixTQUFTLENBQUMvQyxJQUFJLENBQUM0QyxlQUFlO2dCQUFFeEo7WUFBSztRQUMvRjtRQUVBLE1BQU00SixvQkFBbUIvQixPQUFPLEVBQUUzSyxPQUFPLEVBQUVrRixNQUFNO1lBQy9DLE1BQU1HLE9BQU8sSUFBSUM7WUFDakJELEtBQUtJLE1BQU0sQ0FBQyxRQUFRekYsUUFBUTJNLElBQUksQ0FBQ2pILElBQUksRUFBRTFGLFFBQVEyTSxJQUFJLENBQUNoSCxJQUFJO1lBQ3hETixLQUFLSSxNQUFNLENBQUMsUUFBUXpGLFFBQVEyRixJQUFJO1lBQ2hDTixLQUFLSSxNQUFNLENBQUMsZUFBZXpGLFFBQVE0TSxXQUFXO1lBQzlDdkgsS0FBS0ksTUFBTSxDQUFDLFFBQVF6RixRQUFRNk0sSUFBSTtZQUVoQyxPQUFPLE1BQU10TSxLQUFLcUosSUFBSSxDQUFpQnJKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNnQyxRQUFRLENBQUNuQyxVQUFVO2dCQUFFN0gsTUFBTXVDO2dCQUFNSDtZQUFPO1FBQ3BHO1FBRUEsTUFBTTZILHFCQUFvQnBDLE9BQU8sRUFBRTdILElBQUk7WUFDckMsT0FBTyxNQUFNdkMsS0FBS3FKLElBQUksQ0FBa0JySixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDMkIsU0FBUyxDQUFDaEMsR0FBRyxDQUFDRSxVQUFVO2dCQUFFN0g7WUFBSztRQUM1RjtRQUVBLE1BQU1rSyxtQkFBa0JoRCxTQUFTLEVBQUVsSCxJQUFJLEVBQUVvQyxNQUFNO1lBQzdDLE9BQU8sTUFBTTNFLEtBQUtxSixJQUFJLENBQWlCckosS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQzZDLEtBQUssQ0FBQ2pELFlBQVk7Z0JBQUVsSDtnQkFBTXNDLE9BQU90QyxLQUFLc0MsS0FBSztnQkFBRUY7WUFBTztRQUNsSDtRQUVBLE1BQU1nSSxjQUFhbEQsU0FBUyxFQUFFbEgsT0FBTyxDQUFDLENBQUMsRUFBRW9DLE1BQU07WUFDN0MsT0FBTyxNQUFNM0UsS0FBS3FKLElBQUksQ0FBZ0JySixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDK0MsT0FBTyxDQUFDbkQsWUFBWTtnQkFBRWxIO2dCQUFNb0M7WUFBTztRQUNoRztRQUVBLE1BQU1rSSxZQUFXekMsT0FBTyxFQUFFN0gsSUFBSSxFQUFFb0MsTUFBTTtZQUNwQyxPQUFPLE1BQU0zRSxLQUFLcUosSUFBSSxDQUFjckosS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDTixHQUFHLENBQUNFLFVBQVU7Z0JBQUU3SDtnQkFBTW9DO1lBQU87UUFDNUY7UUFFQSxNQUFNbUksc0JBQXFCMUMsT0FBTyxFQUFFN0gsSUFBSSxFQUFFb0MsTUFBTTtZQUM5QyxPQUFPLE1BQU0zRSxLQUFLcUosSUFBSSxDQUF3QnJKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUN3QyxNQUFNLENBQUNBLE1BQU0sQ0FBQzNDLFVBQVU7Z0JBQUU3SDtnQkFBTW9DO1lBQU87UUFDMUc7UUFFQSxNQUFNcUkscUJBQW9CekssSUFBSSxFQUFFb0MsTUFBTTtZQUNwQyxPQUFPLE1BQU0zRSxLQUFLcUosSUFBSSxDQUF1QnJKLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNvRCxNQUFNLElBQUk7Z0JBQUUxSztnQkFBTW9DO1lBQU87UUFDN0Y7UUFFQSxNQUFNdUksZUFBY3pELFNBQVMsRUFBRWhLLE9BQU8sRUFBRWtGLE1BQU07WUFDNUMsT0FBTyxNQUFNM0UsS0FBS3FKLElBQUksQ0FBaUJySixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDc0QsUUFBUSxDQUFDMUQsWUFBWTtnQkFDL0VsSCxNQUFNO29CQUNKNkMsTUFBTTNGLFFBQVEyRixJQUFJO29CQUNsQmdJLFFBQVEzTixRQUFRMk4sTUFBTSxHQUFHLE1BQU1uQixJQUFBQSxrQkFBVyxFQUFDeE0sUUFBUTJOLE1BQU0sSUFBSWhMO2dCQUMvRDtnQkFDQXVDO1lBQ0Y7UUFDRjtRQUVBLE1BQU0wSSxtQkFBa0JqRCxPQUFPLEVBQUVrRCxNQUFNLEVBQUUzSSxNQUFNO1lBQzdDLE1BQU0zRSxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ1MsT0FBTyxDQUFDdUMsSUFBSSxDQUFDbkQsU0FBU2tELFNBQVM7Z0JBQUUzSTtZQUFPO1FBQy9FO1FBRUEsTUFBTTZJLGVBQWMvRCxTQUFTLEVBQUU5RSxNQUFNO1lBQ25DLE1BQU0zRSxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQzRELE9BQU8sQ0FBQ2hFLFlBQVk7Z0JBQ3pEOUU7WUFDRjtRQUNGO1FBRUEsTUFBTStJLGlDQUFnQ2pFLFNBQVMsRUFBRWtFLFdBQVcsRUFBRWhKLE1BQU07WUFDbEUsTUFBTTNFLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDK0QsU0FBUyxDQUFDbkUsV0FBV2tFLGNBQWM7Z0JBQUVoSjtZQUFPO1FBQ3JGO1FBRUEsTUFBTWtKLGFBQVl6RCxPQUFPLEVBQUUwRCxFQUFFLEVBQUVuSixNQUFNO1lBQ25DLE1BQU0zRSxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3dELEtBQUssQ0FBQzNELFNBQVMwRCxLQUFLO2dCQUFFbko7WUFBTztRQUNwRTtRQUVBLE1BQU1xSix3QkFBdUJGLEVBQUU7WUFDN0IsTUFBTTlOLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDK00sZ0JBQWdCLENBQUNqTyxLQUFLTixhQUFhLEVBQUVvTztRQUNyRTtRQUVBLE1BQU1JLHVCQUFzQnJPLEtBQUssRUFBRTZKLFNBQVM7WUFDMUMsTUFBTTFKLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDeUMsU0FBUyxDQUFDbEYsT0FBTyxDQUFDakosS0FBS04sYUFBYSxFQUFFRyxPQUFPNkosWUFBWTtnQkFBRWhGLGNBQWM7WUFBSztRQUMzSDtRQUVBLE1BQU0wSixnQ0FBK0JDLFNBQVM7WUFDNUMsTUFBTXJPLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDQyxRQUFRLENBQUMyQyxPQUFPLENBQUN0TyxLQUFLTixhQUFhLEVBQUUyTztRQUNsRjtRQUVBLE1BQU1FLGFBQVluRSxPQUFPO1lBQ3ZCLE1BQU1wSyxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ2lFLEtBQUssQ0FBQ3BFO1FBQzdDO1FBRUEsTUFBTXFFLCtCQUE4QkosU0FBUyxFQUFFakUsT0FBTztZQUNwRCxNQUFNcEssS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUNDLFFBQVEsQ0FBQ3BCLE1BQU0sQ0FBQ21FLEdBQUcsQ0FBQzFPLEtBQUtOLGFBQWEsRUFBRTBLLFNBQVNpRTtRQUM5RjtRQUVBLE1BQU1NLG9CQUFtQnZFLE9BQU8sRUFBRXdFLFNBQVMsRUFBRWpLLE1BQU07WUFDakQsTUFBTTNFLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDc0UsT0FBTyxDQUFDekUsU0FBU3dFLFlBQVk7Z0JBQUVqSztZQUFPO1FBQzdFO1FBRUEsTUFBTW1LLHFCQUFvQjFFLE9BQU8sRUFBRTJCLFlBQVk7WUFDN0MsTUFBTS9MLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDMkIsU0FBUyxDQUFDc0MsS0FBSyxDQUFDcEUsU0FBUzJCO1FBQ2hFO1FBRUEsTUFBTWdELG1CQUFrQjNFLE9BQU8sRUFBRTRFLGFBQWEsRUFBRXJLLE1BQU07WUFDcEQsTUFBTTNFLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDMEUsV0FBVyxDQUFDN0UsU0FBUzRFLGdCQUFnQjtnQkFBRXJLO1lBQU87UUFDckY7UUFFQSxNQUFNdUssY0FBYUMsVUFBVSxFQUFFeEssTUFBTTtZQUNuQyxNQUFNM0UsS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUM2RSxNQUFNLENBQUNELGFBQWE7Z0JBQUV4SztZQUFPO1FBQ3BFO1FBRUEsTUFBTTBLLGVBQWM1RixTQUFTLEVBQUVDLFNBQVMsRUFBRS9FLE1BQU07WUFDOUMsTUFBTTNFLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDWixPQUFPLENBQUNRLFdBQVdDLFlBQVk7Z0JBQUUvRTtZQUFPO1FBQ2pGO1FBRUEsTUFBTTJLLGdCQUFlN0YsU0FBUyxFQUFFOEYsVUFBVSxFQUFFNUssTUFBTTtZQUNoRCxNQUFNM0UsS0FBS3FKLElBQUksQ0FBQ3JKLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUMyRixJQUFJLENBQUMvRixZQUFZO2dCQUNwRGxILE1BQU07b0JBQ0prTixVQUFVRixXQUFXRyxLQUFLLENBQUMsR0FBRyxLQUFLOUwsR0FBRyxDQUFDLENBQUNrSyxLQUFPQSxHQUFHdEosUUFBUTtnQkFDNUQ7Z0JBQ0FHO1lBQ0Y7UUFDRjtRQUVBLE1BQU1nTCxtQ0FBa0M5UCxLQUFLO1lBQzNDLE1BQU1HLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDeUMsU0FBUyxDQUFDeUIsUUFBUSxDQUFDNVAsS0FBS04sYUFBYSxFQUFFRyxRQUFRO2dCQUFFNkUsY0FBYztZQUFLO1FBQ2pIO1FBRUEsTUFBTW1MLG1CQUFrQnBHLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxRQUFRO1lBQ3BEQSxXQUFXQyxJQUFBQSw0QkFBcUIsRUFBQ0Q7WUFFakMsTUFBTTNKLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDQyxTQUFTLENBQUNDLEdBQUcsQ0FBQ04sV0FBV0MsV0FBV0M7UUFDN0U7UUFFQSxNQUFNbUcsb0JBQW1CckcsU0FBUyxFQUFFQyxTQUFTO1lBQzNDLE1BQU0xSixLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDSSxHQUFHLENBQUNULFdBQVdDO1FBQ2xFO1FBRUEsTUFBTXFHLHNCQUFxQnRHLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxRQUFRO1lBQ3ZEQSxXQUFXQyxJQUFBQSw0QkFBcUIsRUFBQ0Q7WUFFakMsTUFBTTNKLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDQyxTQUFTLENBQUNpRSxLQUFLLENBQUN0RSxXQUFXQyxXQUFXQztRQUMvRTtRQUVBLE1BQU1xRyxZQUFXNUYsT0FBTyxFQUFFRSxNQUFNLEVBQUUzRixNQUFNO1lBQ3RDLE1BQU0zRSxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDa0UsR0FBRyxDQUFDdEUsU0FBU0UsU0FBUztnQkFBRTNGO1lBQU87UUFDNUU7UUFFQSxNQUFNc0wsc0JBQXFCN0YsT0FBTyxFQUFFOEYsT0FBTztZQUN6QyxNQUFNbFEsS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUN3QyxNQUFNLENBQUNvRCxLQUFLLENBQUMvRixTQUFTOEY7UUFDN0Q7UUFFQSxNQUFNRSxxQkFBb0IzRyxTQUFTLEVBQUU5RSxNQUFNO1lBQ3pDLE1BQU0zRSxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ3dHLEtBQUssQ0FBQzVHLFlBQVk7Z0JBQUU5RTtZQUFPO1FBQ3BFO1FBRUEsTUFBTTJMLG9CQUFtQjdHLFNBQVMsRUFBRUMsU0FBUyxFQUFFVyxNQUFNLEVBQUVWLFFBQVE7WUFDN0RBLFdBQVdDLElBQUFBLDRCQUFxQixFQUFDRDtZQUVqQyxNQUFNM0osS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNDLFNBQVMsQ0FBQ2MsSUFBSSxDQUFDbkIsV0FBV0MsV0FBV0MsVUFBVVU7UUFDeEY7UUFFQSxNQUFNa0csZUFBY0MsU0FBUyxFQUFFN0wsTUFBTTtZQUNuQyxNQUFNM0UsS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUNpTSxRQUFRLENBQUNXLEVBQUUsQ0FBQzBDLFlBQVk7Z0JBQUU3TDtZQUFPO1FBQ2pFO1FBRUEsTUFBTThMLHNCQUFxQkQsU0FBUyxFQUFFM1EsS0FBSyxFQUFFNkosU0FBUyxFQUFFakssT0FBTztZQUM3RCxNQUFNTyxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQ2lNLFFBQVEsQ0FBQ2xFLE9BQU8sQ0FBQ3VILFdBQVczUSxPQUFPNkosV0FBV2pLLFVBQVU7Z0JBQUVpRixjQUFjO1lBQUs7UUFDN0c7UUFFQSxNQUFNZ00sd0JBQXVCRixTQUFTLEVBQUUzUSxLQUFLO1lBQzNDLE1BQU1HLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDaU0sUUFBUSxDQUFDd0QsT0FBTyxDQUFDSCxXQUFXM1EsUUFBUTtnQkFDaEU2RSxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNa00sbUNBQWtDeEcsT0FBTyxFQUFFaUUsU0FBUyxFQUFFNUMsV0FBVyxFQUFFb0YsV0FBVztZQUNsRixPQUFPLE1BQU03USxLQUFLdUosR0FBRyxDQUNuQnZKLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUNDLFFBQVEsQ0FBQ21GLFVBQVUsQ0FBQzlRLEtBQUtOLGFBQWEsRUFBRTBLLFNBQVNpRSxZQUMxRTtnQkFDRTlMLE1BQU07b0JBQ0pzTztnQkFDRjtnQkFDQTFPLFNBQVM7b0JBQUVsQyxlQUFlLENBQUMsT0FBTyxFQUFFd0wsYUFBYTtnQkFBQztZQUNwRDtRQUVKO1FBRUEsTUFBTXNGLGlCQUFnQjNHLE9BQU8sRUFBRWtELE1BQU0sRUFBRS9LLElBQUksRUFBRW9DLE1BQU07WUFDakQsT0FBTyxNQUFNM0UsS0FBS3NKLEtBQUssQ0FBNEJ0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDUyxPQUFPLENBQUN1QyxJQUFJLENBQUNuRCxTQUFTa0QsU0FBUztnQkFBRS9LO2dCQUFNb0M7WUFBTztRQUN0SDtRQUVBLE1BQU1xTSxnQkFBZXZSLE9BQU87WUFDMUIsTUFBTTJOLFNBQVMzTixTQUFTd1IsZUFBZSxNQUFNaEYsSUFBQUEsa0JBQVcsRUFBQ3hNLFNBQVN3UixnQkFBZ0J4UixTQUFTd1I7WUFDM0YsTUFBTUMsU0FBU3pSLFNBQVMwUixlQUFlLE1BQU1sRixJQUFBQSxrQkFBVyxFQUFDeE0sU0FBUzBSLGdCQUFnQjFSLFNBQVMwUjtZQUUzRixPQUFPLE1BQU1uUixLQUFLc0osS0FBSyxDQUFjdEosS0FBS2tCLE1BQU0sQ0FBQ2tRLFdBQVcsSUFBSTtnQkFDOUQ3TyxNQUFNO29CQUNKOE8sVUFBVTVSLFFBQVE0UixRQUFRLEVBQUVDO29CQUM1QmxFO29CQUNBOEQ7Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsTUFBTUssYUFBWTlILFNBQVMsRUFBRWxILElBQUksRUFBRW9DLE1BQU07WUFDdkMsT0FBTyxNQUFNM0UsS0FBS3NKLEtBQUssQ0FBaUJ0SixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDNEQsT0FBTyxDQUFDaEUsWUFBWTtnQkFBRWxIO2dCQUFNb0M7WUFBTztRQUNsRztRQUVBLE1BQU02TSxnQ0FBK0IvSCxTQUFTLEVBQUVsSCxJQUFJLEVBQUVvQyxNQUFNO1lBQzFELE1BQU0zRSxLQUFLdUosR0FBRyxDQUFDdkosS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQytELFNBQVMsQ0FBQ25FLFdBQVdsSCxLQUFLdUwsRUFBRSxHQUFHO2dCQUFFdkw7Z0JBQU1vQztZQUFPO1FBQ3BGO1FBRUEsTUFBTThNLHNCQUFxQnJILE9BQU8sRUFBRTdILElBQUk7WUFDdEMsTUFBTXZDLEtBQUtzSixLQUFLLENBQUN0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDVixRQUFRLENBQUNPLFVBQVU7Z0JBQUU3SDtZQUFLO1FBQ2hFO1FBRUEsTUFBTW1QLFdBQVV0SCxPQUFPLEVBQUUwRCxFQUFFLEVBQUV2TCxJQUFJLEVBQUVvQyxNQUFNO1lBQ3ZDLE9BQU8sTUFBTTNFLEtBQUtzSixLQUFLLENBQWV0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDd0QsS0FBSyxDQUFDM0QsU0FBUzBELEtBQUs7Z0JBQUV2TDtnQkFBTW9DO1lBQU87UUFDOUY7UUFFQSxNQUFNZ04sc0JBQXFCN0QsRUFBRSxFQUFFdkwsSUFBSTtZQUNqQyxPQUFPLE1BQU12QyxLQUFLc0osS0FBSyxDQUFldEosS0FBS2tCLE1BQU0sQ0FBQytNLGdCQUFnQixDQUFDak8sS0FBS04sYUFBYSxFQUFFb08sS0FBSztnQkFBRXZMO1lBQUs7UUFDckc7UUFFQSxNQUFNcVAscUJBQW9CL1IsS0FBSyxFQUFFNkosU0FBUyxFQUFFbkgsSUFBSTtZQUM5QyxPQUFPLE1BQU12QyxLQUFLc0osS0FBSyxDQUFpQnRKLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUN5QyxTQUFTLENBQUNsRixPQUFPLENBQUNqSixLQUFLTixhQUFhLEVBQUVHLE9BQU82SixZQUFZO2dCQUN4SG5IO2dCQUNBc0MsT0FBT3RDLEtBQUtzQyxLQUFLO2dCQUNqQkgsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTW1OLDhCQUE2QnhELFNBQVMsRUFBRTlMLElBQUk7WUFDaEQsT0FBTyxNQUFNdkMsS0FBS3NKLEtBQUssQ0FBNEJ0SixLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDQyxRQUFRLENBQUMyQyxPQUFPLENBQUN0TyxLQUFLTixhQUFhLEVBQUUyTyxZQUFZO2dCQUFFOUw7WUFBSztRQUN0STtRQUVBLE1BQU11UCxXQUFVMUgsT0FBTyxFQUFFN0gsSUFBSSxFQUFFb0MsTUFBTTtZQUNuQyxPQUFPLE1BQU0zRSxLQUFLc0osS0FBSyxDQUFldEosS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ2lFLEtBQUssQ0FBQ3BFLFVBQVU7Z0JBQUU3SDtnQkFBTW9DO1lBQU87UUFDMUY7UUFFQSxNQUFNb04sNkJBQTRCMUQsU0FBUyxFQUFFakUsT0FBTyxFQUFFN0gsSUFBSTtZQUN4RCxPQUFPLE1BQU12QyxLQUFLc0osS0FBSyxDQUE0QnRKLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUNDLFFBQVEsQ0FBQ3BCLE1BQU0sQ0FBQ21FLEdBQUcsQ0FBQzFPLEtBQUtOLGFBQWEsRUFBRTBLLFNBQVNpRSxZQUFZO2dCQUN2STlMO1lBQ0Y7UUFDRjtRQUVBLE1BQU15UCxtQkFBa0I1SCxPQUFrQixFQUFFNkgsUUFBbUIsRUFBRXROLE1BQWU7WUFDOUUsTUFBTTNFLEtBQUtxSixJQUFJLENBQUNySixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDMkgsR0FBRyxDQUFDOUgsVUFBVTtnQkFBRTdILE1BQU07b0JBQUU0UCxPQUFPRjtnQkFBUztnQkFBR3ROO1lBQU87UUFDdkY7UUFFQSxNQUFNeU4sa0JBQWlCaEksT0FBTyxFQUFFd0UsU0FBUyxFQUFFck0sSUFBSSxFQUFFb0MsTUFBTTtZQUNyRCxPQUFPLE1BQU0zRSxLQUFLc0osS0FBSyxDQUFpQnRKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNzRSxPQUFPLENBQUN6RSxTQUFTd0UsWUFBWTtnQkFBRXJNO2dCQUFNb0M7WUFBTztRQUN6RztRQUVBLE1BQU0wTixtQkFBa0JqSSxPQUFPLEVBQUUyQixZQUFvQixFQUFFeEosSUFBeUI7WUFDOUUsT0FBTyxNQUFNdkMsS0FBS3NKLEtBQUssQ0FBa0J0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDMkIsU0FBUyxDQUFDc0MsS0FBSyxDQUFDcEUsU0FBUzJCLGVBQWU7Z0JBQUV4SjtZQUFLO1FBQzdHO1FBRUEsTUFBTStQLGFBQVk3SSxTQUFTLEVBQUVDLFNBQVMsRUFBRW5ILElBQUk7WUFDMUMsT0FBTyxNQUFNdkMsS0FBS3NKLEtBQUssQ0FBaUJ0SixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDWixPQUFPLENBQUNRLFdBQVdDLFlBQVk7Z0JBQUVuSDtnQkFBTXNDLE9BQU90QyxLQUFLc0MsS0FBSztZQUFDO1FBQ3hIO1FBRUEsTUFBTTBOLGlDQUFnQzFTLEtBQUssRUFBRTBDLElBQUk7WUFDL0MsT0FBTyxNQUFNdkMsS0FBS3NKLEtBQUssQ0FBaUJ0SixLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDeUMsU0FBUyxDQUFDeUIsUUFBUSxDQUFDNVAsS0FBS04sYUFBYSxFQUFFRyxRQUFRO2dCQUM5RzBDO2dCQUNBc0MsT0FBT3RDLEtBQUtzQyxLQUFLO2dCQUNqQkgsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTThOLG1CQUFrQnBJLE9BQU8sRUFBRTNLLE9BQU87WUFDdEMsTUFBTU8sS0FBS3NKLEtBQUssQ0FBQ3RKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNrSSxLQUFLLENBQUNySSxVQUFVO2dCQUNsRDdILE1BQU07b0JBQ0osR0FBRzlDLE9BQU87b0JBQ1ZpVCx5QkFBeUJqVCxRQUFRaVQsdUJBQXVCLEdBQ3BELElBQUk3USxLQUFLcEMsUUFBUWlULHVCQUF1QixFQUFFQyxXQUFXLEtBQ3JEbFQsUUFBUWlULHVCQUF1QjtnQkFDckM7WUFDRjtRQUNGO1FBRUEsTUFBTUUsb0JBQW1CeEksT0FBTyxFQUFFOEYsT0FBTyxFQUFFM04sSUFBSSxFQUFFb0MsTUFBTTtZQUNyRCxPQUFPLE1BQU0zRSxLQUFLc0osS0FBSyxDQUF3QnRKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUN3QyxNQUFNLENBQUNvRCxLQUFLLENBQUMvRixTQUFTOEYsVUFBVTtnQkFBRTNOO2dCQUFNb0M7WUFBTztRQUNuSDtRQUVBLE1BQU1rTyxVQUFTekksT0FBTyxFQUFFRSxNQUFNLEVBQUUvSCxJQUFJLEVBQUVvQyxNQUFNO1lBQzFDLE9BQU8sTUFBTTNFLEtBQUtzSixLQUFLLENBQWN0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDQyxLQUFLLENBQUNrRSxHQUFHLENBQUN0RSxTQUFTRSxTQUFTO2dCQUFFL0g7Z0JBQU1vQztZQUFPO1FBQ3JHO1FBRUEsTUFBTW1PLG1CQUFrQjFJLE9BQU8sRUFBRTdILElBQUksRUFBRW9DLE1BQU07WUFDM0MsT0FBTyxNQUFNM0UsS0FBS3NKLEtBQUssQ0FBZ0J0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDQyxLQUFLLENBQUNOLEdBQUcsQ0FBQ0UsVUFBVTtnQkFBRTdIO2dCQUFNb0M7WUFBTztRQUMvRjtRQUVBLE1BQU1vTyxtQkFBa0J0SixTQUFTLEVBQUV1SixLQUFLLEVBQUVyTyxNQUFlO1lBQ3ZELE9BQU8sTUFBTTNFLEtBQUtzSixLQUFLLENBQXVCdEosS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ3dHLEtBQUssQ0FBQzVHLFlBQVk7Z0JBQUVsSCxNQUFNO29CQUFFeVE7Z0JBQU07Z0JBQUdyTztZQUFPO1FBQ2pIO1FBRUEsTUFBTXNPLG9CQUFtQjdJLE9BQU8sRUFBRTNLLE9BQU87WUFDdkMsTUFBTU8sS0FBS3NKLEtBQUssQ0FBQ3RKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNrSSxLQUFLLENBQUNySSxTQUFTM0ssUUFBUTRLLE1BQU0sR0FBRztnQkFBRTlILE1BQU05QztZQUFRO1FBQ3RGO1FBRUEsTUFBTXlULGFBQVkxQyxTQUFTLEVBQUVqTyxJQUFJLEVBQUVvQyxNQUFNO1lBQ3ZDLE9BQU8sTUFBTTNFLEtBQUtzSixLQUFLLENBQWlCdEosS0FBS2tCLE1BQU0sQ0FBQ2lNLFFBQVEsQ0FBQ1csRUFBRSxDQUFDMEMsWUFBWTtnQkFBRWpPO2dCQUFNb0M7WUFBTztRQUM3RjtRQUVBLE1BQU13TyxvQkFBbUIzQyxTQUFTLEVBQUUzUSxLQUFLLEVBQUU2SixTQUFTLEVBQUVqSyxPQUFPO1lBQzNELE9BQU8sTUFBTU8sS0FBS3NKLEtBQUssQ0FBaUJ0SixLQUFLa0IsTUFBTSxDQUFDaU0sUUFBUSxDQUFDbEUsT0FBTyxDQUFDdUgsV0FBVzNRLE9BQU82SixXQUFXakssVUFBVTtnQkFDMUc4QyxNQUFNOUM7Z0JBQ05vRixPQUFPcEYsUUFBUW9GLEtBQUs7Z0JBQ3BCSCxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNME8sc0JBQXFCNUMsU0FBUyxFQUFFM1EsS0FBSyxFQUFFMEMsSUFBSTtZQUMvQyxPQUFPLE1BQU12QyxLQUFLc0osS0FBSyxDQUFpQnRKLEtBQUtrQixNQUFNLENBQUNpTSxRQUFRLENBQUN3RCxPQUFPLENBQUNILFdBQVczUSxRQUFRO2dCQUN0RjBDO2dCQUNBbUMsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTTJPLG1CQUFrQmpKLE9BQU8sRUFBRTdILElBQUksRUFBRW9DLE1BQU07WUFDM0MsT0FBTyxNQUFNM0UsS0FBS3NKLEtBQUssQ0FBdUJ0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDK0ksT0FBTyxDQUFDbEosVUFBVTtnQkFBRTdIO2dCQUFNb0M7WUFBTztRQUNwRztRQUVBLE1BQU00TyxvQkFBbUJuSixPQUFPLEVBQUU3SCxJQUFJLEVBQUVvQyxNQUFNO1lBQzVDLE9BQU8sTUFBTTNFLEtBQUtzSixLQUFLLENBQTZCdEosS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ2lKLE1BQU0sQ0FBQ3BKLFVBQVU7Z0JBQUU3SDtnQkFBTW9DO1lBQU87UUFDekc7UUFFQSxNQUFNOE8sZ0JBQWVqRCxTQUFTLEVBQUUzUSxLQUFLLEVBQUVKLE9BQU87WUFDNUMsT0FBTyxNQUFNTyxLQUFLcUosSUFBSSxDQUFpQnJKLEtBQUtrQixNQUFNLENBQUNpTSxRQUFRLENBQUN3RCxPQUFPLENBQUNILFdBQVczUSxPQUFPSixVQUFVO2dCQUM5RjhDLE1BQU05QztnQkFDTmlGLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1nUCxvQkFBbUJDLGVBQWUsRUFBRUMsZUFBZSxFQUFFalAsTUFBTTtZQUMvRCxPQUFPLE1BQU0zRSxLQUFLcUosSUFBSSxDQUF5QnJKLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNnSyxNQUFNLENBQUNGLGtCQUFrQjtnQkFDM0ZwUixNQUFNO29CQUNKdVIsa0JBQWtCRjtnQkFDcEI7Z0JBQ0FqUDtZQUNGO1FBQ0Y7UUFFQSxNQUFNb1Asa0JBQWlCM0osT0FBTztZQUM1QixPQUFPLE1BQU1wSyxLQUFLMEIsR0FBRyxDQUEyQjFCLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNjLE9BQU8sQ0FBQ3FKLE1BQU0sQ0FBQzVKO1FBQ3RGO1FBRUEsTUFBTTZKLGlDQUFnQzdKLE9BQU8sRUFBRWlFLFNBQVMsRUFBRTVPLE9BQU87WUFDL0QsTUFBTStMLGNBQWdELENBQUM7WUFFdkQsSUFBSS9MLFNBQVN5VSxhQUFhO2dCQUN4QjFJLFlBQVk5RyxZQUFZLEdBQUc7Z0JBQzNCOEcsWUFBWXJKLE9BQU8sR0FBRztvQkFDcEJsQyxlQUFlLENBQUMsT0FBTyxFQUFFUixRQUFReVUsV0FBVyxFQUFFO2dCQUNoRDtZQUNGO1lBRUEsT0FBTyxNQUFNbFUsS0FBSzBCLEdBQUcsQ0FDbkIxQixLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDQyxRQUFRLENBQUNtRixVQUFVLENBQUNyUixTQUFTQyxpQkFBaUJNLEtBQUtOLGFBQWEsRUFBRTBLLFNBQVNpRSxZQUNwRzdDO1FBRUo7UUFFQSxNQUFNMkksa0NBQWlDL0osT0FBTyxFQUFFM0ssT0FBTztZQUNyRCxNQUFNK0wsY0FBZ0QsQ0FBQztZQUV2RCxJQUFJL0wsU0FBU3lVLGFBQWE7Z0JBQ3hCMUksWUFBWTlHLFlBQVksR0FBRztnQkFDM0I4RyxZQUFZckosT0FBTyxHQUFHO29CQUNwQmxDLGVBQWUsQ0FBQyxPQUFPLEVBQUVSLFFBQVF5VSxXQUFXLEVBQUU7Z0JBQ2hEO1lBQ0Y7WUFFQSxPQUFPLE1BQU1sVSxLQUFLMEIsR0FBRyxDQUNuQjFCLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUNDLFFBQVEsQ0FBQ2tGLFdBQVcsQ0FBQ3BSLFNBQVNDLGlCQUFpQk0sS0FBS04sYUFBYSxFQUFFMEssVUFDNUZvQjtRQUVKO1FBRUEsTUFBTTRJO1lBQ0osT0FBTyxNQUFNcFUsS0FBSzBCLEdBQUcsQ0FBcUIxQixLQUFLa0IsTUFBTSxDQUFDbVQsTUFBTSxDQUFDQyxXQUFXO1FBQzFFO1FBRUEsTUFBTUMscUJBQW9CaFMsSUFBSTtZQUM1QixPQUFPLE1BQU12QyxLQUFLc0osS0FBSyxDQUFxQnRKLEtBQUtrQixNQUFNLENBQUNvVCxXQUFXLElBQUk7Z0JBQ3JFL1I7WUFDRjtRQUNGO1FBRUEsTUFBTWlTLDhCQUE2QjNVLEtBQUs7WUFDdEMsT0FBTyxNQUFNRyxLQUFLMEIsR0FBRyxDQUE4QjFCLEtBQUtrQixNQUFNLENBQUNtVCxNQUFNLENBQUNJLG9CQUFvQixJQUFJO2dCQUM1RnRTLFNBQVM7b0JBQ1BsQyxlQUFlLENBQUMsT0FBTyxFQUFFSixPQUFPO2dCQUNsQztnQkFDQTZFLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1nUSxlQUFjQyxRQUFRLEVBQUVDLFlBQVksRUFBRXJTLElBQUk7WUFDOUMsTUFBTXNTLG1CQUFtQkMsa0JBQU0sQ0FBQ0MsSUFBSSxDQUFDLEdBQUdKLFNBQVMsQ0FBQyxFQUFFQyxjQUFjO1lBRWxFLE1BQU1wSixjQUFrQztnQkFDdENqSjtnQkFDQUosU0FBUztvQkFDUCxnQkFBZ0I7b0JBQ2hCbEMsZUFBZSxDQUFDLE1BQU0sRUFBRTRVLGlCQUFpQnJRLFFBQVEsQ0FBQyxXQUFXO2dCQUMvRDtnQkFDQThELGlCQUFpQjtnQkFDakI1RCxjQUFjO1lBQ2hCO1lBRUEsSUFBSW5DLEtBQUt5UyxTQUFTLEtBQUssc0JBQXNCO2dCQUMzQ3hKLFlBQVlqSixJQUFJLENBQUMwUyxLQUFLLEdBQUcxUyxLQUFLMFMsS0FBSyxDQUFDeFAsSUFBSSxDQUFDO1lBQzNDO1lBRUEsT0FBTyxNQUFNekYsS0FBS3FKLElBQUksQ0FBNkJySixLQUFLa0IsTUFBTSxDQUFDbVQsTUFBTSxDQUFDYSxhQUFhLElBQUkxSjtRQUN6RjtRQUVBLE1BQU0ySixhQUFZUixRQUFRLEVBQUVDLFlBQVksRUFBRXJTLElBQUk7WUFDNUMsTUFBTXNTLG1CQUFtQkMsa0JBQU0sQ0FBQ0MsSUFBSSxDQUFDLEdBQUdKLFNBQVMsQ0FBQyxFQUFFQyxjQUFjO1lBRWxFLE1BQU01VSxLQUFLcUosSUFBSSxDQUFDckosS0FBS2tCLE1BQU0sQ0FBQ21ULE1BQU0sQ0FBQ2UsV0FBVyxJQUFJO2dCQUNoRDdTO2dCQUNBSixTQUFTO29CQUNQLGdCQUFnQjtvQkFDaEJsQyxlQUFlLENBQUMsTUFBTSxFQUFFNFUsaUJBQWlCclEsUUFBUSxDQUFDLFdBQVc7Z0JBQy9EO2dCQUNBRSxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNMlEsYUFBWWpMLE9BQU8sRUFBRTNLLE9BQU87WUFDaEMsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUFrQjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUMrSyxTQUFTLENBQUNsTCxTQUFTM0s7UUFDL0U7UUFFQSxNQUFNOFYsZ0JBQWVuTCxPQUFPLEVBQUVrRCxNQUFNO1lBQ2xDLE9BQU8sTUFBTXROLEtBQUswQixHQUFHLENBQTRCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ1MsT0FBTyxDQUFDdUMsSUFBSSxDQUFDbkQsU0FBU2tEO1FBQzVGO1FBRUEsTUFBTWtJLGlCQUFnQnBMLE9BQU87WUFDM0IsT0FBTyxNQUFNcEssS0FBSzBCLEdBQUcsQ0FBOEIxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDUyxPQUFPLENBQUNDLEtBQUssQ0FBQ2I7UUFDdEY7UUFFQSxNQUFNcUw7WUFDSixPQUFPLE1BQU16VixLQUFLMEIsR0FBRyxDQUF1QjFCLEtBQUtrQixNQUFNLENBQUN3VSxPQUFPO1FBQ2pFO1FBRUEsTUFBTUMsUUFBT3ZMLE9BQU8sRUFBRUMsTUFBTTtZQUMxQixPQUFPLE1BQU1ySyxLQUFLMEIsR0FBRyxDQUFhMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3FMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDekwsU0FBU0M7UUFDNUU7UUFFQSxNQUFNeUwsU0FBUTFMLE9BQU8sRUFBRTNLLE9BQU87WUFDNUIsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUFlMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3FMLE9BQU8sQ0FBQ0csSUFBSSxDQUFDM0wsU0FBUzNLO1FBQy9FO1FBRUEsTUFBTXVXLFlBQVdsSSxFQUFFO1lBQ2pCLE9BQU8sTUFBTTlOLEtBQUswQixHQUFHLENBQWlCMUIsS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQzRELE9BQU8sQ0FBQ0s7UUFDckU7UUFFQSxNQUFNbUksbUJBQWtCeE0sU0FBUztZQUMvQixPQUFPLE1BQU16SixLQUFLMEIsR0FBRyxDQUEwQjFCLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUMrQyxPQUFPLENBQUNuRDtRQUM5RTtRQUVBLE1BQU15TSxhQUFZOUwsT0FBTztZQUN2QixPQUFPLE1BQU1wSyxLQUFLMEIsR0FBRyxDQUFtQjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNWLFFBQVEsQ0FBQ087UUFDdEU7UUFFQSxNQUFNK0wsb0JBQW1CMU0sU0FBUztZQUNoQyxPQUFPLE1BQU16SixLQUFLMEIsR0FBRyxDQUFtQjFCLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNzRCxRQUFRLENBQUMxRDtRQUN4RTtRQUVBLE1BQU0yTSxjQUFhL0wsTUFBTTtZQUN2QixPQUFPLE1BQU1ySyxLQUFLcUosSUFBSSxDQUFpQnJKLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUN3TSxFQUFFLElBQUk7Z0JBQ2hFOVQsTUFBTTtvQkFBRStULGFBQWFqTTtnQkFBTztZQUM5QjtRQUNGO1FBRUEsTUFBTWtNLG1CQUFrQmhVLElBQUk7WUFDMUIsT0FBTyxNQUFNdkMsS0FBS3FKLElBQUksQ0FBaUJySixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDd00sRUFBRSxJQUFJO2dCQUNoRTlUO1lBQ0Y7UUFDRjtRQUVBLE1BQU1pVSxVQUFTcE0sT0FBTyxFQUFFcU0sT0FBTztZQUM3QixPQUFPLE1BQU16VyxLQUFLMEIsR0FBRyxDQUFlMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3dELEtBQUssQ0FBQzNELFNBQVNxTTtRQUN4RTtRQUVBLE1BQU1DLHFCQUFvQkQsT0FBTztZQUMvQixPQUFPLE1BQU16VyxLQUFLMEIsR0FBRyxDQUFlMUIsS0FBS2tCLE1BQU0sQ0FBQytNLGdCQUFnQixDQUFDak8sS0FBS04sYUFBYSxFQUFFK1c7UUFDdkY7UUFFQSxNQUFNRSxXQUFVdk0sT0FBTztZQUNyQixPQUFPLE1BQU1wSyxLQUFLMEIsR0FBRyxDQUFpQjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNhLE1BQU0sQ0FBQ2hCO1FBQ2xFO1FBRUEsTUFBTXdNO1lBQ0osT0FBTyxNQUFNNVcsS0FBSzBCLEdBQUcsQ0FBNEIxQixLQUFLa0IsTUFBTSxDQUFDb0ssaUJBQWlCLENBQUN0TCxLQUFLTixhQUFhO1FBQ25HO1FBRUEsTUFBTW1YLG9CQUFtQmhYLEtBQUssRUFBRTZKLFNBQVM7WUFDdkMsT0FBTyxNQUFNMUosS0FBSzBCLEdBQUcsQ0FBaUIxQixLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDeUMsU0FBUyxDQUFDbEYsT0FBTyxDQUFDakosS0FBS04sYUFBYSxFQUFFRyxPQUFPNkosWUFBWTtnQkFBRWhGLGNBQWM7WUFBSztRQUMvSTtRQUVBLE1BQU1vUztZQUNKLE9BQU8sTUFBTTlXLEtBQUswQixHQUFHLENBQXVCMUIsS0FBS2tCLE1BQU0sQ0FBQzZWLFVBQVU7UUFDcEU7UUFFQSxNQUFNQyw2QkFBNEIzSSxTQUFTO1lBQ3pDLE9BQU8sTUFBTXJPLEtBQUswQixHQUFHLENBQTRCMUIsS0FBS2tCLE1BQU0sQ0FBQ3dLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDMkMsT0FBTyxDQUFDdE8sS0FBS04sYUFBYSxFQUFFMk87UUFDakg7UUFFQSxNQUFNNEk7WUFDSixPQUFPLE1BQU1qWCxLQUFLMEIsR0FBRyxDQUE4QjFCLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUNDLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDM0wsS0FBS04sYUFBYTtRQUNsSDtRQUVBLE1BQU13WCxVQUFTOU0sT0FBTyxFQUFFM0ssVUFBVTtZQUFFMFgsUUFBUTtRQUFLLENBQUM7WUFDaEQsT0FBTyxNQUFNblgsS0FBSzBCLEdBQUcsQ0FBZTFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNpRSxLQUFLLENBQUNwRSxTQUFTM0ssUUFBUTBYLE1BQU07UUFDdEY7UUFFQSxNQUFNQyxXQUFVdlgsS0FBSyxFQUFFSixPQUFPO1lBQzVCLE1BQU00WCxxQkFBcUR4WCxRQUN2RDtnQkFDRXNDLFNBQVM7b0JBQ1BsQyxlQUFlLENBQUMsT0FBTyxFQUFFSixPQUFPO2dCQUNsQztnQkFDQTZFLGNBQWM7WUFDaEIsSUFDQXRDO1lBRUosT0FBTyxNQUFNcEMsS0FBSzBCLEdBQUcsQ0FBMEIxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDK00sVUFBVSxDQUFDN1gsVUFBVTRYO1FBQ3pGO1FBRUEsTUFBTUUsNEJBQTJCbEosU0FBUyxFQUFFakUsT0FBTztZQUNqRCxPQUFPLE1BQU1wSyxLQUFLMEIsR0FBRyxDQUE0QjFCLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUNDLFFBQVEsQ0FBQ3BCLE1BQU0sQ0FBQ21FLEdBQUcsQ0FBQzFPLEtBQUtOLGFBQWEsRUFBRTBLLFNBQVNpRTtRQUM3SDtRQUVBLE1BQU1tSiw2QkFBNEJwTixPQUFPO1lBQ3ZDLE9BQU8sTUFBTXBLLEtBQUswQixHQUFHLENBQThCMUIsS0FBS2tCLE1BQU0sQ0FBQ3dLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDcEIsTUFBTSxDQUFDTCxHQUFHLENBQUNsSyxLQUFLTixhQUFhLEVBQUUwSztRQUN0SDtRQUVBLE1BQU1xTixpQkFBZ0JyTixPQUFPO1lBQzNCLE9BQU8sTUFBTXBLLEtBQUswQixHQUFHLENBQXNCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ21OLE9BQU8sQ0FBQ3ROO1FBQ3hFO1FBRUEsTUFBTXVOLGtCQUFpQjVMLFlBQVk7WUFDakMsT0FBTyxNQUFNL0wsS0FBSzBCLEdBQUcsQ0FBa0IxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDMkIsU0FBUyxDQUFDL0MsSUFBSSxDQUFDNEM7UUFDM0U7UUFFQSxNQUFNNkwsbUJBQWtCeE4sT0FBTztZQUM3QixPQUFPLE1BQU1wSyxLQUFLMEIsR0FBRyxDQUFvQjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUMyQixTQUFTLENBQUNoQyxHQUFHLENBQUNFO1FBQzVFO1FBRUEsTUFBTXlOLGtCQUFpQnpOLE9BQU87WUFDNUIsT0FBTyxNQUFNcEssS0FBSzBCLEdBQUcsQ0FBbUIxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDNEMsUUFBUSxDQUFDL0M7UUFDdEU7UUFFQSxNQUFNME4saUJBQWdCMU4sT0FBTztZQUMzQixPQUFPLE1BQU1wSyxLQUFLMEIsR0FBRyxDQUF1QjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUN3TixZQUFZLENBQUMzTjtRQUM5RTtRQUVBLE1BQU00TixXQUFVN0ksVUFBVSxFQUFFMVAsT0FBTztZQUNqQyxPQUFPLE1BQU1PLEtBQUswQixHQUFHLENBQXdCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQzZFLE1BQU0sQ0FBQ0QsWUFBWTFQO1FBQ3JGO1FBRUEsTUFBTXdZLFlBQVc3TixPQUFPO1lBQ3RCLE9BQU8sTUFBTXBLLEtBQUswQixHQUFHLENBQTBCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3FDLE9BQU8sQ0FBQ3hDO1FBQzVFO1FBRUEsTUFBTThOLFlBQVd6TyxTQUFTLEVBQUVDLFNBQVM7WUFDbkMsT0FBTyxNQUFNMUosS0FBSzBCLEdBQUcsQ0FBaUIxQixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDWixPQUFPLENBQUNRLFdBQVdDO1FBQ2hGO1FBRUEsTUFBTXlPLGFBQVkxTyxTQUFTLEVBQUVoSyxPQUFPO1lBQ2xDLE9BQU8sTUFBTU8sS0FBSzBCLEdBQUcsQ0FBbUIxQixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDNEYsUUFBUSxDQUFDaEcsV0FBV2hLO1FBQ25GO1FBRUEsTUFBTTJZLGdCQUFlQyxhQUFhO1lBQ2hDLE9BQU8sTUFBTXJZLEtBQUswQixHQUFHLENBQXFCMUIsS0FBS2tCLE1BQU0sQ0FBQ29YLFdBQVcsQ0FBQ0Q7UUFDcEU7UUFFQSxNQUFNRTtZQUNKLE9BQU8sTUFBTXZZLEtBQUswQixHQUFHLENBQXVCMUIsS0FBS2tCLE1BQU0sQ0FBQ3NYLFlBQVk7UUFDdEU7UUFFQSxNQUFNQyxnQ0FBK0I1WSxLQUFLO1lBQ3hDLE9BQU8sTUFBTUcsS0FBSzBCLEdBQUcsQ0FBaUIxQixLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDeUMsU0FBUyxDQUFDeUIsUUFBUSxDQUFDNVAsS0FBS04sYUFBYSxFQUFFRyxRQUFRO2dCQUFFNkUsY0FBYztZQUFLO1FBQ3JJO1FBRUEsTUFBTWdVLG1CQUFrQmpQLFNBQVM7WUFDL0IsT0FBTyxNQUFNekosS0FBSzBCLEdBQUcsQ0FBbUIxQixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDOE8sSUFBSSxDQUFDbFA7UUFDcEU7UUFFQSxNQUFNbVAsMkJBQTBCblAsU0FBUyxFQUFFaEssT0FBTztZQUNoRCxPQUFPLE1BQU1PLEtBQUswQixHQUFHLENBQTZCMUIsS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ2MsT0FBTyxDQUFDa08sT0FBTyxDQUFDcFAsV0FBV2hLO1FBQ3BHO1FBRUEsTUFBTXFaLGlDQUFnQ3JQLFNBQVMsRUFBRWhLLE9BQU87WUFDdEQsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUE2QjFCLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNjLE9BQU8sQ0FBQ29PLE1BQU0sQ0FBQ3RQLFdBQVdoSztRQUNuRztRQUVBLE1BQU11WixlQUFjNU8sT0FBTyxFQUFFM0ssT0FBTztZQUNsQyxPQUFPLE1BQU1PLEtBQUswQixHQUFHLENBQXFCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQzBPLEtBQUssQ0FBQzdPLFNBQVMzSztRQUM5RTtRQUVBLE1BQU15WiwwQkFBeUJ6UCxTQUFTLEVBQUVoSyxPQUFPO1lBQy9DLE9BQU8sTUFBTU8sS0FBSzBCLEdBQUcsQ0FBNkIxQixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDYyxPQUFPLENBQUN3TyxNQUFNLENBQUMxUCxXQUFXaEs7UUFDbkc7UUFFQSxNQUFNMlosVUFBU2hQLE9BQU87WUFDcEIsT0FBTyxNQUFNcEssS0FBSzBCLEdBQUcsQ0FBZ0IxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDQyxLQUFLLENBQUNOLEdBQUcsQ0FBQ0U7UUFDcEU7UUFFQSxNQUFNaVAsU0FBUWpQLE9BQU8sRUFBRUUsTUFBTTtZQUMzQixPQUFPLE1BQU10SyxLQUFLMEIsR0FBRyxDQUFjMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDa0UsR0FBRyxDQUFDdEUsU0FBU0U7UUFDM0U7UUFFQSxNQUFNZ1AsbUJBQWtCbFAsT0FBTyxFQUFFOEYsT0FBTyxFQUFFelEsT0FBTztZQUMvQyxPQUFPLE1BQU1PLEtBQUswQixHQUFHLENBQXdCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3dDLE1BQU0sQ0FBQ29ELEtBQUssQ0FBQy9GLFNBQVM4RixTQUFTelEsU0FBUzhaO1FBQzFHO1FBRUEsTUFBTUMsb0JBQW1CcFAsT0FBTyxFQUFFM0ssT0FBTztZQUN2QyxPQUFPLE1BQU1PLEtBQUswQixHQUFHLENBQTBCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3dDLE1BQU0sQ0FBQ0EsTUFBTSxDQUFDM0MsU0FBUzNLLFNBQVM4WjtRQUNwRztRQUVBLE1BQU1FLHdCQUF1QnJQLE9BQU8sRUFBRThGLE9BQU8sRUFBRXpRLE9BQU87WUFDcEQsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUF1RDFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUN3QyxNQUFNLENBQUMyTSxLQUFLLENBQUN0UCxTQUFTOEYsU0FBU3pRO1FBQ2hJO1FBRUEsTUFBTWthO1lBQ0osT0FBTyxNQUFNM1osS0FBSzhXLGFBQWE7UUFDakM7UUFFQSxNQUFNOEMsa0JBQWlCblEsU0FBUztZQUM5QixPQUFPLE1BQU16SixLQUFLMEIsR0FBRyxDQUF1QjFCLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUN3RyxLQUFLLENBQUM1RztRQUN6RTtRQUVBLE1BQU1vUSxrQkFBaUJ6UCxPQUFPO1lBQzVCLE9BQU8sTUFBTXBLLEtBQUswQixHQUFHLENBQW9CMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ2tJLEtBQUssQ0FBQ3JJO1FBQ3BFO1FBRUEsTUFBTTBQLG1CQUFrQjFQLE9BQU8sRUFBRUMsTUFBTTtZQUNyQyxPQUFPLE1BQU1ySyxLQUFLMEIsR0FBRyxDQUFvQjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNrSSxLQUFLLENBQUNySSxTQUFTQztRQUM3RTtRQUVBLE1BQU0wUCxZQUFXbkwsU0FBb0I7WUFDbkMsT0FBTyxNQUFNNU8sS0FBSzBCLEdBQUcsQ0FBaUIxQixLQUFLa0IsTUFBTSxDQUFDMk4sT0FBTyxDQUFDRDtRQUM1RDtRQUVBLE1BQU1vTCxpQkFBZ0I1UCxPQUFPLEVBQUV3RSxTQUFTO1lBQ3RDLE9BQU8sTUFBTTVPLEtBQUswQixHQUFHLENBQWlCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3NFLE9BQU8sQ0FBQ3pFLFNBQVN3RTtRQUM1RTtRQUVBLE1BQU1xTCxrQkFBaUI3UCxPQUFPO1lBQzVCLE9BQU8sTUFBTXBLLEtBQUswQixHQUFHLENBQW1CMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ2dDLFFBQVEsQ0FBQ25DO1FBQ3RFO1FBRUEsTUFBTThQLGlCQUFnQnpRLFNBQVMsRUFBRVksTUFBTSxFQUFFNUssT0FBTztZQUM5QyxPQUFPLE1BQU1PLEtBQUswQixHQUFHLENBQXNCMUIsS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ2MsT0FBTyxDQUFDd1AsT0FBTyxDQUFDMVEsV0FBV1ksUUFBUTVLO1FBQ3JHO1FBRUEsTUFBTTJhLGtCQUFpQjNRLFNBQVMsRUFBRWhLLE9BQU87WUFDdkMsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUF3QjFCLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNjLE9BQU8sQ0FBQ2lMLE9BQU8sQ0FBQ25NLFdBQVdoSztRQUMvRjtRQUVBLE1BQU00YSxjQUFhNVEsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsRUFBRWxLLE9BQU87WUFDeEQsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUFnQjFCLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNDLFNBQVMsQ0FBQ2IsT0FBTyxDQUFDUSxXQUFXQyxXQUFXQyxVQUFVbEs7UUFDOUc7UUFFQSxNQUFNMGEsU0FBUXJNLEVBQUU7WUFDZCxPQUFPLE1BQU05TixLQUFLMEIsR0FBRyxDQUFjMUIsS0FBS2tCLE1BQU0sQ0FBQzBKLElBQUksQ0FBQ2tEO1FBQ3REO1FBRUEsTUFBTXdNLGdCQUFlemEsS0FBSztZQUN4QixPQUFPLE1BQU1HLEtBQUswQixHQUFHLENBQWMxQixLQUFLa0IsTUFBTSxDQUFDa1EsV0FBVyxJQUFJO2dCQUM1RGpQLFNBQVM7b0JBQ1BsQyxlQUFlLENBQUMsT0FBTyxFQUFFSixPQUFPO2dCQUNsQztnQkFDQTZFLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU02VixvQkFBbUIxYSxLQUFLO1lBQzVCLE9BQU8sTUFBTUcsS0FBSzBCLEdBQUcsQ0FBc0IxQixLQUFLa0IsTUFBTSxDQUFDbVQsTUFBTSxDQUFDbUcsV0FBVyxJQUFJO2dCQUMzRXJZLFNBQVM7b0JBQ1BsQyxlQUFlLENBQUMsT0FBTyxFQUFFSixPQUFPO2dCQUNsQztnQkFDQTZFLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU0rVixrQ0FBaUM1YSxLQUFLLEVBQUVILGFBQWE7WUFDekQsT0FBTyxNQUFNTSxLQUFLMEIsR0FBRyxDQUFtQzFCLEtBQUtrQixNQUFNLENBQUNtVCxNQUFNLENBQUNxRyxlQUFlLENBQUNoYixnQkFBZ0I7Z0JBQ3pHeUMsU0FBUztvQkFDUGxDLGVBQWUsQ0FBQyxPQUFPLEVBQUVKLE9BQU87Z0JBQ2xDO2dCQUNBNkUsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTWlXLGNBQWF2USxPQUFPO1lBQ3hCLE9BQU8sTUFBTXBLLEtBQUswQixHQUFHLENBQW1CMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3FRLE1BQU0sQ0FBQ3hRO1FBQ3BFO1FBRUEsTUFBTXlRLGlCQUFnQnpRLE9BQU87WUFDM0IsT0FBTyxNQUFNcEssS0FBSzBCLEdBQUcsQ0FBdUIxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDbUwsT0FBTyxDQUFDdEw7UUFDekU7UUFFQSxNQUFNMFEsWUFBV3RLLFNBQVM7WUFDeEIsT0FBTyxNQUFNeFEsS0FBSzBCLEdBQUcsQ0FBaUIxQixLQUFLa0IsTUFBTSxDQUFDaU0sUUFBUSxDQUFDVyxFQUFFLENBQUMwQztRQUNoRTtRQUVBLE1BQU11SyxtQkFBa0J2SyxTQUFTLEVBQUUzUSxLQUFLLEVBQUU2SixTQUFTLEVBQUVqSyxPQUFPO1lBQzFELE9BQU8sTUFBTU8sS0FBSzBCLEdBQUcsQ0FBaUIxQixLQUFLa0IsTUFBTSxDQUFDaU0sUUFBUSxDQUFDbEUsT0FBTyxDQUFDdUgsV0FBVzNRLE9BQU82SixXQUFXakssVUFBVTtnQkFDeEdpRixjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNc1cscUJBQW9CeEssU0FBUyxFQUFFM1EsS0FBSztZQUN4QyxPQUFPLE1BQU1HLEtBQUswQixHQUFHLENBQWlCMUIsS0FBS2tCLE1BQU0sQ0FBQ2lNLFFBQVEsQ0FBQ3dELE9BQU8sQ0FBQ0gsV0FBVzNRLFFBQVE7Z0JBQ3BGNkUsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTXVXLGtCQUFpQjdRLE9BQU87WUFDNUIsT0FBTyxNQUFNcEssS0FBSzBCLEdBQUcsQ0FBdUIxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDK0ksT0FBTyxDQUFDbEo7UUFDekU7UUFFQSxNQUFNOFEsV0FBVTlRLE9BQU87WUFDckIsT0FBTyxNQUFNcEssS0FBSzBCLEdBQUcsQ0FBcUIxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDNFEsVUFBVSxDQUFDL1E7UUFDMUU7UUFFQSxNQUFNZ1IsbUJBQWtCaFIsT0FBTztZQUM3QixPQUFPLE1BQU1wSyxLQUFLMEIsR0FBRyxDQUE2QjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNpSixNQUFNLENBQUNwSjtRQUM5RTtRQUVBLE1BQU1pUixZQUFXNVIsU0FBUztZQUN4QixNQUFNekosS0FBS3VKLEdBQUcsQ0FBQ3ZKLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNjLE9BQU8sQ0FBQzJRLEVBQUUsQ0FBQzdSO1FBQ2pEO1FBRUEsTUFBTThSLFlBQVduUixPQUFPO1lBQ3RCLE1BQU1wSyxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ2lSLEtBQUssQ0FBQ3BSO1FBQzdDO1FBRUEsTUFBTXFSLGFBQVloUyxTQUFTO1lBQ3pCLE1BQU16SixLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ2MsT0FBTyxDQUFDMlEsRUFBRSxDQUFDN1I7UUFDcEQ7UUFFQSxNQUFNaVMsZ0JBQWVqUyxTQUFTLEVBQUVDLFNBQVM7WUFDdkMsT0FBTyxNQUFNMUosS0FBS3FKLElBQUksQ0FBaUJySixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDOFIsU0FBUyxDQUFDbFMsV0FBV0M7UUFDbkY7UUFFQSxNQUFNa1MsWUFBV3hSLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEVBQUUzRixNQUFNO1lBQzlDLE1BQU0zRSxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUNMLFNBQVNDLFFBQVFDLFNBQVM7Z0JBQUUzRjtZQUFPO1FBQ3ZGO1FBRUEsTUFBTWtYLG9CQUFtQnBTLFNBQVMsRUFBRVksTUFBTTtZQUN4QyxNQUFNckssS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUNjLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDbkIsV0FBV1k7UUFDakU7UUFFQSxNQUFNeVIsbUJBQWtCclMsU0FBUyxFQUFFWSxNQUFNO1lBQ3ZDLE1BQU1ySyxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ2lCLFdBQVcsQ0FBQ3JCLFdBQVdZO1FBQ2hFO1FBRUEsTUFBTTBSLHFCQUFvQmxjLEtBQUssRUFBRUosT0FBTztZQUN0QyxPQUFPLE1BQU1PLEtBQUtxSixJQUFJLENBQUNySixLQUFLa0IsTUFBTSxDQUFDaU0sUUFBUSxDQUFDd0QsT0FBTyxDQUFDM1EsS0FBS04sYUFBYSxFQUFFRyxRQUFRO2dCQUM5RTBDLE1BQU05QztnQkFDTm9GLE9BQU9wRixRQUFRb0YsS0FBSztnQkFDcEJILGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1zWCx5QkFBd0JDLGFBQWEsRUFBRXBjLEtBQUssRUFBRUosT0FBTyxFQUFFeWMsTUFBTTtZQUNqRSxPQUFPLE1BQU1sYyxLQUFLcUosSUFBSSxDQUE0Q3JKLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUN5QyxTQUFTLENBQUNnTyxRQUFRLENBQUNGLGVBQWVwYyxPQUFPcWMsU0FBUztnQkFDM0kzWixNQUFNOUM7Z0JBQ05vRixPQUFPcEYsUUFBUXFKLElBQUksRUFBRWpFO2dCQUNyQnlELGlCQUFpQjtnQkFDakI1RCxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNMFgsYUFBWTNTLFNBQVMsRUFBRWxILElBQUk7WUFDL0IsT0FBTyxNQUFNdkMsS0FBS3FKLElBQUksQ0FBaUJySixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDNEYsUUFBUSxDQUFDaEcsWUFBWTtnQkFBRWxIO2dCQUFNc0MsT0FBT3RDLEtBQUtzQyxLQUFLO1lBQUM7UUFDN0c7UUFFQSxNQUFNd1gsd0JBQXVCNVMsU0FBUyxFQUFFQyxTQUFTLEVBQUVuSCxJQUFJLEVBQUVvQyxNQUFNO1lBQzdELE9BQU8sTUFBTTNFLEtBQUtxSixJQUFJLENBQWlCckosS0FBS2tCLE1BQU0sQ0FBQzJJLFFBQVEsQ0FBQ2MsT0FBTyxDQUFDMUIsT0FBTyxDQUFDUSxXQUFXQyxZQUFZO2dCQUFFbkg7Z0JBQU1vQztZQUFPO1FBQ3BIO1FBRUEsTUFBTTJYLDJCQUEwQjdTLFNBQVMsRUFBRWxILElBQUksRUFBRW9DLE1BQU07WUFDckQsT0FBTyxNQUFNM0UsS0FBS3FKLElBQUksQ0FBaUJySixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDYyxPQUFPLENBQUNULEdBQUcsQ0FBQ1QsWUFBWTtnQkFBRWxIO2dCQUFNb0M7WUFBTztRQUNyRztRQUVBLE1BQU00WCxxQkFBb0I5UyxTQUFTLEVBQUVDLFNBQVMsRUFBRThTLFFBQVEsRUFBRS9jLE9BQU87WUFDL0QsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUFnQzFCLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUM0UyxLQUFLLENBQUNDLEtBQUssQ0FBQ2pULFdBQVdDLFdBQVc4UyxVQUFVL2M7UUFDeEg7UUFFQSxNQUFNa2QsU0FBUWxULFNBQVMsRUFBRUMsU0FBUztZQUNoQyxPQUFPLE1BQU0xSixLQUFLcUosSUFBSSxDQUFpQnJKLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUM0UyxLQUFLLENBQUNHLE1BQU0sQ0FBQ25ULFdBQVdDO1FBQ3RGO1FBRUEsTUFBTW1ULG1CQUFrQnpTLE9BQU87WUFDN0IsT0FBTyxNQUFNcEssS0FBS3VKLEdBQUcsQ0FBa0J2SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDMkIsU0FBUyxDQUFDaEMsR0FBRyxDQUFDRTtRQUMxRTtRQUVBLE1BQU0wUyxXQUFVMVMsT0FBTyxFQUFFQyxNQUFNLEVBQUU5SCxJQUFJLEVBQUVvQyxNQUFNO1lBQzNDLE1BQU0zRSxLQUFLdUosR0FBRyxDQUFPdkosS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3FMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDekwsU0FBU0MsU0FBUztnQkFBRTlIO2dCQUFNb0M7WUFBTztRQUN2RjtRQUVBLE1BQU1vWSxnQkFBZTNTLE9BQU8sRUFBRTNLLE9BQU8sRUFBRWtGLE1BQU07WUFDM0MsT0FBTyxNQUFNM0UsS0FBS3FKLElBQUksQ0FBaUJySixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDcUwsT0FBTyxDQUFDb0gsT0FBTyxDQUFDNVMsVUFBVTtnQkFBRTdILE1BQU05QztnQkFBU2tGO1lBQU87UUFDOUc7UUFFQSxNQUFNc1ksZUFBYzdTLE9BQU8sRUFBRTdILElBQUksRUFBRW9DLE1BQU07WUFDdkMsT0FBTyxNQUFNM0UsS0FBS3NKLEtBQUssQ0FBZ0J0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDcUwsT0FBTyxDQUFDN0wsR0FBRyxDQUFDSyxVQUFVO2dCQUFFN0g7Z0JBQU1vQztZQUFPO1FBQ2pHO1FBRUEsTUFBTXVZLFlBQVc5UyxPQUFPLEVBQUVDLE1BQU0sRUFBRTlILElBQUksRUFBRW9DLE1BQU07WUFDNUMsT0FBTyxNQUFNM0UsS0FBS3NKLEtBQUssQ0FBd0J0SixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDcUwsT0FBTyxDQUFDbkwsTUFBTSxDQUFDTCxTQUFTQyxTQUFTO2dCQUFFOUg7Z0JBQU1vQztZQUFPO1FBQ3BIO1FBRUEsTUFBTXdZLFdBQVUvUyxPQUFPLEVBQUVDLE1BQU07WUFDN0IsT0FBTyxNQUFNckssS0FBSzBCLEdBQUcsQ0FBd0IxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDcUwsT0FBTyxDQUFDbkwsTUFBTSxDQUFDTCxTQUFTQztRQUMxRjtRQUVBLE1BQU0rUyxrQkFBaUJoVCxPQUFPLEVBQUV2SyxLQUFLO1lBQ25DLE9BQU8sTUFBTUcsS0FBSzBCLEdBQUcsQ0FBd0IxQixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDcUwsT0FBTyxDQUFDeUgsYUFBYSxDQUFDalQsVUFBVTtnQkFDOUZqSSxTQUFTO29CQUNQbEMsZUFBZSxDQUFDLE9BQU8sRUFBRUosT0FBTztnQkFDbEM7Z0JBQ0E2RSxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNNFksWUFBV2xULE9BQU8sRUFBRTNLLE9BQU87WUFDL0IsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUEwQjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNxTCxPQUFPLENBQUNBLE9BQU8sQ0FBQ3hMLFNBQVMzSztRQUM3RjtRQUVBLE1BQU04ZCxnQ0FBK0I3ZCxhQUFhLEVBQUU4ZCxVQUFVO1lBQzVELE9BQU8sTUFBTXhkLEtBQUswQixHQUFHLENBQTBCMUIsS0FBS2tCLE1BQU0sQ0FBQ3VjLDJCQUEyQixDQUFDL2QsZUFBZThkO1FBQ3hHO1FBRUEsTUFBTUUsWUFBV3RULE9BQU8sRUFBRUMsTUFBTSxFQUFFMUYsTUFBTTtZQUN0QyxNQUFNM0UsS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNxTCxPQUFPLENBQUNuTCxNQUFNLENBQUNMLFNBQVNDLFNBQVM7Z0JBQ3BFMUY7WUFDRjtRQUNGO1FBRUEsTUFBTWdaLFlBQVdsVSxTQUFTLEVBQUVDLFNBQVMsRUFBRS9FLE1BQU07WUFDM0MsTUFBTTNFLEtBQUt1SixHQUFHLENBQUN2SixLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDK1QsR0FBRyxDQUFDblUsV0FBV0MsWUFBWTtnQkFBRS9FO1lBQU87UUFDMUU7UUFFQSxNQUFNa1osY0FBYXpULE9BQU8sRUFBRTdILElBQUksRUFBRW9DLE1BQU07WUFDdEMsT0FBTyxNQUFNM0UsS0FBS3FKLElBQUksQ0FBNEJySixLQUFLa0IsTUFBTSxDQUFDcUosTUFBTSxDQUFDcUwsT0FBTyxDQUFDcUQsS0FBSyxDQUFDN08sVUFBVTtnQkFBRTdIO2dCQUFNb0M7WUFBTztRQUM5RztRQUVBLE1BQU1tWixlQUFjMVQsT0FBTyxFQUFFMlQsS0FBSyxFQUFFdGUsT0FBTztZQUN6QyxPQUFPLE1BQU1PLEtBQUswQixHQUFHLENBQTBCMUIsS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQ3FMLE9BQU8sQ0FBQ29JLE1BQU0sQ0FBQzVULFNBQVMyVCxPQUFPdGU7UUFDbkc7UUFFQSxNQUFNd2Usb0JBQW1CN1QsT0FBTztZQUM5QixPQUFPLE1BQU1wSyxLQUFLMEIsR0FBRyxDQUF5QjFCLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUMyVCxVQUFVLENBQUM5VDtRQUM5RTtRQUVBLE1BQU0rVCxxQkFBb0IvVCxPQUFPLEVBQUUzSyxPQUFPLEVBQUVrRixNQUFNO1lBQ2hELE9BQU8sTUFBTTNFLEtBQUt1SixHQUFHLENBQXlCdkosS0FBS2tCLE1BQU0sQ0FBQ3FKLE1BQU0sQ0FBQzJULFVBQVUsQ0FBQzlULFVBQVU7Z0JBQ3BGN0gsTUFBTTlDO2dCQUNOa0Y7WUFDRjtRQUNGO1FBRUEsTUFBTXlaLDRCQUEyQmhVLE9BQU8sRUFBRTNLLE9BQU87WUFDL0MsT0FBTyxNQUFNTyxLQUFLdUosR0FBRyxDQUF1QnZKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUM4VCxlQUFlLENBQUNqVSxVQUFVO2dCQUFFN0gsTUFBTTlDO1lBQVE7UUFDM0c7UUFFQSxNQUFNNmUsYUFBWWxVLE9BQU8sRUFBRUMsTUFBTSxFQUFFMUYsTUFBTTtZQUN2QyxNQUFNM0UsS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNxTCxPQUFPLENBQUNDLEdBQUcsQ0FBQ3pMLFNBQVNDLFNBQVM7Z0JBQUUxRjtZQUFPO1FBQzlFO1FBRUEsTUFBTTRaLGNBQWE5VSxTQUFTLEVBQUVDLFNBQVMsRUFBRS9FLE1BQU07WUFDN0MsTUFBTTNFLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDMkksUUFBUSxDQUFDK1QsR0FBRyxDQUFDblUsV0FBV0MsWUFBWTtnQkFBRS9FO1lBQU87UUFDN0U7UUFFQSxNQUFNNlosd0JBQXVCL1UsU0FBUztZQUNwQyxNQUFNekosS0FBS3FKLElBQUksQ0FBQ3JKLEtBQUtrQixNQUFNLENBQUMySSxRQUFRLENBQUM0VSxNQUFNLENBQUNoVjtRQUM5QztRQUVBLE1BQU1pVixpQ0FBZ0NuYyxJQUFJLEVBQUU5QyxPQUFPO1lBQ2pELE1BQU0rTCxjQUFrQztnQkFBRWpKO1lBQUs7WUFFL0MsSUFBSTlDLFNBQVNnTSxhQUFhO2dCQUN4QkQsWUFBWTlHLFlBQVksR0FBRztnQkFDM0I4RyxZQUFZckosT0FBTyxHQUFHO29CQUNwQmxDLGVBQWUsQ0FBQyxPQUFPLEVBQUVSLFFBQVFnTSxXQUFXLEVBQUU7Z0JBQ2hEO1lBQ0Y7WUFFQSxPQUFPLE1BQU16TCxLQUFLdUosR0FBRyxDQUE4QnZKLEtBQUtrQixNQUFNLENBQUN3SyxZQUFZLENBQUNDLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDM0wsS0FBS04sYUFBYSxHQUFHOEw7UUFDckg7UUFFQSxNQUFNbVQsZ0NBQStCdlUsT0FBTyxFQUFFN0gsSUFBSSxFQUFFOUMsT0FBTztZQUN6RCxNQUFNK0wsY0FBa0M7Z0JBQUVqSjtZQUFLO1lBRS9DLElBQUk5QyxTQUFTZ00sYUFBYTtnQkFDeEJELFlBQVk5RyxZQUFZLEdBQUc7Z0JBQzNCOEcsWUFBWXJKLE9BQU8sR0FBRztvQkFDcEJsQyxlQUFlLENBQUMsT0FBTyxFQUFFUixRQUFRZ00sV0FBVyxFQUFFO2dCQUNoRDtZQUNGO1lBRUEsT0FBTyxNQUFNekwsS0FBS3VKLEdBQUcsQ0FBOEJ2SixLQUFLa0IsTUFBTSxDQUFDd0ssWUFBWSxDQUFDQyxRQUFRLENBQUNwQixNQUFNLENBQUNMLEdBQUcsQ0FBQ2xLLEtBQUtOLGFBQWEsRUFBRTBLLFVBQVVvQjtRQUNoSTtRQUVBLE1BQU1vVCxtQ0FBa0MvZSxLQUFLLEVBQUVILGFBQWEsRUFBRTZDLElBQUk7WUFDaEUsT0FBTyxNQUFNdkMsS0FBS3VKLEdBQUcsQ0FBbUN2SixLQUFLa0IsTUFBTSxDQUFDbVQsTUFBTSxDQUFDcUcsZUFBZSxDQUFDaGIsZ0JBQWdCO2dCQUN6RzZDO2dCQUNBSixTQUFTO29CQUNQbEMsZUFBZSxDQUFDLE9BQU8sRUFBRUosT0FBTztnQkFDbEM7Z0JBQ0E2RSxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNbWEsZ0JBQWV6VSxPQUFPLEVBQUVDLE1BQU0sRUFBRTlILElBQUk7WUFDeEMsT0FBTyxNQUFNdkMsS0FBS3VKLEdBQUcsQ0FBQ3ZKLEtBQUtrQixNQUFNLENBQUNxSixNQUFNLENBQUNxTCxPQUFPLENBQUNuTCxNQUFNLENBQUNMLFNBQVNDLFNBQVM7Z0JBQ3hFOUg7WUFDRjtRQUNGO1FBRUEsTUFBTXVjLHVCQUFzQnBmLGFBQWEsRUFBRTZDLElBQUk7WUFDN0MsT0FBTyxNQUFNdkMsS0FBS3FKLElBQUksQ0FBcUJySixLQUFLa0IsTUFBTSxDQUFDNmQsWUFBWSxDQUFDQyxZQUFZLENBQUN0ZixnQkFBZ0I7Z0JBQy9GNkM7WUFDRjtRQUNGO1FBRUEsTUFBTTBjLGtCQUFpQnZmLGFBQWEsRUFBRUQsT0FBTztZQUMzQyxPQUFPLE1BQU1PLEtBQUswQixHQUFHLENBQXVCMUIsS0FBS2tCLE1BQU0sQ0FBQzZkLFlBQVksQ0FBQ0MsWUFBWSxDQUFDdGYsZUFBZUQ7UUFDbkc7UUFFQSxNQUFNeWYsZ0JBQWV4ZixhQUFhLEVBQUV5ZixhQUFhO1lBQy9DLE9BQU8sTUFBTW5mLEtBQUswQixHQUFHLENBQXFCMUIsS0FBS2tCLE1BQU0sQ0FBQzZkLFlBQVksQ0FBQ0ssV0FBVyxDQUFDMWYsZUFBZXlmO1FBQ2hHO1FBRUEsTUFBTUUsdUJBQXNCM2YsYUFBYSxFQUFFeWYsYUFBYTtZQUN0RCxNQUFNbmYsS0FBSzhDLE1BQU0sQ0FBQzlDLEtBQUtrQixNQUFNLENBQUM2ZCxZQUFZLENBQUNLLFdBQVcsQ0FBQzFmLGVBQWV5ZjtRQUN4RTtRQUVBLE1BQU1HLG9CQUFtQjVmLGFBQWEsRUFBRXlmLGFBQWE7WUFDbkQsTUFBTW5mLEtBQUtxSixJQUFJLENBQUNySixLQUFLa0IsTUFBTSxDQUFDNmQsWUFBWSxDQUFDTyxrQkFBa0IsQ0FBQzVmLGVBQWV5ZjtRQUM3RTtRQUVBLE1BQU1JLFVBQVM3ZixhQUFhO1lBQzFCLE9BQU8sTUFBTU0sS0FBSzBCLEdBQUcsQ0FBZTFCLEtBQUtrQixNQUFNLENBQUM2ZCxZQUFZLENBQUNTLElBQUksQ0FBQzlmO1FBQ3BFO1FBRUEsTUFBTStmLG1CQUFrQkMsS0FBSyxFQUFFamdCLE9BQU87WUFDcEMsT0FBTyxNQUFNTyxLQUFLMEIsR0FBRyxDQUF3QjFCLEtBQUtrQixNQUFNLENBQUM2ZCxZQUFZLENBQUNZLGFBQWEsQ0FBQ0QsT0FBT2pnQjtRQUM3RjtRQUVBLE1BQU1tZ0IsaUJBQWdCRixLQUFLLEVBQUVHLGNBQWM7WUFDekMsT0FBTyxNQUFNN2YsS0FBSzBCLEdBQUcsQ0FBc0IxQixLQUFLa0IsTUFBTSxDQUFDNmQsWUFBWSxDQUFDZSxZQUFZLENBQUNKLE9BQU9HO1FBQzFGO1FBRUEsTUFBTUUscUJBQW9CdFcsU0FBUyxFQUFFaEssT0FBTztZQUMxQyxNQUFNTyxLQUFLcUosSUFBSSxDQUFDckosS0FBS2tCLE1BQU0sQ0FBQzhlLFVBQVUsQ0FBQ0MsU0FBUyxDQUFDeFcsWUFBWTtnQkFDM0RsSCxNQUFNOUM7WUFDUjtRQUNGO1FBRUEsTUFBTXlnQjtZQUNKLE9BQU8sTUFBTWxnQixLQUFLMEIsR0FBRyxDQUEyQjFCLEtBQUtrQixNQUFNLENBQUM4ZSxVQUFVLENBQUNHLFdBQVc7UUFDcEY7UUFFQSxNQUFNQywyQkFBMEJoVyxPQUFPO1lBQ3JDLE9BQU8sTUFBTXBLLEtBQUswQixHQUFHLENBQXNDMUIsS0FBS2tCLE1BQU0sQ0FBQzhlLFVBQVUsQ0FBQ0ssV0FBVyxDQUFDalc7UUFDaEc7UUFFQSxNQUFNa1cseUJBQXdCbFcsT0FBTyxFQUFFbVcsT0FBTztZQUM1QyxPQUFPLE1BQU12Z0IsS0FBSzBCLEdBQUcsQ0FBeUIxQixLQUFLa0IsTUFBTSxDQUFDOGUsVUFBVSxDQUFDUSxVQUFVLENBQUNwVyxTQUFTbVc7UUFDM0Y7UUFFQSxNQUFNRSw0QkFBMkJyVyxPQUFPLEVBQUUzSyxPQUFPLEVBQUVrRixNQUFNO1lBQ3ZELE9BQU8sTUFBTTNFLEtBQUtxSixJQUFJLENBQXlCckosS0FBS2tCLE1BQU0sQ0FBQzhlLFVBQVUsQ0FBQ0ssV0FBVyxDQUFDalcsVUFBVTtnQkFDMUY3SCxNQUFNOUM7Z0JBQ05rRjtZQUNGO1FBQ0Y7UUFFQSxNQUFNK2IsNEJBQTJCdFcsT0FBTyxFQUFFbVcsT0FBTyxFQUFFOWdCLE9BQU8sRUFBRWtGLE1BQU07WUFDaEUsT0FBTyxNQUFNM0UsS0FBS3FKLElBQUksQ0FBeUJySixLQUFLa0IsTUFBTSxDQUFDOGUsVUFBVSxDQUFDUSxVQUFVLENBQUNwVyxTQUFTbVcsVUFBVTtnQkFDbEdoZSxNQUFNOUM7Z0JBQ05rRjtZQUNGO1FBQ0Y7UUFFQSxNQUFNZ2MsNEJBQTJCdlcsT0FBTyxFQUFFbVcsT0FBTyxFQUFFNWIsTUFBTTtZQUN2RCxPQUFPLE1BQU0zRSxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQzhlLFVBQVUsQ0FBQ1EsVUFBVSxDQUFDcFcsU0FBU21XLFVBQVU7Z0JBQzVFNWI7WUFDRjtRQUNGO1FBRUEsTUFBTWljLCtDQUE4Q2xoQixhQUFhO1lBQy9ELE9BQU8sTUFBTU0sS0FBSzBCLEdBQUcsQ0FBNkMxQixLQUFLa0IsTUFBTSxDQUFDMmYsaUNBQWlDLENBQUNuaEI7UUFDbEg7UUFFQSxNQUFNb2hCLGlEQUFnRHBoQixhQUFhLEVBQUVELE9BQU87WUFDMUUsT0FBTyxNQUFNTyxLQUFLdUosR0FBRyxDQUE2Q3ZKLEtBQUtrQixNQUFNLENBQUMyZixpQ0FBaUMsQ0FBQ25oQixnQkFBZ0I7Z0JBQzlINkMsTUFBTTlDO1lBQ1I7UUFDRjtRQUVBLE1BQU1zaEIsYUFBWXRoQixPQUFPO1lBQ3ZCLE9BQU8sTUFBTU8sS0FBS3FKLElBQUksQ0FBZXJKLEtBQUtrQixNQUFNLENBQUM4ZixLQUFLLENBQUNDLE1BQU0sSUFBSTtnQkFDL0QxZSxNQUFNOUM7WUFDUjtRQUNGO1FBRUEsTUFBTXloQixVQUFTQyxPQUFPO1lBQ3BCLE9BQU8sTUFBTW5oQixLQUFLMEIsR0FBRyxDQUFlMUIsS0FBS2tCLE1BQU0sQ0FBQzhmLEtBQUssQ0FBQ0EsS0FBSyxDQUFDRztRQUM5RDtRQUVBLE1BQU1DLGFBQVlELE9BQU8sRUFBRTFoQixPQUFPO1lBQ2hDLE9BQU8sTUFBTU8sS0FBS3NKLEtBQUssQ0FBZXRKLEtBQUtrQixNQUFNLENBQUM4ZixLQUFLLENBQUNBLEtBQUssQ0FBQ0csVUFBVTtnQkFDdEU1ZSxNQUFNOUM7WUFDUjtRQUNGO1FBRUEsTUFBTTRoQixhQUFZRixPQUFPO1lBQ3ZCLE9BQU8sTUFBTW5oQixLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQzhmLEtBQUssQ0FBQ0EsS0FBSyxDQUFDRztRQUNuRDtRQUVBLE1BQU1HLGtCQUFpQkgsT0FBTyxFQUFFOVcsTUFBTSxFQUFFNUssT0FBTztZQUM3QyxPQUFPLE1BQU1PLEtBQUt1SixHQUFHLENBQXFCdkosS0FBS2tCLE1BQU0sQ0FBQzhmLEtBQUssQ0FBQ3ZXLE1BQU0sQ0FBQzBXLFNBQVM5VyxTQUFTO2dCQUNuRjlILE1BQU05QztZQUNSO1FBQ0Y7UUFFQSxNQUFNOGhCLHVCQUFzQkosT0FBTyxFQUFFOVcsTUFBTTtZQUN6QyxPQUFPLE1BQU1ySyxLQUFLOEMsTUFBTSxDQUFDOUMsS0FBS2tCLE1BQU0sQ0FBQzhmLEtBQUssQ0FBQ3ZXLE1BQU0sQ0FBQzBXLFNBQVM5VztRQUM3RDtRQUVBLE1BQU1tWCxZQUFXTCxPQUFPLEVBQUUxVixXQUFXO1lBQ25DLE9BQU8sTUFBTXpMLEtBQUs4QyxNQUFNLENBQUM5QyxLQUFLa0IsTUFBTSxDQUFDOGYsS0FBSyxDQUFDeEYsS0FBSyxDQUFDMkYsVUFBVTtnQkFDekRoZixTQUFTO29CQUNQbEMsZUFBZSxDQUFDLE9BQU8sRUFBRXdMLGFBQWE7Z0JBQ3hDO2dCQUNBL0csY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTStjLG9CQUFtQk4sT0FBTyxFQUFFMVYsV0FBVyxFQUFFaE0sT0FBTztZQUNwRCxPQUFPLE1BQU1PLEtBQUtzSixLQUFLLENBQWV0SixLQUFLa0IsTUFBTSxDQUFDOGYsS0FBSyxDQUFDVSxJQUFJLENBQUNQLFVBQVU7Z0JBQ3JFNWUsTUFBTTlDO2dCQUNOMEMsU0FBUztvQkFDUGxDLGVBQWUsQ0FBQyxPQUFPLEVBQUV3TCxhQUFhO2dCQUN4QztnQkFDQS9HLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1pZCxzQkFBcUJSLE9BQU8sRUFBRTFWLFdBQVc7WUFDN0MsT0FBTyxNQUFNekwsS0FBS3NKLEtBQUssQ0FBZXRKLEtBQUtrQixNQUFNLENBQUM4ZixLQUFLLENBQUNVLElBQUksQ0FBQ1AsVUFBVTtnQkFDckVoZixTQUFTO29CQUNQbEMsZUFBZSxDQUFDLE9BQU8sRUFBRXdMLGFBQWE7Z0JBQ3hDO2dCQUNBL0csY0FBYztZQUNoQjtRQUNGO1FBRUFrZCxpQkFBZ0JDLE9BQWdCO1lBQzlCLE1BQU1DLFlBQVlELFVBQVUsQ0FBQ0UsSUFBV0EsSUFBSTNZLGVBQVE7WUFFcERwSixLQUFLMEIsR0FBRyxHQUFHLE9BQU9ILEtBQUs5QjtnQkFDckIsT0FBT3FpQixVQUFVLE1BQU05aEIsS0FBS3dJLFdBQVcsQ0FBQyxPQUFPakgsS0FBSzlCO1lBQ3REO1lBRUFPLEtBQUtxSixJQUFJLEdBQUcsT0FBTzlILEtBQWE5QjtnQkFDOUIsT0FBT3FpQixVQUFVLE1BQU05aEIsS0FBS3dJLFdBQVcsQ0FBQyxRQUFRakgsS0FBSzlCO1lBQ3ZEO1lBRUFPLEtBQUs4QyxNQUFNLEdBQUcsT0FBT3ZCLEtBQWE5QjtnQkFDaENxaUIsVUFBVSxNQUFNOWhCLEtBQUt3SSxXQUFXLENBQUMsVUFBVWpILEtBQUs5QjtZQUNsRDtZQUVBTyxLQUFLc0osS0FBSyxHQUFHLE9BQU8vSCxLQUFhOUI7Z0JBQy9CLE9BQU9xaUIsVUFBVSxNQUFNOWhCLEtBQUt3SSxXQUFXLENBQUMsU0FBU2pILEtBQUs5QjtZQUN4RDtZQUVBTyxLQUFLdUosR0FBRyxHQUFHLE9BQU9oSSxLQUFhOUI7Z0JBQzdCLE9BQU9xaUIsVUFBVSxNQUFNOWhCLEtBQUt3SSxXQUFXLENBQUMsT0FBT2pILEtBQUs5QjtZQUN0RDtZQUVBLE9BQU9PO1FBQ1Q7SUFDRjtJQUVBLE9BQU9BO0FBQ1Q7QUFFQSxJQUFBLEFBQUtnaUIsMENBQUFBO0lBQ0gsd0VBQXdFO0lBRXhFLHdFQUF3RTtJQUV4RSw0RUFBNEU7SUFFNUUsbUNBQW1DO1dBUGhDQTtFQUFBQSJ9
@@ -161,4 +161,4 @@ let Queue = class Queue {
161
161
  }
162
162
  };
163
163
 
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWV1ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWxheSB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNsYXNzIFF1ZXVlIHtcbiAgLyoqIFRoZSByZXN0IG1hbmFnZXIgKi9cbiAgcmVzdDogUmVzdE1hbmFnZXJcbiAgLyoqIEFtb3VudCBvZiByZXF1ZXN0cyB0aGF0IGhhdmUgYXJlIHJlbWFpbmluZy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgcmVtYWluaW5nOiBudW1iZXIgPSAxXG4gIC8qKiBNYXggcmVxdWVzdHMgZm9yIHRoaXMgdGhpcy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgbWF4OiBudW1iZXIgPSAxXG4gIC8qKiBUaGUgdGltZSB0aGF0IGRpc2NvcmQgYWxsb3dzIHRvIG1ha2UgdGhlIG1heCBudW1iZXIgb2YgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlciA9IDBcbiAgLyoqIHRpbWVyIHRvIHJlc2V0IHRvIDAgKi9cbiAgdGltZW91dElkOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZFxuICAvKiogVGhlIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiAqL1xuICB3YWl0aW5nOiBBcnJheTwodmFsdWU6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZD4gPSBbXVxuICAvKiogVGhlIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiAqL1xuICBwZW5kaW5nOiBTZW5kUmVxdWVzdE9wdGlvbnNbXSA9IFtdXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgd2FpdGluZyBxdWV1ZSBpcyBhbHJlYWR5IHByb2Nlc3NpbmcuICovXG4gIHByb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZVxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHBlbmRpbmcgcXVldWUgaXMgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBwcm9jZXNzaW5nUGVuZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBXaGV0aGVyIHRoZSBmaXJzdCByZXF1ZXN0IGlzIHBlbmRpbmcuICovXG4gIGZpcnN0UmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBUaGUgdXJsIHRoYXQgYWxsIHRoZSByZXF1ZXN0cyBpbiB0aGlzIHF1ZXVlIGFyZSBzZW50IHRvLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogV2hlbiByZXF1ZXN0cyBzdGFydGVkIGJlaW5nIG1hZGUgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGludGVydmFsIHdpbGwgcmVzZXQgaXQuICovXG4gIGZyb3plbkF0OiBudW1iZXIgPSAwXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcgdGhpcyBxdWV1ZSBpZiBpdCBpcyBlbXB0eS4gRGVmYXVsdHMgdG8gNjAwMDAob25lIG1pbnV0ZSkuICovXG4gIGRlbGV0ZVF1ZXVlRGVsYXk6IG51bWJlciA9IDYwMDAwXG4gIC8qKiBUaGUgdGltZW91dCBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoaXMgcXVldWUgKi9cbiAgZGVsZXRlUXVldWVUaW1lb3V0PzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGlzIHJlcXVlc3QsIG1heSBiZSB0aGUgcmVxdWVzdCBhdXRob3JpemF0aW9uIG9yIGZhbGxiYWNrIHRvIHRoZSBib3QgYXV0aFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBpZGVudGlmeSB0aGlzIHF1ZXVlIGZyb20gdGhlIHF1ZXVlIG1hcHBpbmcgb2YgdGhlIHJlc3QgbWFuYWdlclxuICAgKi9cbiAgaWRlbnRpZmllcjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IocmVzdDogUmVzdE1hbmFnZXIsIG9wdGlvbnM6IFF1ZXVlT3B0aW9ucykge1xuICAgIHRoaXMucmVzdCA9IHJlc3RcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsXG4gICAgdGhpcy5pZGVudGlmaWVyID0gb3B0aW9ucy5pZGVudGlmaWVyXG5cbiAgICBpZiAob3B0aW9ucy5pbnRlcnZhbCkgdGhpcy5pbnRlcnZhbCA9IG9wdGlvbnMuaW50ZXJ2YWxcbiAgICBpZiAob3B0aW9ucy5tYXgpIHRoaXMubWF4ID0gb3B0aW9ucy5tYXhcbiAgICBpZiAob3B0aW9ucy5yZW1haW5pbmcpIHRoaXMucmVtYWluaW5nID0gb3B0aW9ucy5yZW1haW5pbmdcbiAgICBpZiAob3B0aW9ucy50aW1lb3V0SWQpIHRoaXMudGltZW91dElkID0gb3B0aW9ucy50aW1lb3V0SWRcbiAgICBpZiAob3B0aW9ucy5kZWxldGVRdWV1ZURlbGF5KSB0aGlzLmRlbGV0ZVF1ZXVlRGVsYXkgPSBvcHRpb25zLmRlbGV0ZVF1ZXVlRGVsYXlcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVtYWluaW5nIHJlcXVlc3RzIHRoYXQgYXJlIGFsbG93ZWQuICovXG4gIGlzUmVxdWVzdEFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVtYWluaW5nID4gMFxuICB9XG5cbiAgLyoqIFBhdXNlcyB0aGUgZXhlY3V0aW9uIHVudGlsIGEgcmVxdWVzdCBpcyBhbGxvd2VkIHRvIGJlIG1hZGUuICovXG4gIGFzeW5jIHdhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBJZiB3aGF0ZXZlciBhbW91bnQgb2YgcmVxdWVzdHMgaXMgbGVmdCBpcyBtb3JlIHRoYW4gdGhlIHNhZmV0eSBtYXJnaW4sIGFsbG93IHRoZSByZXF1ZXN0XG4gICAgICBpZiAodGhpcy5pc1JlcXVlc3RBbGxvd2VkKCkpIHtcbiAgICAgICAgLy8gdGhpcy5yZW1haW5pbmcrKztcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndhaXRpbmcucHVzaChyZXNvbHZlKVxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NXYWl0aW5nKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIHJlcXVlc3RzIHdhaXRpbmcgdG8gYmUgaGFuZGxlZC4gKi9cbiAgYXN5bmMgcHJvY2Vzc1dhaXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gSWYgYWxyZWFkeSBwcm9jZXNzaW5nLCB0aGF0IGxvb3Agd2lsbCBoYW5kbGUgYWxsIHdhaXRpbmcgcmVxdWVzdHMuXG4gICAgaWYgKHRoaXMucHJvY2Vzc2luZykgcmV0dXJuXG4gICAgLy8gTWFyayBhcyBwcm9jZXNzaW5nIHNvIG90aGVyIGxvb3BzIGRvbid0IHN0YXJ0XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZVxuXG4gICAgd2hpbGUgKHRoaXMud2FpdGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc3QubG9nZ2VyLmRlYnVnKGBbUXVldWVdICR7dGhpcy5xdWV1ZVR5cGV9ICR7dGhpcy51cmx9IHByb2Nlc3Mgd2FpdGluZyB3aGlsZSBsb29wIHJhbi5gKVxuICAgICAgaWYgKHRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIG5leHQgaXRlbSBpbiB0aGUgcXVldWVcbiAgICAgICAgdGhpcy53YWl0aW5nLnNoaWZ0KCk/LigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBkZWxheSgxMDAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZmFsc2Ugc28gbmV4dCBwZW5kaW5nIHJlcXVlc3QgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXcgbG9vcC5cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIGFsbCByZXF1ZXN0cyBwZW5kaW5nIHRvIGJlIHNlbnQuICovXG4gIGFzeW5jIHByb2Nlc3NQZW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIGFscmVhZHkgcHJvY2Vzc2luZywgdGhhdCBsb29wIHdpbGwgaGFuZGxlIGFsbCBwZW5kaW5nIHJlcXVlc3RzLlxuICAgIGlmICh0aGlzLnByb2Nlc3NpbmdQZW5kaW5nIHx8ICF0aGlzLnBlbmRpbmcubGVuZ3RoKSByZXR1cm5cblxuICAgIC8vIE1hcmsgYXMgcHJvY2Vzc2luZyBzbyBvdGhlciBsb29wcyBkb24ndCBzdGFydFxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSB0cnVlXG5cbiAgICB3aGlsZSAodGhpcy5wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzdC5sb2dnZXIuZGVidWcoYFF1ZXVlICR7dGhpcy5xdWV1ZVR5cGV9ICR7dGhpcy51cmx9IHByb2Nlc3MgcGVuZGluZyB3aGlsZSBsb29wIHJhbiB3aXRoICR7dGhpcy5wZW5kaW5nLmxlbmd0aH0uYClcbiAgICAgIGlmICghdGhpcy5maXJzdFJlcXVlc3QgJiYgIXRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgZnV0dXJlID0gdGhpcy5mcm96ZW5BdCArIHRoaXMuaW50ZXJ2YWxcbiAgICAgICAgYXdhaXQgZGVsYXkoZnV0dXJlID4gbm93ID8gZnV0dXJlIC0gbm93IDogMTAwMClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucGVuZGluZ1swXVxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgYmFzaWNVUkwgPSB0aGlzLnJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5tZXRob2QpXG5cbiAgICAgICAgLy8gSWYgdGhpcyB1cmwgaXMgc3RpbGwgcmF0ZSBsaW1pdGVkLCB0cnkgYWdhaW5cbiAgICAgICAgY29uc3QgdXJsUmVzZXRJbiA9IHRoaXMucmVzdC5jaGVja1JhdGVMaW1pdHMoYmFzaWNVUkwsIHRoaXMuaWRlbnRpZmllcilcbiAgICAgICAgaWYgKHVybFJlc2V0SW4pIGF3YWl0IGRlbGF5KHVybFJlc2V0SW4pXG5cbiAgICAgICAgLy8gSUYgQSBCVUNLRVQgRVhJU1RTLCBDSEVDSyBUSEUgQlVDS0VUJ1MgUkFURSBMSU1JVFNcbiAgICAgICAgY29uc3QgYnVja2V0UmVzZXRJbiA9IHJlcXVlc3QuYnVja2V0SWQgPyB0aGlzLnJlc3QuY2hlY2tSYXRlTGltaXRzKHJlcXVlc3QuYnVja2V0SWQsIHRoaXMuaWRlbnRpZmllcikgOiBmYWxzZVxuICAgICAgICBpZiAoYnVja2V0UmVzZXRJbikgYXdhaXQgZGVsYXkoYnVja2V0UmVzZXRJbilcblxuICAgICAgICB0aGlzLmZpcnN0UmVxdWVzdCA9IGZhbHNlXG4gICAgICAgIHRoaXMucmVtYWluaW5nLS1cblxuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmcgPT09IDAgJiYgdGhpcy5pbnRlcnZhbCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMudGltZW91dElkID8/PSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5tYXhcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICAgICAgfSwgdGhpcy5pbnRlcnZhbClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHF1ZXVlLCB3ZSBhcmUgZXhlY3V0aW5nIGl0LlxuICAgICAgICB0aGlzLnBlbmRpbmcuc2hpZnQoKVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHJlcXVlc3QgaXMgYWJsZSB0byBiZSBtYWRlIGdsb2JhbGx5XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdC5pbnZhbGlkQnVja2V0LndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdFxuICAgICAgICAgIC5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGluIHNlbmRSZXF1ZXN0LCB0aGlzIGNhdGNoIGp1c3QgcHJldmVudHMgYm90cyBmcm9tIGR5aW5nXG4gICAgICAgICAgLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgUXVldWUgJHt0aGlzLnF1ZXVlVHlwZX0gJHt0aGlzLnVybH0gcHJvY2VzcyBwZW5kaW5nIHdoaWxlIGxvb3AgZXhpdGVkIHdpdGggJHt0aGlzLnBlbmRpbmcubGVuZ3RofS5gKVxuXG4gICAgLy8gTWFyayBhcyBmYWxzZSBzbyBuZXh0IHBlbmRpbmcgcmVxdWVzdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG5ldyBsb29wLlxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSBmYWxzZVxuICAgIHRoaXMuY2xlYW51cCgpXG4gIH1cblxuICBoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KGhlYWRlcnM6IHsgbWF4PzogbnVtYmVyOyBpbnRlcnZhbD86IG51bWJlcjsgcmVtYWluaW5nPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBpZiAoaGVhZGVycy5tYXggPT09IDApIHtcbiAgICAgIHRoaXMucmVtYWluaW5nKytcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5mcm96ZW5BdCkgdGhpcy5mcm96ZW5BdCA9IERhdGUubm93KClcbiAgICBpZiAoaGVhZGVycy5pbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB0aGlzLmludGVydmFsID0gaGVhZGVycy5pbnRlcnZhbFxuICAgIGlmIChoZWFkZXJzLnJlbWFpbmluZyAhPT0gdW5kZWZpbmVkKSB0aGlzLnJlbWFpbmluZyA9IGhlYWRlcnMucmVtYWluaW5nXG5cbiAgICBpZiAodGhpcy5yZW1haW5pbmcgPD0gMSkge1xuICAgICAgdGhpcy50aW1lb3V0SWQgPz89IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbWFpbmluZyA9IHRoaXMubWF4XG4gICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICB9LCBoZWFkZXJzLmludGVydmFsKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgYSByZXF1ZXN0IGlzIGF2YWlsYWJsZSBhbmQgYWRkcyBpdCB0byB0aGUgcXVldWUuIEFsc28gdHJpZ2dlcnMgcXVldWUgcHJvY2Vzc2luZyBpZiBub3QgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBhc3luYyBtYWtlUmVxdWVzdChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuICAgIHRoaXMucGVuZGluZy5wdXNoKG9wdGlvbnMpXG4gICAgdGhpcy5wcm9jZXNzUGVuZGluZygpXG4gIH1cblxuICAvKiogQ2xlYW5zIHVwIHRoZSBxdWV1ZSBieSBjaGVja2luZyBpZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgYW5kIHJlbW92aW5nIGl0LiAqL1xuICBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1F1ZXVlQ2xlYXJhYmxlKCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmcoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsYXlpbmcgZGVsZXRlIGZvciAke3RoaXMuZGVsZXRlUXVldWVEZWxheX1tc2ApXG5cbiAgICAvLyBEZWxldGUgaW4gYSBtaW51dGUgZ2l2aW5nIGEgYml0IG9mIHRpbWUgdG8gYWxsb3cgbmV3IHJlcXVlc3RzIHRoYXQgbWF5IHJldXNlIHRoaXMgcXVldWVcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxldGVRdWV1ZVRpbWVvdXQpXG4gICAgdGhpcy5kZWxldGVRdWV1ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc1F1ZXVlQ2xlYXJhYmxlKCkpIHtcbiAgICAgICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gaXMgbm90IGNsZWFyYWJsZS4gUmVzdGFydGluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlLmApXG4gICAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmcoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsZXRpbmdgKVxuXG4gICAgICBpZiAodGhpcy50aW1lb3V0SWQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZClcblxuICAgICAgLy8gTm8gcmVxdWVzdHMgaGF2ZSBiZWVuIHJlcXVlc3RlZCBmb3IgdGhpcyBxdWV1ZSBzbyB3ZSBudWtlIHRoaXMgcXVldWVcbiAgICAgIHRoaXMucmVzdC5xdWV1ZXMuZGVsZXRlKGAke3RoaXMuaWRlbnRpZmllcn0ke3RoaXMudXJsfWApXG4gICAgICB0aGlzLnJlc3QubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsZXRlZCEgUmVtYWluaW5nOiAoJHt0aGlzLnJlc3QucXVldWVzLnNpemV9KWAsXG4gICAgICAgIFsuLi50aGlzLnJlc3QucXVldWVzLnZhbHVlcygpXS5tYXAoKHF1ZXVlKSA9PiBgJHtxdWV1ZS5xdWV1ZVR5cGV9JHtxdWV1ZS51cmx9YCksXG4gICAgICApXG4gICAgfSwgdGhpcy5kZWxldGVRdWV1ZURlbGF5KVxuICB9XG5cbiAgLyoqIFNpbXBseSBjaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGFibGUgdG8gYmUgY2xlYXJlZCBvciBpdCBoYXMgcmVxdWVzdHMgcGVuZGluZy4gKi9cbiAgaXNRdWV1ZUNsZWFyYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5maXJzdFJlcXVlc3QpIHJldHVybiBmYWxzZVxuICAgIGlmICh0aGlzLndhaXRpbmcubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nUGVuZGluZykgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0IHF1ZXVlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXIuc2xpY2UoMCwgdGhpcy5pZGVudGlmaWVyLmluZGV4T2YoJyAnKSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlT3B0aW9ucyB7XG4gIC8qKiBIb3cgbWFueSByZXF1ZXN0cyBhcmUgcmVtYWluaW5nLiBEZWZhdWx0cyB0byAxICovXG4gIHJlbWFpbmluZz86IG51bWJlclxuICAvKiogTWF4IG51bWJlciBvZiByZXF1ZXN0cyBhbGxvd2VkIGluIHRoaXMgdGhpcy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgbWF4PzogbnVtYmVyXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCBkaXNjb3JkIGFsbG93cyB0byBtYWtlIHRoZSBtYXggbnVtYmVyIG9mIGludmFsaWQgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDAgKi9cbiAgaW50ZXJ2YWw/OiBudW1iZXJcbiAgLyoqIHRpbWVyIHRvIHJlc2V0IHRvIDAgKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqIFRoZSB1cmwgdGhpcyBxdWV1ZSB3aWxsIGJlIGhhbmRsaW5nLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nIHRoaXMgcXVldWUgaWYgaXQgaXMgZW1wdHkuIERlZmF1bHRzIHRvIDYwMDAwKG9uZSBtaW51dGUpLiAqL1xuICBkZWxldGVRdWV1ZURlbGF5PzogbnVtYmVyXG4gIC8qKiBUaGUgYmFzZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoaXMgcXVldWUgaW4gdGhlIHJlc3QgbWFuYWdlciAqL1xuICBpZGVudGlmaWVyOiBzdHJpbmdcbn1cbiJdLCJuYW1lcyI6WyJRdWV1ZSIsImNvbnN0cnVjdG9yIiwicmVzdCIsIm9wdGlvbnMiLCJyZW1haW5pbmciLCJtYXgiLCJpbnRlcnZhbCIsIndhaXRpbmciLCJwZW5kaW5nIiwicHJvY2Vzc2luZyIsInByb2Nlc3NpbmdQZW5kaW5nIiwiZmlyc3RSZXF1ZXN0IiwiZnJvemVuQXQiLCJkZWxldGVRdWV1ZURlbGF5IiwidXJsIiwiaWRlbnRpZmllciIsInRpbWVvdXRJZCIsImlzUmVxdWVzdEFsbG93ZWQiLCJ3YWl0VW50aWxSZXF1ZXN0QXZhaWxhYmxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwicHJvY2Vzc1dhaXRpbmciLCJsZW5ndGgiLCJsb2dnZXIiLCJkZWJ1ZyIsInF1ZXVlVHlwZSIsInNoaWZ0IiwiZGVsYXkiLCJwcm9jZXNzUGVuZGluZyIsIm5vdyIsIkRhdGUiLCJmdXR1cmUiLCJyZXF1ZXN0IiwiYmFzaWNVUkwiLCJzaW1wbGlmeVVybCIsInJvdXRlIiwibWV0aG9kIiwidXJsUmVzZXRJbiIsImNoZWNrUmF0ZUxpbWl0cyIsImJ1Y2tldFJlc2V0SW4iLCJidWNrZXRJZCIsInNldFRpbWVvdXQiLCJ1bmRlZmluZWQiLCJpbnZhbGlkQnVja2V0Iiwic2VuZFJlcXVlc3QiLCJjYXRjaCIsImNsZWFudXAiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaGVhZGVycyIsIm1ha2VSZXF1ZXN0IiwiaXNRdWV1ZUNsZWFyYWJsZSIsImNsZWFyVGltZW91dCIsImRlbGV0ZVF1ZXVlVGltZW91dCIsInF1ZXVlcyIsImRlbGV0ZSIsInNpemUi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
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWV1ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWxheSB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNsYXNzIFF1ZXVlIHtcbiAgLyoqIFRoZSByZXN0IG1hbmFnZXIgKi9cbiAgcmVzdDogUmVzdE1hbmFnZXJcbiAgLyoqIEFtb3VudCBvZiByZXF1ZXN0cyB0aGF0IGhhdmUgYXJlIHJlbWFpbmluZy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgcmVtYWluaW5nOiBudW1iZXIgPSAxXG4gIC8qKiBNYXggcmVxdWVzdHMgZm9yIHRoaXMgdGhpcy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgbWF4OiBudW1iZXIgPSAxXG4gIC8qKiBUaGUgdGltZSB0aGF0IGRpc2NvcmQgYWxsb3dzIHRvIG1ha2UgdGhlIG1heCBudW1iZXIgb2YgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlciA9IDBcbiAgLyoqIHRpbWVyIHRvIHJlc2V0IHRvIDAgKi9cbiAgdGltZW91dElkOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZFxuICAvKiogVGhlIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiAqL1xuICB3YWl0aW5nOiBBcnJheTwodmFsdWU6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZD4gPSBbXVxuICAvKiogVGhlIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiAqL1xuICBwZW5kaW5nOiBTZW5kUmVxdWVzdE9wdGlvbnNbXSA9IFtdXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgd2FpdGluZyBxdWV1ZSBpcyBhbHJlYWR5IHByb2Nlc3NpbmcuICovXG4gIHByb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZVxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHBlbmRpbmcgcXVldWUgaXMgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBwcm9jZXNzaW5nUGVuZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBXaGV0aGVyIHRoZSBmaXJzdCByZXF1ZXN0IGlzIHBlbmRpbmcuICovXG4gIGZpcnN0UmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBUaGUgdXJsIHRoYXQgYWxsIHRoZSByZXF1ZXN0cyBpbiB0aGlzIHF1ZXVlIGFyZSBzZW50IHRvLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogV2hlbiByZXF1ZXN0cyBzdGFydGVkIGJlaW5nIG1hZGUgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGludGVydmFsIHdpbGwgcmVzZXQgaXQuICovXG4gIGZyb3plbkF0OiBudW1iZXIgPSAwXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcgdGhpcyBxdWV1ZSBpZiBpdCBpcyBlbXB0eS4gRGVmYXVsdHMgdG8gNjAwMDAob25lIG1pbnV0ZSkuICovXG4gIGRlbGV0ZVF1ZXVlRGVsYXk6IG51bWJlciA9IDYwMDAwXG4gIC8qKiBUaGUgdGltZW91dCBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoaXMgcXVldWUgKi9cbiAgZGVsZXRlUXVldWVUaW1lb3V0PzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGlzIHJlcXVlc3QsIG1heSBiZSB0aGUgcmVxdWVzdCBhdXRob3JpemF0aW9uIG9yIGZhbGxiYWNrIHRvIHRoZSBib3QgYXV0aFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBpZGVudGlmeSB0aGlzIHF1ZXVlIGZyb20gdGhlIHF1ZXVlIG1hcHBpbmcgb2YgdGhlIHJlc3QgbWFuYWdlclxuICAgKi9cbiAgaWRlbnRpZmllcjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IocmVzdDogUmVzdE1hbmFnZXIsIG9wdGlvbnM6IFF1ZXVlT3B0aW9ucykge1xuICAgIHRoaXMucmVzdCA9IHJlc3RcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsXG4gICAgdGhpcy5pZGVudGlmaWVyID0gb3B0aW9ucy5pZGVudGlmaWVyXG5cbiAgICBpZiAob3B0aW9ucy5pbnRlcnZhbCkgdGhpcy5pbnRlcnZhbCA9IG9wdGlvbnMuaW50ZXJ2YWxcbiAgICBpZiAob3B0aW9ucy5tYXgpIHRoaXMubWF4ID0gb3B0aW9ucy5tYXhcbiAgICBpZiAob3B0aW9ucy5yZW1haW5pbmcpIHRoaXMucmVtYWluaW5nID0gb3B0aW9ucy5yZW1haW5pbmdcbiAgICBpZiAob3B0aW9ucy50aW1lb3V0SWQpIHRoaXMudGltZW91dElkID0gb3B0aW9ucy50aW1lb3V0SWRcbiAgICBpZiAob3B0aW9ucy5kZWxldGVRdWV1ZURlbGF5KSB0aGlzLmRlbGV0ZVF1ZXVlRGVsYXkgPSBvcHRpb25zLmRlbGV0ZVF1ZXVlRGVsYXlcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVtYWluaW5nIHJlcXVlc3RzIHRoYXQgYXJlIGFsbG93ZWQuICovXG4gIGlzUmVxdWVzdEFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVtYWluaW5nID4gMFxuICB9XG5cbiAgLyoqIFBhdXNlcyB0aGUgZXhlY3V0aW9uIHVudGlsIGEgcmVxdWVzdCBpcyBhbGxvd2VkIHRvIGJlIG1hZGUuICovXG4gIGFzeW5jIHdhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBJZiB3aGF0ZXZlciBhbW91bnQgb2YgcmVxdWVzdHMgaXMgbGVmdCBpcyBtb3JlIHRoYW4gdGhlIHNhZmV0eSBtYXJnaW4sIGFsbG93IHRoZSByZXF1ZXN0XG4gICAgICBpZiAodGhpcy5pc1JlcXVlc3RBbGxvd2VkKCkpIHtcbiAgICAgICAgLy8gdGhpcy5yZW1haW5pbmcrKztcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndhaXRpbmcucHVzaChyZXNvbHZlKVxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NXYWl0aW5nKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIHJlcXVlc3RzIHdhaXRpbmcgdG8gYmUgaGFuZGxlZC4gKi9cbiAgYXN5bmMgcHJvY2Vzc1dhaXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gSWYgYWxyZWFkeSBwcm9jZXNzaW5nLCB0aGF0IGxvb3Agd2lsbCBoYW5kbGUgYWxsIHdhaXRpbmcgcmVxdWVzdHMuXG4gICAgaWYgKHRoaXMucHJvY2Vzc2luZykgcmV0dXJuXG4gICAgLy8gTWFyayBhcyBwcm9jZXNzaW5nIHNvIG90aGVyIGxvb3BzIGRvbid0IHN0YXJ0XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZVxuXG4gICAgd2hpbGUgKHRoaXMud2FpdGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc3QubG9nZ2VyLmRlYnVnKGBbUXVldWVdICR7dGhpcy5xdWV1ZVR5cGV9ICR7dGhpcy51cmx9IHByb2Nlc3Mgd2FpdGluZyB3aGlsZSBsb29wIHJhbi5gKVxuICAgICAgaWYgKHRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIG5leHQgaXRlbSBpbiB0aGUgcXVldWVcbiAgICAgICAgdGhpcy53YWl0aW5nLnNoaWZ0KCk/LigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBkZWxheSgxMDAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZmFsc2Ugc28gbmV4dCBwZW5kaW5nIHJlcXVlc3QgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXcgbG9vcC5cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIGFsbCByZXF1ZXN0cyBwZW5kaW5nIHRvIGJlIHNlbnQuICovXG4gIGFzeW5jIHByb2Nlc3NQZW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIGFscmVhZHkgcHJvY2Vzc2luZywgdGhhdCBsb29wIHdpbGwgaGFuZGxlIGFsbCBwZW5kaW5nIHJlcXVlc3RzLlxuICAgIGlmICh0aGlzLnByb2Nlc3NpbmdQZW5kaW5nIHx8ICF0aGlzLnBlbmRpbmcubGVuZ3RoKSByZXR1cm5cblxuICAgIC8vIE1hcmsgYXMgcHJvY2Vzc2luZyBzbyBvdGhlciBsb29wcyBkb24ndCBzdGFydFxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSB0cnVlXG5cbiAgICB3aGlsZSAodGhpcy5wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzdC5sb2dnZXIuZGVidWcoYFF1ZXVlICR7dGhpcy5xdWV1ZVR5cGV9ICR7dGhpcy51cmx9IHByb2Nlc3MgcGVuZGluZyB3aGlsZSBsb29wIHJhbiB3aXRoICR7dGhpcy5wZW5kaW5nLmxlbmd0aH0uYClcbiAgICAgIGlmICghdGhpcy5maXJzdFJlcXVlc3QgJiYgIXRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgZnV0dXJlID0gdGhpcy5mcm96ZW5BdCArIHRoaXMuaW50ZXJ2YWxcbiAgICAgICAgYXdhaXQgZGVsYXkoZnV0dXJlID4gbm93ID8gZnV0dXJlIC0gbm93IDogMTAwMClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucGVuZGluZ1swXVxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgYmFzaWNVUkwgPSB0aGlzLnJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5tZXRob2QpXG5cbiAgICAgICAgLy8gSWYgdGhpcyB1cmwgaXMgc3RpbGwgcmF0ZSBsaW1pdGVkLCB0cnkgYWdhaW5cbiAgICAgICAgY29uc3QgdXJsUmVzZXRJbiA9IHRoaXMucmVzdC5jaGVja1JhdGVMaW1pdHMoYmFzaWNVUkwsIHRoaXMuaWRlbnRpZmllcilcbiAgICAgICAgaWYgKHVybFJlc2V0SW4pIGF3YWl0IGRlbGF5KHVybFJlc2V0SW4pXG5cbiAgICAgICAgLy8gSUYgQSBCVUNLRVQgRVhJU1RTLCBDSEVDSyBUSEUgQlVDS0VUJ1MgUkFURSBMSU1JVFNcbiAgICAgICAgY29uc3QgYnVja2V0UmVzZXRJbiA9IHJlcXVlc3QuYnVja2V0SWQgPyB0aGlzLnJlc3QuY2hlY2tSYXRlTGltaXRzKHJlcXVlc3QuYnVja2V0SWQsIHRoaXMuaWRlbnRpZmllcikgOiBmYWxzZVxuICAgICAgICBpZiAoYnVja2V0UmVzZXRJbikgYXdhaXQgZGVsYXkoYnVja2V0UmVzZXRJbilcblxuICAgICAgICB0aGlzLmZpcnN0UmVxdWVzdCA9IGZhbHNlXG4gICAgICAgIHRoaXMucmVtYWluaW5nLS1cblxuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmcgPT09IDAgJiYgdGhpcy5pbnRlcnZhbCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMudGltZW91dElkID8/PSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5tYXhcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICAgICAgfSwgdGhpcy5pbnRlcnZhbClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHF1ZXVlLCB3ZSBhcmUgZXhlY3V0aW5nIGl0LlxuICAgICAgICB0aGlzLnBlbmRpbmcuc2hpZnQoKVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHJlcXVlc3QgaXMgYWJsZSB0byBiZSBtYWRlIGdsb2JhbGx5XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdC5pbnZhbGlkQnVja2V0LndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdFxuICAgICAgICAgIC5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGluIHNlbmRSZXF1ZXN0LCB0aGlzIGNhdGNoIGp1c3QgcHJldmVudHMgYm90cyBmcm9tIGR5aW5nXG4gICAgICAgICAgLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgUXVldWUgJHt0aGlzLnF1ZXVlVHlwZX0gJHt0aGlzLnVybH0gcHJvY2VzcyBwZW5kaW5nIHdoaWxlIGxvb3AgZXhpdGVkIHdpdGggJHt0aGlzLnBlbmRpbmcubGVuZ3RofS5gKVxuXG4gICAgLy8gTWFyayBhcyBmYWxzZSBzbyBuZXh0IHBlbmRpbmcgcmVxdWVzdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG5ldyBsb29wLlxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSBmYWxzZVxuICAgIHRoaXMuY2xlYW51cCgpXG4gIH1cblxuICBoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KGhlYWRlcnM6IHsgbWF4PzogbnVtYmVyOyBpbnRlcnZhbD86IG51bWJlcjsgcmVtYWluaW5nPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBpZiAoaGVhZGVycy5tYXggPT09IDApIHtcbiAgICAgIHRoaXMucmVtYWluaW5nKytcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5mcm96ZW5BdCkgdGhpcy5mcm96ZW5BdCA9IERhdGUubm93KClcbiAgICBpZiAoaGVhZGVycy5pbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB0aGlzLmludGVydmFsID0gaGVhZGVycy5pbnRlcnZhbFxuICAgIGlmIChoZWFkZXJzLnJlbWFpbmluZyAhPT0gdW5kZWZpbmVkKSB0aGlzLnJlbWFpbmluZyA9IGhlYWRlcnMucmVtYWluaW5nXG5cbiAgICBpZiAodGhpcy5yZW1haW5pbmcgPD0gMSkge1xuICAgICAgdGhpcy50aW1lb3V0SWQgPz89IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbWFpbmluZyA9IHRoaXMubWF4XG4gICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICB9LCBoZWFkZXJzLmludGVydmFsKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgYSByZXF1ZXN0IGlzIGF2YWlsYWJsZSBhbmQgYWRkcyBpdCB0byB0aGUgcXVldWUuIEFsc28gdHJpZ2dlcnMgcXVldWUgcHJvY2Vzc2luZyBpZiBub3QgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBhc3luYyBtYWtlUmVxdWVzdChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuICAgIHRoaXMucGVuZGluZy5wdXNoKG9wdGlvbnMpXG4gICAgdGhpcy5wcm9jZXNzUGVuZGluZygpXG4gIH1cblxuICAvKiogQ2xlYW5zIHVwIHRoZSBxdWV1ZSBieSBjaGVja2luZyBpZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgYW5kIHJlbW92aW5nIGl0LiAqL1xuICBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1F1ZXVlQ2xlYXJhYmxlKCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmcoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsYXlpbmcgZGVsZXRlIGZvciAke3RoaXMuZGVsZXRlUXVldWVEZWxheX1tc2ApXG5cbiAgICAvLyBEZWxldGUgaW4gYSBtaW51dGUgZ2l2aW5nIGEgYml0IG9mIHRpbWUgdG8gYWxsb3cgbmV3IHJlcXVlc3RzIHRoYXQgbWF5IHJldXNlIHRoaXMgcXVldWVcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxldGVRdWV1ZVRpbWVvdXQpXG4gICAgdGhpcy5kZWxldGVRdWV1ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc1F1ZXVlQ2xlYXJhYmxlKCkpIHtcbiAgICAgICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gaXMgbm90IGNsZWFyYWJsZS4gUmVzdGFydGluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlLmApXG4gICAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmcoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsZXRpbmdgKVxuXG4gICAgICBpZiAodGhpcy50aW1lb3V0SWQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZClcblxuICAgICAgLy8gTm8gcmVxdWVzdHMgaGF2ZSBiZWVuIHJlcXVlc3RlZCBmb3IgdGhpcyBxdWV1ZSBzbyB3ZSBudWtlIHRoaXMgcXVldWVcbiAgICAgIHRoaXMucmVzdC5xdWV1ZXMuZGVsZXRlKGAke3RoaXMuaWRlbnRpZmllcn0ke3RoaXMudXJsfWApXG4gICAgICB0aGlzLnJlc3QubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsZXRlZCEgUmVtYWluaW5nOiAoJHt0aGlzLnJlc3QucXVldWVzLnNpemV9KWAsXG4gICAgICAgIFsuLi50aGlzLnJlc3QucXVldWVzLnZhbHVlcygpXS5tYXAoKHF1ZXVlKSA9PiBgJHtxdWV1ZS5xdWV1ZVR5cGV9JHtxdWV1ZS51cmx9YCksXG4gICAgICApXG4gICAgfSwgdGhpcy5kZWxldGVRdWV1ZURlbGF5KVxuICB9XG5cbiAgLyoqIFNpbXBseSBjaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGFibGUgdG8gYmUgY2xlYXJlZCBvciBpdCBoYXMgcmVxdWVzdHMgcGVuZGluZy4gKi9cbiAgaXNRdWV1ZUNsZWFyYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5maXJzdFJlcXVlc3QpIHJldHVybiBmYWxzZVxuICAgIGlmICh0aGlzLndhaXRpbmcubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nUGVuZGluZykgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0IHF1ZXVlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXIuc2xpY2UoMCwgdGhpcy5pZGVudGlmaWVyLmluZGV4T2YoJyAnKSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlT3B0aW9ucyB7XG4gIC8qKiBIb3cgbWFueSByZXF1ZXN0cyBhcmUgcmVtYWluaW5nLiBEZWZhdWx0cyB0byAxICovXG4gIHJlbWFpbmluZz86IG51bWJlclxuICAvKiogTWF4IG51bWJlciBvZiByZXF1ZXN0cyBhbGxvd2VkIGluIHRoaXMgdGhpcy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgbWF4PzogbnVtYmVyXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCBkaXNjb3JkIGFsbG93cyB0byBtYWtlIHRoZSBtYXggbnVtYmVyIG9mIGludmFsaWQgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDAgKi9cbiAgaW50ZXJ2YWw/OiBudW1iZXJcbiAgLyoqIHRpbWVyIHRvIHJlc2V0IHRvIDAgKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqIFRoZSB1cmwgdGhpcyBxdWV1ZSB3aWxsIGJlIGhhbmRsaW5nLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nIHRoaXMgcXVldWUgaWYgaXQgaXMgZW1wdHkuIERlZmF1bHRzIHRvIDYwMDAwKG9uZSBtaW51dGUpLiAqL1xuICBkZWxldGVRdWV1ZURlbGF5PzogbnVtYmVyXG4gIC8qKiBUaGUgYmFzZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoaXMgcXVldWUgaW4gdGhlIHJlc3QgbWFuYWdlciAqL1xuICBpZGVudGlmaWVyOiBzdHJpbmdcbn1cbiJdLCJuYW1lcyI6WyJRdWV1ZSIsInJlc3QiLCJvcHRpb25zIiwicmVtYWluaW5nIiwibWF4IiwiaW50ZXJ2YWwiLCJ3YWl0aW5nIiwicGVuZGluZyIsInByb2Nlc3NpbmciLCJwcm9jZXNzaW5nUGVuZGluZyIsImZpcnN0UmVxdWVzdCIsImZyb3plbkF0IiwiZGVsZXRlUXVldWVEZWxheSIsInVybCIsImlkZW50aWZpZXIiLCJ0aW1lb3V0SWQiLCJpc1JlcXVlc3RBbGxvd2VkIiwid2FpdFVudGlsUmVxdWVzdEF2YWlsYWJsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicHVzaCIsInByb2Nlc3NXYWl0aW5nIiwibGVuZ3RoIiwibG9nZ2VyIiwiZGVidWciLCJxdWV1ZVR5cGUiLCJzaGlmdCIsImRlbGF5IiwicHJvY2Vzc1BlbmRpbmciLCJub3ciLCJEYXRlIiwiZnV0dXJlIiwicmVxdWVzdCIsImJhc2ljVVJMIiwic2ltcGxpZnlVcmwiLCJyb3V0ZSIsIm1ldGhvZCIsInVybFJlc2V0SW4iLCJjaGVja1JhdGVMaW1pdHMiLCJidWNrZXRSZXNldEluIiwiYnVja2V0SWQiLCJzZXRUaW1lb3V0IiwidW5kZWZpbmVkIiwiaW52YWxpZEJ1Y2tldCIsInNlbmRSZXF1ZXN0IiwiY2F0Y2giLCJjbGVhbnVwIiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImhlYWRlcnMiLCJtYWtlUmVxdWVzdCIsImlzUXVldWVDbGVhcmFibGUiLCJjbGVhclRpbWVvdXQiLCJkZWxldGVRdWV1ZVRpbWVvdXQiLCJxdWV1ZXMiLCJkZWxldGUiLCJzaXplIiwidmFsdWVzIiwibWFw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
package/dist/esm/queue.js CHANGED
@@ -151,4 +151,4 @@ export class Queue {
151
151
  }
152
152
  }
153
153
 
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWV1ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWxheSB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNsYXNzIFF1ZXVlIHtcbiAgLyoqIFRoZSByZXN0IG1hbmFnZXIgKi9cbiAgcmVzdDogUmVzdE1hbmFnZXJcbiAgLyoqIEFtb3VudCBvZiByZXF1ZXN0cyB0aGF0IGhhdmUgYXJlIHJlbWFpbmluZy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgcmVtYWluaW5nOiBudW1iZXIgPSAxXG4gIC8qKiBNYXggcmVxdWVzdHMgZm9yIHRoaXMgdGhpcy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgbWF4OiBudW1iZXIgPSAxXG4gIC8qKiBUaGUgdGltZSB0aGF0IGRpc2NvcmQgYWxsb3dzIHRvIG1ha2UgdGhlIG1heCBudW1iZXIgb2YgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlciA9IDBcbiAgLyoqIHRpbWVyIHRvIHJlc2V0IHRvIDAgKi9cbiAgdGltZW91dElkOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZFxuICAvKiogVGhlIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiAqL1xuICB3YWl0aW5nOiBBcnJheTwodmFsdWU6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZD4gPSBbXVxuICAvKiogVGhlIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiAqL1xuICBwZW5kaW5nOiBTZW5kUmVxdWVzdE9wdGlvbnNbXSA9IFtdXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgd2FpdGluZyBxdWV1ZSBpcyBhbHJlYWR5IHByb2Nlc3NpbmcuICovXG4gIHByb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZVxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHBlbmRpbmcgcXVldWUgaXMgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBwcm9jZXNzaW5nUGVuZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBXaGV0aGVyIHRoZSBmaXJzdCByZXF1ZXN0IGlzIHBlbmRpbmcuICovXG4gIGZpcnN0UmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBUaGUgdXJsIHRoYXQgYWxsIHRoZSByZXF1ZXN0cyBpbiB0aGlzIHF1ZXVlIGFyZSBzZW50IHRvLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogV2hlbiByZXF1ZXN0cyBzdGFydGVkIGJlaW5nIG1hZGUgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGludGVydmFsIHdpbGwgcmVzZXQgaXQuICovXG4gIGZyb3plbkF0OiBudW1iZXIgPSAwXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcgdGhpcyBxdWV1ZSBpZiBpdCBpcyBlbXB0eS4gRGVmYXVsdHMgdG8gNjAwMDAob25lIG1pbnV0ZSkuICovXG4gIGRlbGV0ZVF1ZXVlRGVsYXk6IG51bWJlciA9IDYwMDAwXG4gIC8qKiBUaGUgdGltZW91dCBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoaXMgcXVldWUgKi9cbiAgZGVsZXRlUXVldWVUaW1lb3V0PzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGlzIHJlcXVlc3QsIG1heSBiZSB0aGUgcmVxdWVzdCBhdXRob3JpemF0aW9uIG9yIGZhbGxiYWNrIHRvIHRoZSBib3QgYXV0aFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBpZGVudGlmeSB0aGlzIHF1ZXVlIGZyb20gdGhlIHF1ZXVlIG1hcHBpbmcgb2YgdGhlIHJlc3QgbWFuYWdlclxuICAgKi9cbiAgaWRlbnRpZmllcjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IocmVzdDogUmVzdE1hbmFnZXIsIG9wdGlvbnM6IFF1ZXVlT3B0aW9ucykge1xuICAgIHRoaXMucmVzdCA9IHJlc3RcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsXG4gICAgdGhpcy5pZGVudGlmaWVyID0gb3B0aW9ucy5pZGVudGlmaWVyXG5cbiAgICBpZiAob3B0aW9ucy5pbnRlcnZhbCkgdGhpcy5pbnRlcnZhbCA9IG9wdGlvbnMuaW50ZXJ2YWxcbiAgICBpZiAob3B0aW9ucy5tYXgpIHRoaXMubWF4ID0gb3B0aW9ucy5tYXhcbiAgICBpZiAob3B0aW9ucy5yZW1haW5pbmcpIHRoaXMucmVtYWluaW5nID0gb3B0aW9ucy5yZW1haW5pbmdcbiAgICBpZiAob3B0aW9ucy50aW1lb3V0SWQpIHRoaXMudGltZW91dElkID0gb3B0aW9ucy50aW1lb3V0SWRcbiAgICBpZiAob3B0aW9ucy5kZWxldGVRdWV1ZURlbGF5KSB0aGlzLmRlbGV0ZVF1ZXVlRGVsYXkgPSBvcHRpb25zLmRlbGV0ZVF1ZXVlRGVsYXlcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVtYWluaW5nIHJlcXVlc3RzIHRoYXQgYXJlIGFsbG93ZWQuICovXG4gIGlzUmVxdWVzdEFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVtYWluaW5nID4gMFxuICB9XG5cbiAgLyoqIFBhdXNlcyB0aGUgZXhlY3V0aW9uIHVudGlsIGEgcmVxdWVzdCBpcyBhbGxvd2VkIHRvIGJlIG1hZGUuICovXG4gIGFzeW5jIHdhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBJZiB3aGF0ZXZlciBhbW91bnQgb2YgcmVxdWVzdHMgaXMgbGVmdCBpcyBtb3JlIHRoYW4gdGhlIHNhZmV0eSBtYXJnaW4sIGFsbG93IHRoZSByZXF1ZXN0XG4gICAgICBpZiAodGhpcy5pc1JlcXVlc3RBbGxvd2VkKCkpIHtcbiAgICAgICAgLy8gdGhpcy5yZW1haW5pbmcrKztcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndhaXRpbmcucHVzaChyZXNvbHZlKVxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NXYWl0aW5nKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIHJlcXVlc3RzIHdhaXRpbmcgdG8gYmUgaGFuZGxlZC4gKi9cbiAgYXN5bmMgcHJvY2Vzc1dhaXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gSWYgYWxyZWFkeSBwcm9jZXNzaW5nLCB0aGF0IGxvb3Agd2lsbCBoYW5kbGUgYWxsIHdhaXRpbmcgcmVxdWVzdHMuXG4gICAgaWYgKHRoaXMucHJvY2Vzc2luZykgcmV0dXJuXG4gICAgLy8gTWFyayBhcyBwcm9jZXNzaW5nIHNvIG90aGVyIGxvb3BzIGRvbid0IHN0YXJ0XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZVxuXG4gICAgd2hpbGUgKHRoaXMud2FpdGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc3QubG9nZ2VyLmRlYnVnKGBbUXVldWVdICR7dGhpcy5xdWV1ZVR5cGV9ICR7dGhpcy51cmx9IHByb2Nlc3Mgd2FpdGluZyB3aGlsZSBsb29wIHJhbi5gKVxuICAgICAgaWYgKHRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIG5leHQgaXRlbSBpbiB0aGUgcXVldWVcbiAgICAgICAgdGhpcy53YWl0aW5nLnNoaWZ0KCk/LigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBkZWxheSgxMDAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZmFsc2Ugc28gbmV4dCBwZW5kaW5nIHJlcXVlc3QgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXcgbG9vcC5cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIGFsbCByZXF1ZXN0cyBwZW5kaW5nIHRvIGJlIHNlbnQuICovXG4gIGFzeW5jIHByb2Nlc3NQZW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIGFscmVhZHkgcHJvY2Vzc2luZywgdGhhdCBsb29wIHdpbGwgaGFuZGxlIGFsbCBwZW5kaW5nIHJlcXVlc3RzLlxuICAgIGlmICh0aGlzLnByb2Nlc3NpbmdQZW5kaW5nIHx8ICF0aGlzLnBlbmRpbmcubGVuZ3RoKSByZXR1cm5cblxuICAgIC8vIE1hcmsgYXMgcHJvY2Vzc2luZyBzbyBvdGhlciBsb29wcyBkb24ndCBzdGFydFxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSB0cnVlXG5cbiAgICB3aGlsZSAodGhpcy5wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzdC5sb2dnZXIuZGVidWcoYFF1ZXVlICR7dGhpcy5xdWV1ZVR5cGV9ICR7dGhpcy51cmx9IHByb2Nlc3MgcGVuZGluZyB3aGlsZSBsb29wIHJhbiB3aXRoICR7dGhpcy5wZW5kaW5nLmxlbmd0aH0uYClcbiAgICAgIGlmICghdGhpcy5maXJzdFJlcXVlc3QgJiYgIXRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgZnV0dXJlID0gdGhpcy5mcm96ZW5BdCArIHRoaXMuaW50ZXJ2YWxcbiAgICAgICAgYXdhaXQgZGVsYXkoZnV0dXJlID4gbm93ID8gZnV0dXJlIC0gbm93IDogMTAwMClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucGVuZGluZ1swXVxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgYmFzaWNVUkwgPSB0aGlzLnJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5tZXRob2QpXG5cbiAgICAgICAgLy8gSWYgdGhpcyB1cmwgaXMgc3RpbGwgcmF0ZSBsaW1pdGVkLCB0cnkgYWdhaW5cbiAgICAgICAgY29uc3QgdXJsUmVzZXRJbiA9IHRoaXMucmVzdC5jaGVja1JhdGVMaW1pdHMoYmFzaWNVUkwsIHRoaXMuaWRlbnRpZmllcilcbiAgICAgICAgaWYgKHVybFJlc2V0SW4pIGF3YWl0IGRlbGF5KHVybFJlc2V0SW4pXG5cbiAgICAgICAgLy8gSUYgQSBCVUNLRVQgRVhJU1RTLCBDSEVDSyBUSEUgQlVDS0VUJ1MgUkFURSBMSU1JVFNcbiAgICAgICAgY29uc3QgYnVja2V0UmVzZXRJbiA9IHJlcXVlc3QuYnVja2V0SWQgPyB0aGlzLnJlc3QuY2hlY2tSYXRlTGltaXRzKHJlcXVlc3QuYnVja2V0SWQsIHRoaXMuaWRlbnRpZmllcikgOiBmYWxzZVxuICAgICAgICBpZiAoYnVja2V0UmVzZXRJbikgYXdhaXQgZGVsYXkoYnVja2V0UmVzZXRJbilcblxuICAgICAgICB0aGlzLmZpcnN0UmVxdWVzdCA9IGZhbHNlXG4gICAgICAgIHRoaXMucmVtYWluaW5nLS1cblxuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmcgPT09IDAgJiYgdGhpcy5pbnRlcnZhbCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMudGltZW91dElkID8/PSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5tYXhcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICAgICAgfSwgdGhpcy5pbnRlcnZhbClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHF1ZXVlLCB3ZSBhcmUgZXhlY3V0aW5nIGl0LlxuICAgICAgICB0aGlzLnBlbmRpbmcuc2hpZnQoKVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHJlcXVlc3QgaXMgYWJsZSB0byBiZSBtYWRlIGdsb2JhbGx5XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdC5pbnZhbGlkQnVja2V0LndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdFxuICAgICAgICAgIC5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGluIHNlbmRSZXF1ZXN0LCB0aGlzIGNhdGNoIGp1c3QgcHJldmVudHMgYm90cyBmcm9tIGR5aW5nXG4gICAgICAgICAgLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgUXVldWUgJHt0aGlzLnF1ZXVlVHlwZX0gJHt0aGlzLnVybH0gcHJvY2VzcyBwZW5kaW5nIHdoaWxlIGxvb3AgZXhpdGVkIHdpdGggJHt0aGlzLnBlbmRpbmcubGVuZ3RofS5gKVxuXG4gICAgLy8gTWFyayBhcyBmYWxzZSBzbyBuZXh0IHBlbmRpbmcgcmVxdWVzdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG5ldyBsb29wLlxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSBmYWxzZVxuICAgIHRoaXMuY2xlYW51cCgpXG4gIH1cblxuICBoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KGhlYWRlcnM6IHsgbWF4PzogbnVtYmVyOyBpbnRlcnZhbD86IG51bWJlcjsgcmVtYWluaW5nPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBpZiAoaGVhZGVycy5tYXggPT09IDApIHtcbiAgICAgIHRoaXMucmVtYWluaW5nKytcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5mcm96ZW5BdCkgdGhpcy5mcm96ZW5BdCA9IERhdGUubm93KClcbiAgICBpZiAoaGVhZGVycy5pbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB0aGlzLmludGVydmFsID0gaGVhZGVycy5pbnRlcnZhbFxuICAgIGlmIChoZWFkZXJzLnJlbWFpbmluZyAhPT0gdW5kZWZpbmVkKSB0aGlzLnJlbWFpbmluZyA9IGhlYWRlcnMucmVtYWluaW5nXG5cbiAgICBpZiAodGhpcy5yZW1haW5pbmcgPD0gMSkge1xuICAgICAgdGhpcy50aW1lb3V0SWQgPz89IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbWFpbmluZyA9IHRoaXMubWF4XG4gICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICB9LCBoZWFkZXJzLmludGVydmFsKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgYSByZXF1ZXN0IGlzIGF2YWlsYWJsZSBhbmQgYWRkcyBpdCB0byB0aGUgcXVldWUuIEFsc28gdHJpZ2dlcnMgcXVldWUgcHJvY2Vzc2luZyBpZiBub3QgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBhc3luYyBtYWtlUmVxdWVzdChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuICAgIHRoaXMucGVuZGluZy5wdXNoKG9wdGlvbnMpXG4gICAgdGhpcy5wcm9jZXNzUGVuZGluZygpXG4gIH1cblxuICAvKiogQ2xlYW5zIHVwIHRoZSBxdWV1ZSBieSBjaGVja2luZyBpZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgYW5kIHJlbW92aW5nIGl0LiAqL1xuICBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1F1ZXVlQ2xlYXJhYmxlKCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmcoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsYXlpbmcgZGVsZXRlIGZvciAke3RoaXMuZGVsZXRlUXVldWVEZWxheX1tc2ApXG5cbiAgICAvLyBEZWxldGUgaW4gYSBtaW51dGUgZ2l2aW5nIGEgYml0IG9mIHRpbWUgdG8gYWxsb3cgbmV3IHJlcXVlc3RzIHRoYXQgbWF5IHJldXNlIHRoaXMgcXVldWVcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxldGVRdWV1ZVRpbWVvdXQpXG4gICAgdGhpcy5kZWxldGVRdWV1ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc1F1ZXVlQ2xlYXJhYmxlKCkpIHtcbiAgICAgICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gaXMgbm90IGNsZWFyYWJsZS4gUmVzdGFydGluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlLmApXG4gICAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmcoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsZXRpbmdgKVxuXG4gICAgICBpZiAodGhpcy50aW1lb3V0SWQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZClcblxuICAgICAgLy8gTm8gcmVxdWVzdHMgaGF2ZSBiZWVuIHJlcXVlc3RlZCBmb3IgdGhpcyBxdWV1ZSBzbyB3ZSBudWtlIHRoaXMgcXVldWVcbiAgICAgIHRoaXMucmVzdC5xdWV1ZXMuZGVsZXRlKGAke3RoaXMuaWRlbnRpZmllcn0ke3RoaXMudXJsfWApXG4gICAgICB0aGlzLnJlc3QubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsZXRlZCEgUmVtYWluaW5nOiAoJHt0aGlzLnJlc3QucXVldWVzLnNpemV9KWAsXG4gICAgICAgIFsuLi50aGlzLnJlc3QucXVldWVzLnZhbHVlcygpXS5tYXAoKHF1ZXVlKSA9PiBgJHtxdWV1ZS5xdWV1ZVR5cGV9JHtxdWV1ZS51cmx9YCksXG4gICAgICApXG4gICAgfSwgdGhpcy5kZWxldGVRdWV1ZURlbGF5KVxuICB9XG5cbiAgLyoqIFNpbXBseSBjaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGFibGUgdG8gYmUgY2xlYXJlZCBvciBpdCBoYXMgcmVxdWVzdHMgcGVuZGluZy4gKi9cbiAgaXNRdWV1ZUNsZWFyYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5maXJzdFJlcXVlc3QpIHJldHVybiBmYWxzZVxuICAgIGlmICh0aGlzLndhaXRpbmcubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nUGVuZGluZykgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0IHF1ZXVlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXIuc2xpY2UoMCwgdGhpcy5pZGVudGlmaWVyLmluZGV4T2YoJyAnKSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlT3B0aW9ucyB7XG4gIC8qKiBIb3cgbWFueSByZXF1ZXN0cyBhcmUgcmVtYWluaW5nLiBEZWZhdWx0cyB0byAxICovXG4gIHJlbWFpbmluZz86IG51bWJlclxuICAvKiogTWF4IG51bWJlciBvZiByZXF1ZXN0cyBhbGxvd2VkIGluIHRoaXMgdGhpcy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgbWF4PzogbnVtYmVyXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCBkaXNjb3JkIGFsbG93cyB0byBtYWtlIHRoZSBtYXggbnVtYmVyIG9mIGludmFsaWQgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDAgKi9cbiAgaW50ZXJ2YWw/OiBudW1iZXJcbiAgLyoqIHRpbWVyIHRvIHJlc2V0IHRvIDAgKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqIFRoZSB1cmwgdGhpcyBxdWV1ZSB3aWxsIGJlIGhhbmRsaW5nLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nIHRoaXMgcXVldWUgaWYgaXQgaXMgZW1wdHkuIERlZmF1bHRzIHRvIDYwMDAwKG9uZSBtaW51dGUpLiAqL1xuICBkZWxldGVRdWV1ZURlbGF5PzogbnVtYmVyXG4gIC8qKiBUaGUgYmFzZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoaXMgcXVldWUgaW4gdGhlIHJlc3QgbWFuYWdlciAqL1xuICBpZGVudGlmaWVyOiBzdHJpbmdcbn1cbiJdLCJuYW1lcyI6WyJkZWxheSIsIlF1ZXVlIiwiY29uc3RydWN0b3IiLCJyZXN0Iiwib3B0aW9ucyIsInJlbWFpbmluZyIsIm1heCIsImludGVydmFsIiwid2FpdGluZyIsInBlbmRpbmciLCJwcm9jZXNzaW5nIiwicHJvY2Vzc2luZ1BlbmRpbmciLCJmaXJzdFJlcXVlc3QiLCJmcm96ZW5BdCIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJ1cmwiLCJpZGVudGlmaWVyIiwidGltZW91dElkIiwiaXNSZXF1ZXN0QWxsb3dlZCIsIndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJwcm9jZXNzV2FpdGluZyIsImxlbmd0aCIsImxvZ2dlciIsImRlYnVnIiwicXVldWVUeXBlIiwic2hpZnQiLCJwcm9jZXNzUGVuZGluZyIsIm5vdyIsIkRhdGUiLCJmdXR1cmUiLCJyZXF1ZXN0IiwiYmFzaWNVUkwiLCJzaW1wbGlmeVVybCIsInJvdXRlIiwibWV0aG9kIiwidXJsUmVzZXRJbiIsImNoZWNrUmF0ZUxpbWl0cyIsImJ1Y2tldFJlc2V0SW4iLCJidWNrZXRJZCIsInNldFRpbWVvdXQiLCJ1bmRlZmluZWQiLCJpbnZhbGlkQnVja2V0Iiwic2VuZFJlcXVlc3QiLCJjYXRjaCIsImNsZWFudXAiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaGVhZGVycyIsIm1ha2VSZXF1ZXN0IiwiaXNRdWV1ZUNsZWFyYWJsZSIsImNsZWFyVGltZW91dCIsImRlbGV0ZVF1ZXVlVGltZW91dCIsInF1ZXVlcyIsImRlbGV0ZSIsInNpemUi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
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWV1ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWxheSB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNsYXNzIFF1ZXVlIHtcbiAgLyoqIFRoZSByZXN0IG1hbmFnZXIgKi9cbiAgcmVzdDogUmVzdE1hbmFnZXJcbiAgLyoqIEFtb3VudCBvZiByZXF1ZXN0cyB0aGF0IGhhdmUgYXJlIHJlbWFpbmluZy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgcmVtYWluaW5nOiBudW1iZXIgPSAxXG4gIC8qKiBNYXggcmVxdWVzdHMgZm9yIHRoaXMgdGhpcy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgbWF4OiBudW1iZXIgPSAxXG4gIC8qKiBUaGUgdGltZSB0aGF0IGRpc2NvcmQgYWxsb3dzIHRvIG1ha2UgdGhlIG1heCBudW1iZXIgb2YgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlciA9IDBcbiAgLyoqIHRpbWVyIHRvIHJlc2V0IHRvIDAgKi9cbiAgdGltZW91dElkOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZFxuICAvKiogVGhlIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiAqL1xuICB3YWl0aW5nOiBBcnJheTwodmFsdWU6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZD4gPSBbXVxuICAvKiogVGhlIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiAqL1xuICBwZW5kaW5nOiBTZW5kUmVxdWVzdE9wdGlvbnNbXSA9IFtdXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgd2FpdGluZyBxdWV1ZSBpcyBhbHJlYWR5IHByb2Nlc3NpbmcuICovXG4gIHByb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZVxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHBlbmRpbmcgcXVldWUgaXMgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBwcm9jZXNzaW5nUGVuZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBXaGV0aGVyIHRoZSBmaXJzdCByZXF1ZXN0IGlzIHBlbmRpbmcuICovXG4gIGZpcnN0UmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBUaGUgdXJsIHRoYXQgYWxsIHRoZSByZXF1ZXN0cyBpbiB0aGlzIHF1ZXVlIGFyZSBzZW50IHRvLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogV2hlbiByZXF1ZXN0cyBzdGFydGVkIGJlaW5nIG1hZGUgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGludGVydmFsIHdpbGwgcmVzZXQgaXQuICovXG4gIGZyb3plbkF0OiBudW1iZXIgPSAwXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcgdGhpcyBxdWV1ZSBpZiBpdCBpcyBlbXB0eS4gRGVmYXVsdHMgdG8gNjAwMDAob25lIG1pbnV0ZSkuICovXG4gIGRlbGV0ZVF1ZXVlRGVsYXk6IG51bWJlciA9IDYwMDAwXG4gIC8qKiBUaGUgdGltZW91dCBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoaXMgcXVldWUgKi9cbiAgZGVsZXRlUXVldWVUaW1lb3V0PzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGlzIHJlcXVlc3QsIG1heSBiZSB0aGUgcmVxdWVzdCBhdXRob3JpemF0aW9uIG9yIGZhbGxiYWNrIHRvIHRoZSBib3QgYXV0aFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBpZGVudGlmeSB0aGlzIHF1ZXVlIGZyb20gdGhlIHF1ZXVlIG1hcHBpbmcgb2YgdGhlIHJlc3QgbWFuYWdlclxuICAgKi9cbiAgaWRlbnRpZmllcjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IocmVzdDogUmVzdE1hbmFnZXIsIG9wdGlvbnM6IFF1ZXVlT3B0aW9ucykge1xuICAgIHRoaXMucmVzdCA9IHJlc3RcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsXG4gICAgdGhpcy5pZGVudGlmaWVyID0gb3B0aW9ucy5pZGVudGlmaWVyXG5cbiAgICBpZiAob3B0aW9ucy5pbnRlcnZhbCkgdGhpcy5pbnRlcnZhbCA9IG9wdGlvbnMuaW50ZXJ2YWxcbiAgICBpZiAob3B0aW9ucy5tYXgpIHRoaXMubWF4ID0gb3B0aW9ucy5tYXhcbiAgICBpZiAob3B0aW9ucy5yZW1haW5pbmcpIHRoaXMucmVtYWluaW5nID0gb3B0aW9ucy5yZW1haW5pbmdcbiAgICBpZiAob3B0aW9ucy50aW1lb3V0SWQpIHRoaXMudGltZW91dElkID0gb3B0aW9ucy50aW1lb3V0SWRcbiAgICBpZiAob3B0aW9ucy5kZWxldGVRdWV1ZURlbGF5KSB0aGlzLmRlbGV0ZVF1ZXVlRGVsYXkgPSBvcHRpb25zLmRlbGV0ZVF1ZXVlRGVsYXlcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVtYWluaW5nIHJlcXVlc3RzIHRoYXQgYXJlIGFsbG93ZWQuICovXG4gIGlzUmVxdWVzdEFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVtYWluaW5nID4gMFxuICB9XG5cbiAgLyoqIFBhdXNlcyB0aGUgZXhlY3V0aW9uIHVudGlsIGEgcmVxdWVzdCBpcyBhbGxvd2VkIHRvIGJlIG1hZGUuICovXG4gIGFzeW5jIHdhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBJZiB3aGF0ZXZlciBhbW91bnQgb2YgcmVxdWVzdHMgaXMgbGVmdCBpcyBtb3JlIHRoYW4gdGhlIHNhZmV0eSBtYXJnaW4sIGFsbG93IHRoZSByZXF1ZXN0XG4gICAgICBpZiAodGhpcy5pc1JlcXVlc3RBbGxvd2VkKCkpIHtcbiAgICAgICAgLy8gdGhpcy5yZW1haW5pbmcrKztcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndhaXRpbmcucHVzaChyZXNvbHZlKVxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NXYWl0aW5nKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIHJlcXVlc3RzIHdhaXRpbmcgdG8gYmUgaGFuZGxlZC4gKi9cbiAgYXN5bmMgcHJvY2Vzc1dhaXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gSWYgYWxyZWFkeSBwcm9jZXNzaW5nLCB0aGF0IGxvb3Agd2lsbCBoYW5kbGUgYWxsIHdhaXRpbmcgcmVxdWVzdHMuXG4gICAgaWYgKHRoaXMucHJvY2Vzc2luZykgcmV0dXJuXG4gICAgLy8gTWFyayBhcyBwcm9jZXNzaW5nIHNvIG90aGVyIGxvb3BzIGRvbid0IHN0YXJ0XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZVxuXG4gICAgd2hpbGUgKHRoaXMud2FpdGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc3QubG9nZ2VyLmRlYnVnKGBbUXVldWVdICR7dGhpcy5xdWV1ZVR5cGV9ICR7dGhpcy51cmx9IHByb2Nlc3Mgd2FpdGluZyB3aGlsZSBsb29wIHJhbi5gKVxuICAgICAgaWYgKHRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIG5leHQgaXRlbSBpbiB0aGUgcXVldWVcbiAgICAgICAgdGhpcy53YWl0aW5nLnNoaWZ0KCk/LigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBkZWxheSgxMDAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZmFsc2Ugc28gbmV4dCBwZW5kaW5nIHJlcXVlc3QgY2FuIGJlIHRyaWdnZXJlZCBieSBuZXcgbG9vcC5cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqIFByb2Nlc3MgdGhlIHF1ZXVlIG9mIGFsbCByZXF1ZXN0cyBwZW5kaW5nIHRvIGJlIHNlbnQuICovXG4gIGFzeW5jIHByb2Nlc3NQZW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIGFscmVhZHkgcHJvY2Vzc2luZywgdGhhdCBsb29wIHdpbGwgaGFuZGxlIGFsbCBwZW5kaW5nIHJlcXVlc3RzLlxuICAgIGlmICh0aGlzLnByb2Nlc3NpbmdQZW5kaW5nIHx8ICF0aGlzLnBlbmRpbmcubGVuZ3RoKSByZXR1cm5cblxuICAgIC8vIE1hcmsgYXMgcHJvY2Vzc2luZyBzbyBvdGhlciBsb29wcyBkb24ndCBzdGFydFxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSB0cnVlXG5cbiAgICB3aGlsZSAodGhpcy5wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzdC5sb2dnZXIuZGVidWcoYFF1ZXVlICR7dGhpcy5xdWV1ZVR5cGV9ICR7dGhpcy51cmx9IHByb2Nlc3MgcGVuZGluZyB3aGlsZSBsb29wIHJhbiB3aXRoICR7dGhpcy5wZW5kaW5nLmxlbmd0aH0uYClcbiAgICAgIGlmICghdGhpcy5maXJzdFJlcXVlc3QgJiYgIXRoaXMuaXNSZXF1ZXN0QWxsb3dlZCgpKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgZnV0dXJlID0gdGhpcy5mcm96ZW5BdCArIHRoaXMuaW50ZXJ2YWxcbiAgICAgICAgYXdhaXQgZGVsYXkoZnV0dXJlID4gbm93ID8gZnV0dXJlIC0gbm93IDogMTAwMClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucGVuZGluZ1swXVxuICAgICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgYmFzaWNVUkwgPSB0aGlzLnJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5tZXRob2QpXG5cbiAgICAgICAgLy8gSWYgdGhpcyB1cmwgaXMgc3RpbGwgcmF0ZSBsaW1pdGVkLCB0cnkgYWdhaW5cbiAgICAgICAgY29uc3QgdXJsUmVzZXRJbiA9IHRoaXMucmVzdC5jaGVja1JhdGVMaW1pdHMoYmFzaWNVUkwsIHRoaXMuaWRlbnRpZmllcilcbiAgICAgICAgaWYgKHVybFJlc2V0SW4pIGF3YWl0IGRlbGF5KHVybFJlc2V0SW4pXG5cbiAgICAgICAgLy8gSUYgQSBCVUNLRVQgRVhJU1RTLCBDSEVDSyBUSEUgQlVDS0VUJ1MgUkFURSBMSU1JVFNcbiAgICAgICAgY29uc3QgYnVja2V0UmVzZXRJbiA9IHJlcXVlc3QuYnVja2V0SWQgPyB0aGlzLnJlc3QuY2hlY2tSYXRlTGltaXRzKHJlcXVlc3QuYnVja2V0SWQsIHRoaXMuaWRlbnRpZmllcikgOiBmYWxzZVxuICAgICAgICBpZiAoYnVja2V0UmVzZXRJbikgYXdhaXQgZGVsYXkoYnVja2V0UmVzZXRJbilcblxuICAgICAgICB0aGlzLmZpcnN0UmVxdWVzdCA9IGZhbHNlXG4gICAgICAgIHRoaXMucmVtYWluaW5nLS1cblxuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmcgPT09IDAgJiYgdGhpcy5pbnRlcnZhbCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMudGltZW91dElkID8/PSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5tYXhcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICAgICAgfSwgdGhpcy5pbnRlcnZhbClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHF1ZXVlLCB3ZSBhcmUgZXhlY3V0aW5nIGl0LlxuICAgICAgICB0aGlzLnBlbmRpbmcuc2hpZnQoKVxuICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHJlcXVlc3QgaXMgYWJsZSB0byBiZSBtYWRlIGdsb2JhbGx5XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdC5pbnZhbGlkQnVja2V0LndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdFxuICAgICAgICAgIC5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGluIHNlbmRSZXF1ZXN0LCB0aGlzIGNhdGNoIGp1c3QgcHJldmVudHMgYm90cyBmcm9tIGR5aW5nXG4gICAgICAgICAgLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgUXVldWUgJHt0aGlzLnF1ZXVlVHlwZX0gJHt0aGlzLnVybH0gcHJvY2VzcyBwZW5kaW5nIHdoaWxlIGxvb3AgZXhpdGVkIHdpdGggJHt0aGlzLnBlbmRpbmcubGVuZ3RofS5gKVxuXG4gICAgLy8gTWFyayBhcyBmYWxzZSBzbyBuZXh0IHBlbmRpbmcgcmVxdWVzdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG5ldyBsb29wLlxuICAgIHRoaXMucHJvY2Vzc2luZ1BlbmRpbmcgPSBmYWxzZVxuICAgIHRoaXMuY2xlYW51cCgpXG4gIH1cblxuICBoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KGhlYWRlcnM6IHsgbWF4PzogbnVtYmVyOyBpbnRlcnZhbD86IG51bWJlcjsgcmVtYWluaW5nPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBpZiAoaGVhZGVycy5tYXggPT09IDApIHtcbiAgICAgIHRoaXMucmVtYWluaW5nKytcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5mcm96ZW5BdCkgdGhpcy5mcm96ZW5BdCA9IERhdGUubm93KClcbiAgICBpZiAoaGVhZGVycy5pbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB0aGlzLmludGVydmFsID0gaGVhZGVycy5pbnRlcnZhbFxuICAgIGlmIChoZWFkZXJzLnJlbWFpbmluZyAhPT0gdW5kZWZpbmVkKSB0aGlzLnJlbWFpbmluZyA9IGhlYWRlcnMucmVtYWluaW5nXG5cbiAgICBpZiAodGhpcy5yZW1haW5pbmcgPD0gMSkge1xuICAgICAgdGhpcy50aW1lb3V0SWQgPz89IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbWFpbmluZyA9IHRoaXMubWF4XG4gICAgICAgIHRoaXMudGltZW91dElkID0gdW5kZWZpbmVkXG4gICAgICB9LCBoZWFkZXJzLmludGVydmFsKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgYSByZXF1ZXN0IGlzIGF2YWlsYWJsZSBhbmQgYWRkcyBpdCB0byB0aGUgcXVldWUuIEFsc28gdHJpZ2dlcnMgcXVldWUgcHJvY2Vzc2luZyBpZiBub3QgYWxyZWFkeSBwcm9jZXNzaW5nLiAqL1xuICBhc3luYyBtYWtlUmVxdWVzdChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLndhaXRVbnRpbFJlcXVlc3RBdmFpbGFibGUoKVxuICAgIHRoaXMucGVuZGluZy5wdXNoKG9wdGlvbnMpXG4gICAgdGhpcy5wcm9jZXNzUGVuZGluZygpXG4gIH1cblxuICAvKiogQ2xlYW5zIHVwIHRoZSBxdWV1ZSBieSBjaGVja2luZyBpZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgYW5kIHJlbW92aW5nIGl0LiAqL1xuICBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1F1ZXVlQ2xlYXJhYmxlKCkpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmcoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsYXlpbmcgZGVsZXRlIGZvciAke3RoaXMuZGVsZXRlUXVldWVEZWxheX1tc2ApXG5cbiAgICAvLyBEZWxldGUgaW4gYSBtaW51dGUgZ2l2aW5nIGEgYml0IG9mIHRpbWUgdG8gYWxsb3cgbmV3IHJlcXVlc3RzIHRoYXQgbWF5IHJldXNlIHRoaXMgcXVldWVcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxldGVRdWV1ZVRpbWVvdXQpXG4gICAgdGhpcy5kZWxldGVRdWV1ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc1F1ZXVlQ2xlYXJhYmxlKCkpIHtcbiAgICAgICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gaXMgbm90IGNsZWFyYWJsZS4gUmVzdGFydGluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlLmApXG4gICAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmcoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN0LmxvZ2dlci5kZWJ1ZyhgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsZXRpbmdgKVxuXG4gICAgICBpZiAodGhpcy50aW1lb3V0SWQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZClcblxuICAgICAgLy8gTm8gcmVxdWVzdHMgaGF2ZSBiZWVuIHJlcXVlc3RlZCBmb3IgdGhpcyBxdWV1ZSBzbyB3ZSBudWtlIHRoaXMgcXVldWVcbiAgICAgIHRoaXMucmVzdC5xdWV1ZXMuZGVsZXRlKGAke3RoaXMuaWRlbnRpZmllcn0ke3RoaXMudXJsfWApXG4gICAgICB0aGlzLnJlc3QubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgW1F1ZXVlXSAke3RoaXMucXVldWVUeXBlfSAke3RoaXMudXJsfS4gRGVsZXRlZCEgUmVtYWluaW5nOiAoJHt0aGlzLnJlc3QucXVldWVzLnNpemV9KWAsXG4gICAgICAgIFsuLi50aGlzLnJlc3QucXVldWVzLnZhbHVlcygpXS5tYXAoKHF1ZXVlKSA9PiBgJHtxdWV1ZS5xdWV1ZVR5cGV9JHtxdWV1ZS51cmx9YCksXG4gICAgICApXG4gICAgfSwgdGhpcy5kZWxldGVRdWV1ZURlbGF5KVxuICB9XG5cbiAgLyoqIFNpbXBseSBjaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGFibGUgdG8gYmUgY2xlYXJlZCBvciBpdCBoYXMgcmVxdWVzdHMgcGVuZGluZy4gKi9cbiAgaXNRdWV1ZUNsZWFyYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5maXJzdFJlcXVlc3QpIHJldHVybiBmYWxzZVxuICAgIGlmICh0aGlzLndhaXRpbmcubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nUGVuZGluZykgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0IHF1ZXVlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXIuc2xpY2UoMCwgdGhpcy5pZGVudGlmaWVyLmluZGV4T2YoJyAnKSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlT3B0aW9ucyB7XG4gIC8qKiBIb3cgbWFueSByZXF1ZXN0cyBhcmUgcmVtYWluaW5nLiBEZWZhdWx0cyB0byAxICovXG4gIHJlbWFpbmluZz86IG51bWJlclxuICAvKiogTWF4IG51bWJlciBvZiByZXF1ZXN0cyBhbGxvd2VkIGluIHRoaXMgdGhpcy4gRGVmYXVsdHMgdG8gMS4gKi9cbiAgbWF4PzogbnVtYmVyXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCBkaXNjb3JkIGFsbG93cyB0byBtYWtlIHRoZSBtYXggbnVtYmVyIG9mIGludmFsaWQgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDAgKi9cbiAgaW50ZXJ2YWw/OiBudW1iZXJcbiAgLyoqIHRpbWVyIHRvIHJlc2V0IHRvIDAgKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqIFRoZSB1cmwgdGhpcyBxdWV1ZSB3aWxsIGJlIGhhbmRsaW5nLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nIHRoaXMgcXVldWUgaWYgaXQgaXMgZW1wdHkuIERlZmF1bHRzIHRvIDYwMDAwKG9uZSBtaW51dGUpLiAqL1xuICBkZWxldGVRdWV1ZURlbGF5PzogbnVtYmVyXG4gIC8qKiBUaGUgYmFzZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoaXMgcXVldWUgaW4gdGhlIHJlc3QgbWFuYWdlciAqL1xuICBpZGVudGlmaWVyOiBzdHJpbmdcbn1cbiJdLCJuYW1lcyI6WyJkZWxheSIsIlF1ZXVlIiwicmVzdCIsIm9wdGlvbnMiLCJyZW1haW5pbmciLCJtYXgiLCJpbnRlcnZhbCIsIndhaXRpbmciLCJwZW5kaW5nIiwicHJvY2Vzc2luZyIsInByb2Nlc3NpbmdQZW5kaW5nIiwiZmlyc3RSZXF1ZXN0IiwiZnJvemVuQXQiLCJkZWxldGVRdWV1ZURlbGF5IiwidXJsIiwiaWRlbnRpZmllciIsInRpbWVvdXRJZCIsImlzUmVxdWVzdEFsbG93ZWQiLCJ3YWl0VW50aWxSZXF1ZXN0QXZhaWxhYmxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwicHJvY2Vzc1dhaXRpbmciLCJsZW5ndGgiLCJsb2dnZXIiLCJkZWJ1ZyIsInF1ZXVlVHlwZSIsInNoaWZ0IiwicHJvY2Vzc1BlbmRpbmciLCJub3ciLCJEYXRlIiwiZnV0dXJlIiwicmVxdWVzdCIsImJhc2ljVVJMIiwic2ltcGxpZnlVcmwiLCJyb3V0ZSIsIm1ldGhvZCIsInVybFJlc2V0SW4iLCJjaGVja1JhdGVMaW1pdHMiLCJidWNrZXRSZXNldEluIiwiYnVja2V0SWQiLCJzZXRUaW1lb3V0IiwidW5kZWZpbmVkIiwiaW52YWxpZEJ1Y2tldCIsInNlbmRSZXF1ZXN0IiwiY2F0Y2giLCJjbGVhbnVwIiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImhlYWRlcnMiLCJtYWtlUmVxdWVzdCIsImlzUXVldWVDbGVhcmFibGUiLCJjbGVhclRpbWVvdXQiLCJkZWxldGVRdWV1ZVRpbWVvdXQiLCJxdWV1ZXMiLCJkZWxldGUiLCJzaXplIiwidmFsdWVzIiwibWFw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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@discordeno/rest",
3
- "version": "21.0.0-next.c4f2fc2",
3
+ "version": "21.0.0-next.c842a8a",
4
4
  "main": "./dist/esm/index.js",
5
5
  "types": "./dist/types/index.d.ts",
6
6
  "exports": {
@@ -34,26 +34,26 @@
34
34
  "test:test-type": "tsc --project tests/tsconfig.json"
35
35
  },
36
36
  "dependencies": {
37
- "@discordeno/types": "21.0.0-next.c4f2fc2",
38
- "@discordeno/utils": "21.0.0-next.c4f2fc2"
37
+ "@discordeno/types": "21.0.0-next.c842a8a",
38
+ "@discordeno/utils": "21.0.0-next.c842a8a"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@biomejs/biome": "^1.9.4",
42
42
  "@swc/cli": "^0.5.2",
43
- "@swc/core": "^1.10.12",
44
- "@types/chai": "^5.0.1",
43
+ "@swc/core": "^1.12.9",
44
+ "@types/chai": "^5.2.2",
45
45
  "@types/chai-as-promised": "^8.0.1",
46
46
  "@types/mocha": "^10.0.10",
47
- "@types/node": "^22.13.0",
47
+ "@types/node": "^24.0.1",
48
48
  "@types/sinon": "^17.0.3",
49
49
  "c8": "^10.1.3",
50
- "chai": "^5.1.2",
50
+ "chai": "^5.2.0",
51
51
  "chai-as-promised": "^8.0.1",
52
52
  "dotenv": "^16.4.7",
53
53
  "mocha": "patch:mocha@npm%3A11.0.2#~/.yarn/patches/mocha-npm-11.0.2-b5d6b95284.patch",
54
54
  "sinon": "^19.0.2",
55
55
  "ts-node": "^10.9.2",
56
56
  "tsconfig": "*",
57
- "typescript": "^5.7.3"
57
+ "typescript": "^5.8.3"
58
58
  }
59
59
  }