with-style 5.0.97 → 5.0.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/example.js +19 -5
  2. package/package.json +2 -2
package/example.js CHANGED
@@ -10178,6 +10178,7 @@
10178
10178
  exports.default = void 0;
10179
10179
  var _occamLexers = require_lib();
10180
10180
  var _nonTerminal = _interopRequireDefault(require_nonTerminal2());
10181
+ var _array = require_array2();
10181
10182
  var _partTypes = require_partTypes();
10182
10183
  function _assertThisInitialized(self) {
10183
10184
  if (self === void 0) {
@@ -10325,8 +10326,14 @@
10325
10326
  key: "parse",
10326
10327
  value: function parse(nodes, state, callback) {
10327
10328
  var parsed;
10328
- var part = this.getPart();
10329
- parsed = parsePart(part, nodes, state, callback);
10329
+ var part = this.getPart(), partNodes = [], savedIndex = state.getSavedIndex();
10330
+ parsed = parsePart(part, partNodes, state, callback);
10331
+ if (parsed) {
10332
+ (0, _array).push(nodes, partNodes);
10333
+ }
10334
+ if (!parsed) {
10335
+ state.backtrack(savedIndex);
10336
+ }
10330
10337
  return parsed;
10331
10338
  }
10332
10339
  },
@@ -10734,6 +10741,7 @@
10734
10741
  exports.default = void 0;
10735
10742
  var _occamLexers = require_lib();
10736
10743
  var _collectionOfParts = _interopRequireDefault(require_collectionOfParts());
10744
+ var _array = require_array2();
10737
10745
  var _partTypes = require_partTypes();
10738
10746
  function _assertThisInitialized(self) {
10739
10747
  if (self === void 0) {
@@ -10872,8 +10880,14 @@
10872
10880
  key: "parse",
10873
10881
  value: function parse(nodes, state, callback) {
10874
10882
  var parsed;
10875
- var part = this.getPart();
10876
- parsed = parsePart(part, nodes, state, callback);
10883
+ var part = this.getPart(), partNodes = [], savedIndex = state.getSavedIndex();
10884
+ parsed = parsePart(part, partNodes, state, callback);
10885
+ if (parsed) {
10886
+ (0, _array).push(nodes, partNodes);
10887
+ }
10888
+ if (!parsed) {
10889
+ state.backtrack(savedIndex);
10890
+ }
10877
10891
  return parsed;
10878
10892
  }
10879
10893
  },
@@ -21756,4 +21770,4 @@
21756
21770
  ], "def", superStyle);
21757
21771
  renderStyles();
21758
21772
  })();
21759
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL3NpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ibmYvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9iYXNpYy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2luZGV4LmpzIiwgInNyYy9jc3MvZW50cmllcy5qcyIsICJzcmMvY3NzL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS92ZXJ0aWNhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvaG9yaXpvbnRhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2NoaWxkTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvbG9va0FoZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGVOYW1lcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsL2NvbGxlY3Rpb25PZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2VuZE9mTGluZU5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2xvb2tBaGVhZE1vZGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAic3JjL2Nzcy9ibmYuanMiLCAic3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAic3JjL2NvbnN0YW50cy5qcyIsICJzcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAic3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgInNyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAic3JjL3N0eWxlL3J1bGVTZXQuanMiLCAic3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgInNyYy9zdHlsZS9tZWRpYS5qcyIsICJzcmMvc3R5bGUvbWVkaWFzLmpzIiwgInNyYy9zdHlsZS5qcyIsICJzcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJzcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUUkFDRV9MRVZFTCA9IFwidHJhY2VcIjtcbmV4cG9ydCBjb25zdCBERUJVR19MRVZFTCA9IFwiZGVidWdcIjtcbmV4cG9ydCBjb25zdCBJTkZPX0xFVkVMID0gXCJpbmZvXCI7XG5leHBvcnQgY29uc3QgV0FSTklOR19MRVZFTCA9IFwid2FybmluZ1wiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xFVkVMID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEZBVEFMX0xFVkVMID0gXCJmYXRhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUwsXG4gIEZBVEFMX0xFVkVMXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBERUxFVEVfTUVUSE9ELFxuICBPUFRJT05TX01FVEhPRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFBSQUdNQV9IRUFERVIgPSBcInByYWdtYVwiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9IRUFERVIgPSBcImFjY2VwdFwiO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUiA9IFwibG9jYXRpb25cIjtcbmV4cG9ydCBjb25zdCBVU0VSX0FHRU5UX0hFQURFUiA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSBcImNvbnRlbnQtdHlwZVwiO1xuZXhwb3J0IGNvbnN0IEFVVEhPUklaQVRJT05fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ0FDSEVfQ09OVFJPTF9IRUFERVIgPSBcImNhY2hlLWNvbnRyb2xcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSID0gXCJ0cmFuc2Zlci1lbmNvZGluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSID0gXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIgPSBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19IRUFERVJTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBQUkFHTUFfSEVBREVSLFxuICBBQ0NFUFRfSEVBREVSLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIFVTRVJfQUdFTlRfSEVBREVSLFxuICBDT05URU5UX1RZUEVfSEVBREVSLFxuICBBVVRIT1JJWkFUSU9OX0hFQURFUixcbiAgQ0FDSEVfQ09OVFJPTF9IRUFERVIsXG4gIENPTlRFTlRfTEVOR1RIX0hFQURFUixcbiAgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSLFxuICBDT05URU5UX0RJU1BPU0lUSU9OX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9SRVFVRVNUX01FVEhPRF9IRUFERVJcbn07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU0hJRlRfS0VZX0NPREUgPSAxNjtcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZQ09ERSA9IDI3O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNISUZUX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZQ09ERVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVURjhfRU5DT0RJTkcgPSBcInV0ZjhcIjtcbmV4cG9ydCBjb25zdCBVVEZfOF9FTkNPRElORyA9IFwidXRmLThcIjtcbmV4cG9ydCBjb25zdCBCQVNFNjRfRU5DT0RJTkcgPSBcImJhc2U2NFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVURjhfRU5DT0RJTkcsXG4gIFVURl84X0VOQ09ESU5HLFxuICBCQVNFNjRfRU5DT0RJTkdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFVFhfQ0hBUkFDVEVSID0gXCJcXHUwMDAzXCI7XG5leHBvcnQgY29uc3QgQkFSX0NIQVJBQ1RFUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0hfQ0hBUkFDVEVSID0gXCItXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFVFhfQ0hBUkFDVEVSLFxuICBCQVJfQ0hBUkFDVEVSLFxuICBEQVNIX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUgPSA0Mjk7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERSA9IDUwMDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX0NPREUsXG4gIE9LXzIwMF9TVEFUVVNfQ09ERSxcbiAgRk9VTkRfMzAyX1NUQVRVU19DT0RFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfQ09ERSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfQ09ERSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfQ09ERSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX0NPREUsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19DT0RFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19DT0RFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfTUVTU0FHRSA9IFwiT0tcIjtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX01FU1NBR0UgPSBcIkZvdW5kXCI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX01FU1NBR0UgPSBcIkNyZWF0ZWRcIjtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFID0gXCJTZWUgb3RoZXJcIjtcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFID0gXCJGb3JiaWRkZW5cIjtcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFID0gXCJOb3QgZm91bmRcIjtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm8gY29udGVudFwiO1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIGdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCByZXF1ZXN0XCI7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfTUVTU0FHRSA9IFwiVW5hdXRob3Jpc2VkXCI7XG5leHBvcnQgY29uc3QgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFID0gXCJUb28gbWFueSByZXF1ZXN0c1wiO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0UgPSBcIkludGVybmFsIHNlcnZlciBlcnJvclwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0Vcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENPTE9OX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiB9IGZyb20gXCIuLi9jaGFyYWN0ZXJzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvdmVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSAhPT0gbnVsbCkge1xuICAgIGhlYWRlcnNbZXhpc3RpbmdOYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgPT09IG51bGwpIHtcbiAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcnRGcm9tSG9zdChob3N0KSB7XG4gIGxldCBwb3J0O1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaW5kZXggPSBzZWNvbmRNYXRjaC5pbmRleE9mKENPTE9OX0NIQVJBQ1RFUik7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGNvbnN0IHNlY3VyZSA9IHNlY3VyZUZyb21Ib3N0KGhvc3QpO1xuXG4gICAgcG9ydCA9IHNlY3VyZSA/IDQ0MyA6IDgwOyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdGFydCA9IGluZGV4ICsgMSxcbiAgICAgICAgICBwb3J0U3RyaW5nID0gc2Vjb25kTWF0Y2guc3Vic3RyaW5nKHN0YXJ0KTtcblxuICAgIHBvcnQgPSBOdW1iZXIocG9ydFN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gcG9ydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3VyZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3Qgc2VjdXJlID0gL15odHRwczpcXC9cXC8vLnRlc3QoaG9zdCk7XG5cbiAgcmV0dXJuIHNlY3VyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW146XFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBob3N0bmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gaG9zdG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSkge1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5KSxcbiAgICAgICAgbmFtZXNMZW5ndGggPSBuYW1lcy5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IG5hbWVzTGVuZ3RoIC0gMSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBuYW1lcy5yZWR1Y2UoKHF1ZXJ5U3RyaW5nLCBuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlbbmFtZV0sXG4gICAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSksXG4gICAgICAgICAgICAgICAgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBhbXBlcnNhbmRPck5vdGhpbmcgPSAoaW5kZXggIT09IGxhc3RJbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1QRVJTQU5EX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcbiAgXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfSR7YW1wZXJzYW5kT3JOb3RoaW5nfWA7XG4gIFxuICAgICAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpIHtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHVybCA9IChxdWVyeVN0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX1gIDpcbiAgICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9PyR7cXVlcnlTdHJpbmd9YDtcblxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG92ZXJ3cml0ZSxcbiAgdW5kZXJ3cml0ZSxcbiAgcG9ydEZyb21Ib3N0LFxuICBzZWN1cmVGcm9tSG9zdCxcbiAgaG9zdG5hbWVGcm9tSG9zdCxcbiAgcXVlcnlTdHJpbmdGcm9tUXVlcnksXG4gIHVybEZyb21Ib3N0VVJJQW5kUXVlcnlcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEdFVF9NRVRIT0QsIFBPU1RfTUVUSE9EIH0gZnJvbSBcIi4uL21ldGhvZHNcIjtcbmltcG9ydCB7IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnRlbnRUeXBlc1wiO1xuaW1wb3J0IHsgQUNDRVBUX0hFQURFUiwgQ09OVEVOVF9UWVBFX0hFQURFUiB9IGZyb20gXCIuLi9oZWFkZXJzXCI7XG5pbXBvcnQgeyB1bmRlcndyaXRlLCB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9odHRwXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IEdFVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50ID0gbnVsbDtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3QoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGNvbnRlbnQ7XG4gICAgY29udGVudCA9IGhlYWRlcnM7XG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gUE9TVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50VHlwZSA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFR5cGUpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgdXJsID0gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSxcbiAgICAgICAgYWNjZXB0ID0gaGVhZGVyc1tBQ0NFUFRfSEVBREVSXSB8fCBudWxsLFxuICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVF9IRUFERVIsIGFjY2VwdCk7XG4gIH1cblxuICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKENPTlRFTlRfVFlQRV9IRUFERVIsIGNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIChjb250ZW50ICE9PSBudWxsKSA/XG4gICAgeG1sSHR0cFJlcXVlc3Quc2VuZChjb250ZW50KSA6XG4gICAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0LFxuICBwb3N0LFxuICByZXF1ZXN0XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KSB7XG4gIGNvbnN0IG5hbWUgPSBBQ0NFUFRfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEVfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gY29udGVudFRZcGU7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV2ZWxzIH0gZnJvbSBcIi4vbGV2ZWxzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZHMgfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhlYWRlcnMgfSBmcm9tIFwiLi9oZWFkZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleUNvZGVzIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5jb2RpbmdzIH0gZnJvbSBcIi4vZW5jb2RpbmdzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYXJhY3RlcnMgfSBmcm9tIFwiLi9jaGFyYWN0ZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c0NvZGVzIH0gZnJvbSBcIi4vc3RhdHVzQ29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29udGVudFR5cGVzIH0gZnJvbSBcIi4vY29udGVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c01lc3NhZ2VzIH0gZnJvbSBcIi4vc3RhdHVzTWVzc2FnZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBhamF4VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FqYXhcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXRoVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHR0cFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9odHRwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5jb25zdCB7IExFU1NfVEhBTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIsIEdSRUFURVJfVEhBTl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcclxuICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvLCBBTVBFUlNBTkRfQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU5fQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSKTtcclxuXHJcbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZVR5cGUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBuYW1lVHlwZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IGNvbW1lbnRUeXBlID0gXCJjb21tZW50XCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lVHlwZSA9IFwiZW5kLW9mLWxpbmVcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlVHlwZSA9IFwid2hpdGVzcGFjZVwiO1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxUeXBlID0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZUNvbW1lbnRUeXBlID0gYCR7ZW5kT2ZMaW5lVHlwZX0gJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25UeXBlID0gXCJyZWd1bGFyLWV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYGVuZC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgc3RhcnQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBtaWRkbGUtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZVR5cGUsXG4gIG5hbWVUeXBlLFxuICBjb21tZW50VHlwZSxcbiAgZW5kT2ZMaW5lVHlwZSxcbiAgd2hpdGVzcGFjZVR5cGUsXG4gIHN0cmluZ0xpdGVyYWxUeXBlLFxuICBlbmRPZkxpbmVDb21tZW50VHlwZSxcbiAgc2luZ2xlTGluZUNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbmVjZXNzYXJ5ID0gcmVxdWlyZShcIm5lY2Vzc2FyeVwiKTtcbnZhciBfY29udGVudCA9IHJlcXVpcmUoXCIuL3V0aWxpdGllcy9jb250ZW50XCIpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBmaXJzdCA9IF9uZWNlc3NhcnkuYXJyYXlVdGlsaXRpZXMuZmlyc3Q7XG52YXIgVG9rZW4gPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFRva2VuKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRva2VuKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy5pbm5lckhUTUwgPSBpbm5lckhUTUw7XG4gICAgICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFRva2VuLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRUeXBlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0Q29udGVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbnRlbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldElubmVySFRNTFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldElubmVySFRNTCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRDb250ZW50TGVuZ3RoXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29udGVudExlbmd0aCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc1NpZ25pZmljYW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNTaWduaWZpY2FudCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzQ29tbWVudFRva2VuXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNDb21tZW50VG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKF90eXBlcy5jb21tZW50VHlwZSksIGNvbW1lbnRUb2tlbiA9IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlOyAvLy9cbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNFbmRPZkxpbmVUb2tlblwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW5kT2ZMaW5lVG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGVFbmRPZkxpbmVUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKF90eXBlcy5lbmRPZkxpbmVUeXBlKSwgZW5kT2ZMaW5lVG9rZW4gPSB0eXBlRW5kT2ZMaW5lVHlwZTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNXaGl0ZXNwYWNlVG9rZW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1doaXRlc3BhY2VUb2tlbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZVdoaXRlc3BhY2VUeXBlID0gdGhpcy50eXBlID09PSBfdHlwZXMud2hpdGVzcGFjZVR5cGUsIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdoaXRlc3BhY2VUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzRXF1YWxUb1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRXF1YWxUbyh0b2tlbikge1xuICAgICAgICAgICAgICAgIHZhciBlcXVhbFRvVG9rZW4gPSB0aGlzID09PSB0b2tlbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxUb1Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaCh0b2tlbikge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdG9rZW4uZ2V0VHlwZSgpLCBjb250ZW50ID0gdG9rZW4uZ2V0Q29udGVudCgpLCBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSwgbWF0Y2hlcyA9IHRoaXMudHlwZSA9PT0gdHlwZSAmJiB0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQgJiYgdGhpcy5zaWduaWZpY2FudCA9PT0gc2lnbmlmaWNhbnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc0hUTUxcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc0hUTUwoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMudHlwZSwgaHRtbCA9IFwiPHNwYW4gY2xhc3M9XFxcIlwiLmNvbmNhdChjbGFzc05hbWUsIFwiXFxcIj5cIikuY29uY2F0KHRoaXMuaW5uZXJIVE1MLCBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT09IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IC8vL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IF9jb25zdHJ1Y3QoQ2xhc3MsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRcbiAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ3VsYXJFeHByZXNzaW9uID0gQ2xhc3MucmVndWxhckV4cHJlc3Npb24sIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBtYXRjaGVzLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBDbGFzcy50eXBlLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gX2NvbnN0cnVjdChDbGFzcywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBDbGFzcy50eXBlLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIHRva2VuID0gX2NvbnN0cnVjdChDbGFzcywgW1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudEFuZFR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KSB7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVtYWluaW5nQXJndW1lbnRzID0gbmV3IEFycmF5KF9sZW4gPiA0ID8gX2xlbiAtIDQgOiAwKSwgX2tleSA9IDQ7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdBcmd1bWVudHNbX2tleSAtIDRdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2FuaXRpc2VkQ29udGVudCA9ICgwLCBfY29udGVudCkuc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLCBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCB0b2tlbiA9IF9jb25zdHJ1Y3QoQ2xhc3MsIFtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MLFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFRva2VuO1xufSgpO1xuZXhwb3J0cy5kZWZhdWx0ID0gVG9rZW47XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5MGIydGxiaTVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElIc2dZWEp5WVhsVmRHbHNhWFJwWlhNZ2ZTQm1jbTl0SUZ3aWJtVmpaWE56WVhKNVhDSTdYRzVjYm1sdGNHOXlkQ0I3SUhOaGJtbDBhWE5sUTI5dWRHVnVkQ0I5SUdaeWIyMGdYQ0l1TDNWMGFXeHBkR2xsY3k5amIyNTBaVzUwWENJN1hHNXBiWEJ2Y25RZ2V5QmpiMjF0Wlc1MFZIbHdaU3dnWlc1a1QyWk1hVzVsVkhsd1pTd2dkMmhwZEdWemNHRmpaVlI1Y0dVZ2ZTQm1jbTl0SUZ3aUxpOTBlWEJsYzF3aU8xeHVYRzVqYjI1emRDQjdJR1pwY25OMElIMGdQU0JoY25KaGVWVjBhV3hwZEdsbGN6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1ZHOXJaVzRnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaWgwZVhCbExDQmpiMjUwWlc1MExDQnBibTVsY2toVVRVd3NJSE5wWjI1cFptbGpZVzUwS1NCN1hHNGdJQ0FnZEdocGN5NTBlWEJsSUQwZ2RIbHdaVHRjYmlBZ0lDQjBhR2x6TG1OdmJuUmxiblFnUFNCamIyNTBaVzUwTzF4dUlDQWdJSFJvYVhNdWFXNXVaWEpJVkUxTUlEMGdhVzV1WlhKSVZFMU1PMXh1SUNBZ0lIUm9hWE11YzJsbmJtbG1hV05oYm5RZ1BTQnphV2R1YVdacFkyRnVkRHRjYmlBZ2ZWeHVYRzRnSUdkbGRGUjVjR1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWRIbHdaVHRjYmlBZ2ZWeHVYRzRnSUdkbGRFTnZiblJsYm5Rb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZMjl1ZEdWdWREdGNiaUFnZlZ4dUlDQmNiaUFnWjJWMFNXNXVaWEpJVkUxTUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx1Ym1WeVNGUk5URHRjYmlBZ2ZWeHVYRzRnSUdkbGRFTnZiblJsYm5STVpXNW5kR2dvS1NCN1hHNGdJQ0FnWTI5dWMzUWdZMjl1ZEdWdWRFeGxibWQwYUNBOUlIUm9hWE11WTI5dWRHVnVkQzVzWlc1bmRHZzdYRzVjYmlBZ0lDQnlaWFIxY200Z1kyOXVkR1Z1ZEV4bGJtZDBhRHRjYmlBZ2ZWeHVYRzRnSUdselUybG5ibWxtYVdOaGJuUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YzJsbmJtbG1hV05oYm5RN1hHNGdJSDFjYmlBZ1hHNGdJR2x6UTI5dGJXVnVkRlJ2YTJWdUtDa2dlMXh1SUNBZ0lHTnZibk4wSUhSNWNHVkpibU5zZFdSbGMwTnZiVzFsYm5SVWVYQmxJRDBnZEdocGN5NTBlWEJsTG1sdVkyeDFaR1Z6S0dOdmJXMWxiblJVZVhCbEtTeGNiaUFnSUNBZ0lDQWdJQ0JqYjIxdFpXNTBWRzlyWlc0Z1BTQjBlWEJsU1c1amJIVmtaWE5EYjIxdFpXNTBWSGx3WlRzZ0x5OHZYRzVjYmlBZ0lDQnlaWFIxY200Z1kyOXRiV1Z1ZEZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhORmJtUlBaa3hwYm1WVWIydGxiaWdwSUh0Y2JpQWdJQ0JqYjI1emRDQjBlWEJsUlc1a1QyWk1hVzVsVkhsd1pTQTlJQ2gwYUdsekxuUjVjR1V1YVc1amJIVmtaWE1vWlc1a1QyWk1hVzVsVkhsd1pTa3BMRnh1SUNBZ0lDQWdJQ0FnSUdWdVpFOW1UR2x1WlZSdmEyVnVJRDBnZEhsd1pVVnVaRTltVEdsdVpWUjVjR1U3SUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUdWdVpFOW1UR2x1WlZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhOWGFHbDBaWE53WVdObFZHOXJaVzRvS1NCN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlZkb2FYUmxjM0JoWTJWVWVYQmxJRDBnS0hSb2FYTXVkSGx3WlNBOVBUMGdkMmhwZEdWemNHRmpaVlI1Y0dVcExGeHVJQ0FnSUNBZ0lDQWdJSGRvYVhSbGMzQmhZMlZVYjJ0bGJpQTlJSFI1Y0dWWGFHbDBaWE53WVdObFZIbHdaVHNnTHk4dlhHNWNiaUFnSUNCeVpYUjFjbTRnZDJocGRHVnpjR0ZqWlZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhORmNYVmhiRlJ2S0hSdmEyVnVLU0I3WEc0Z0lDQWdZMjl1YzNRZ1pYRjFZV3hVYjFSdmEyVnVJRDBnS0hSb2FYTWdQVDA5SUhSdmEyVnVLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQmxjWFZoYkZSdlZHOXJaVzQ3WEc0Z0lIMWNibHh1SUNCdFlYUmphQ2gwYjJ0bGJpa2dlMXh1SUNBZ0lHTnZibk4wSUhSNWNHVWdQU0IwYjJ0bGJpNW5aWFJVZVhCbEtDa3NYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHVnVkQ0E5SUhSdmEyVnVMbWRsZEVOdmJuUmxiblFvS1N4Y2JpQWdJQ0FnSUNBZ0lDQnphV2R1YVdacFkyRnVkQ0E5SUhSdmEyVnVMbWx6VTJsbmJtbG1hV05oYm5Rb0tTeGNiaUFnSUNBZ0lDQWdJQ0J0WVhSamFHVnpJRDBnS0NoMGFHbHpMblI1Y0dVZ1BUMDlJSFI1Y0dVcElDWW1JQ2gwYUdsekxtTnZiblJsYm5RZ1BUMDlJR052Ym5SbGJuUXBJQ1ltSUNoMGFHbHpMbk5wWjI1cFptbGpZVzUwSUQwOVBTQnphV2R1YVdacFkyRnVkQ2twTzF4dVhHNGdJQ0FnY21WMGRYSnVJRzFoZEdOb1pYTTdYRzRnSUgxY2JseHVJQ0JoYzBoVVRVd29LU0I3WEc0Z0lDQWdZMjl1YzNRZ1kyeGhjM05PWVcxbElEMGdkR2hwY3k1MGVYQmxMQ0FnTHk4dlhHNGdJQ0FnSUNBZ0lDQWdhSFJ0YkNBOUlHQThjM0JoYmlCamJHRnpjejFjSWlSN1kyeGhjM05PWVcxbGZWd2lQaVI3ZEdocGN5NXBibTVsY2toVVRVeDlQQzl6Y0dGdVBtQTdYRzVjYmlBZ0lDQnlaWFIxY200Z2FIUnRiRHRjYmlBZ2ZWeHVYRzRnSUdOc2IyNWxLRU5zWVhOekxDQnpkR0Z5ZEZCdmMybDBhVzl1TENCbGJtUlFiM05wZEdsdmJpd2djMmxuYm1sbWFXTmhiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHeGxkQ0IwYjJ0bGJpQTlJRzUxYkd3N1hHNWNiaUFnSUNCcFppQW9jM1JoY25SUWIzTnBkR2x2YmlBaFBUMGdaVzVrVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0FnSUd4bGRDQmpiMjUwWlc1MElEMGdkR2hwY3k1blpYUkRiMjUwWlc1MEtDazdYRzVjYmlBZ0lDQWdJR052Ym5SbGJuUWdQU0JqYjI1MFpXNTBMbk4xWW5OMGNtbHVaeWh6ZEdGeWRGQnZjMmwwYVc5dUxDQmxibVJRYjNOcGRHbHZiaWs3SUNBdkx5OWNibHh1SUNBZ0lDQWdZMjl1YzNRZ2RIbHdaU0E5SUhSb2FYTXVaMlYwVkhsd1pTZ3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MyRnVhWFJwYzJWa1EyOXVkR1Z1ZENBOUlITmhibWwwYVhObFEyOXVkR1Z1ZENoamIyNTBaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJR2x1Ym1WeVNGUk5UQ0E5SUhOaGJtbDBhWE5sWkVOdmJuUmxiblE3SUM4dkwxeHVYRzRnSUNBZ0lDQjBiMnRsYmlBOUlHNWxkeUJEYkdGemN5aDBlWEJsTENCamIyNTBaVzUwTENCcGJtNWxja2hVVFV3c0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUIwYjJ0bGJqdGNiaUFnZlZ4dVhHNGdJSE4wWVhScFl5QnRZWFJqYUNoRGJHRnpjeXdnWTI5dWRHVnVkQ3dnYzJsbmJtbG1hV05oYm5Rc0lDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWtnZTF4dUlDQWdJR3hsZENCMGIydGxiaUE5SUc1MWJHdzdYRzVjYmlBZ0lDQmpiMjV6ZENCN0lISmxaM1ZzWVhKRmVIQnlaWE56YVc5dUlIMGdQU0JEYkdGemN5eGNiaUFnSUNBZ0lDQWdJQ0J0WVhSamFHVnpJRDBnWTI5dWRHVnVkQzV0WVhSamFDaHlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpazdYRzVjYmlBZ0lDQnBaaUFvYldGMFkyaGxjeUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdleUJwYm1SbGVDQjlJRDBnYldGMFkyaGxjenRjYmx4dUlDQWdJQ0FnYVdZZ0tHbHVaR1Y0SUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1pwY25OMFRXRjBZMmdnUFNCbWFYSnpkQ2h0WVhSamFHVnpLVHRjYmx4dUlDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1ptbHljM1JOWVhSamFEc2dMeTh2WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTI5dWRHVnVkRXhsYm1kMGFDQTlJR052Ym5SbGJuUXViR1Z1WjNSb08xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNTBaVzUwVEdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIc2dkSGx3WlNCOUlEMGdRMnhoYzNNc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyRnVhWFJwYzJWa1EyOXVkR1Z1ZENBOUlITmhibWwwYVhObFEyOXVkR1Z1ZENoamIyNTBaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJtNWxja2hVVFV3Z1BTQnpZVzVwZEdselpXUkRiMjUwWlc1ME95QXZMeTljYmx4dUlDQWdJQ0FnSUNBZ0lIUnZhMlZ1SUQwZ2JtVjNJRU5zWVhOektIUjVjR1VzSUdOdmJuUmxiblFzSUdsdWJtVnlTRlJOVEN3Z2MybG5ibWxtYVdOaGJuUXNJQzR1TG5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZEc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdabkp2YlVOdmJuUmxiblFvUTJ4aGMzTXNJR052Ym5SbGJuUXNJSE5wWjI1cFptbGpZVzUwTENBdUxpNXlaVzFoYVc1cGJtZEJjbWQxYldWdWRITXBJSHRjYmlBZ0lDQmpiMjV6ZENCN0lIUjVjR1VnZlNBOUlFTnNZWE56TEZ4dUlDQWdJQ0FnSUNBZ0lITmhibWwwYVhObFpFTnZiblJsYm5RZ1BTQnpZVzVwZEdselpVTnZiblJsYm5Rb1kyOXVkR1Z1ZENrc1hHNGdJQ0FnSUNBZ0lDQWdhVzV1WlhKSVZFMU1JRDBnYzJGdWFYUnBjMlZrUTI5dWRHVnVkQ3dnTHk4dlhHNGdJQ0FnSUNBZ0lDQWdkRzlyWlc0Z1BTQnVaWGNnUTJ4aGMzTW9kSGx3WlN3Z1kyOXVkR1Z1ZEN3Z2FXNXVaWEpJVkUxTUxDQnphV2R1YVdacFkyRnVkQ3dnTGk0dWNtVnRZV2x1YVc1blFYSm5kVzFsYm5SektUdGNibHh1SUNBZ0lISmxkSFZ5YmlCMGIydGxianRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJtY205dFEyOXVkR1Z1ZEVGdVpGUjVjR1VvUTJ4aGMzTXNJR052Ym5SbGJuUXNJSFI1Y0dVc0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIdGNiaUFnSUNCamIyNXpkQ0J6WVc1cGRHbHpaV1JEYjI1MFpXNTBJRDBnYzJGdWFYUnBjMlZEYjI1MFpXNTBLR052Ym5SbGJuUXBMRnh1SUNBZ0lDQWdJQ0FnSUdsdWJtVnlTRlJOVENBOUlITmhibWwwYVhObFpFTnZiblJsYm5Rc0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSdmEyVnVJRDBnYm1WM0lFTnNZWE56S0hSNWNHVXNJR052Ym5SbGJuUXNJR2x1Ym1WeVNGUk5UQ3dnYzJsbmJtbG1hV05oYm5Rc0lDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkRzlyWlc0N1hHNGdJSDFjYm4xY2JpSmRMQ0p1WVcxbGN5STZXeUptYVhKemRDSXNJbUZ5Y21GNVZYUnBiR2wwYVdWeklpd2lWRzlyWlc0aUxDSjBlWEJsSWl3aVkyOXVkR1Z1ZENJc0ltbHVibVZ5U0ZSTlRDSXNJbk5wWjI1cFptbGpZVzUwSWl3aVoyVjBWSGx3WlNJc0ltZGxkRU52Ym5SbGJuUWlMQ0puWlhSSmJtNWxja2hVVFV3aUxDSm5aWFJEYjI1MFpXNTBUR1Z1WjNSb0lpd2lZMjl1ZEdWdWRFeGxibWQwYUNJc0lteGxibWQwYUNJc0ltbHpVMmxuYm1sbWFXTmhiblFpTENKcGMwTnZiVzFsYm5SVWIydGxiaUlzSW5SNWNHVkpibU5zZFdSbGMwTnZiVzFsYm5SVWVYQmxJaXdpYVc1amJIVmtaWE1pTENKamIyMXRaVzUwVkhsd1pTSXNJbU52YlcxbGJuUlViMnRsYmlJc0ltbHpSVzVrVDJaTWFXNWxWRzlyWlc0aUxDSjBlWEJsUlc1a1QyWk1hVzVsVkhsd1pTSXNJbVZ1WkU5bVRHbHVaVlI1Y0dVaUxDSmxibVJQWmt4cGJtVlViMnRsYmlJc0ltbHpWMmhwZEdWemNHRmpaVlJ2YTJWdUlpd2lkSGx3WlZkb2FYUmxjM0JoWTJWVWVYQmxJaXdpZDJocGRHVnpjR0ZqWlZSNWNHVWlMQ0ozYUdsMFpYTndZV05sVkc5clpXNGlMQ0pwYzBWeGRXRnNWRzhpTENKMGIydGxiaUlzSW1WeGRXRnNWRzlVYjJ0bGJpSXNJbTFoZEdOb0lpd2liV0YwWTJobGN5SXNJbUZ6U0ZSTlRDSXNJbU5zWVhOelRtRnRaU0lzSW1oMGJXd2lMQ0pqYkc5dVpTSXNJa05zWVhOeklpd2ljM1JoY25SUWIzTnBkR2x2YmlJc0ltVnVaRkJ2YzJsMGFXOXVJaXdpY21WdFlXbHVhVzVuUVhKbmRXMWxiblJ6SWl3aWMzVmljM1J5YVc1bklpd2ljMkZ1YVhScGMyVmtRMjl1ZEdWdWRDSXNJbk5oYm1sMGFYTmxRMjl1ZEdWdWRDSXNJbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJaXdpYVc1a1pYZ2lMQ0ptYVhKemRFMWhkR05vSWl3aVpuSnZiVU52Ym5SbGJuUWlMQ0ptY205dFEyOXVkR1Z1ZEVGdVpGUjVjR1VpWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEVOQlFWa3NWMEZCUVN4RFFVRkRPenM3UlR0M1FqdEJRVVZyUWl4SFFVRlhMRU5CUVZnc1ZVRkJWenRCUVVWV0xFZEJRWEZDTEVOQlFYSkNMRkZCUVhGQ08wRkJRMDBzUjBGQlV5eERRVUZVTEUxQlFWTTdPM2xFTzNWRk96czdPenM3T3pzN096czdPenM3TzJkR096czdPenM3T3p0elF6czdPenM3TzJsRE96czdhVVU3TzFNN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPenM3T3pzN08zVkNPenRMT3pzN096czdPenM3T3l0RU96czdPMEZCUlhCRkxFZEJRVXNzUTBGQlIwRXNTMEZCU3l4SFFVRkxReXhWUVVGakxHZENRVUY0UWtRc1MwRkJTenRKUVVWUlJTeExRVUZMTEdsQ1FVRllMRkZCUVZFN1lVRkJSa0VzUzBGQlN5eERRVU5hUXl4SlFVRkpMRVZCUVVWRExFOUJRVThzUlVGQlJVTXNVMEZCVXl4RlFVRkZReXhYUVVGWE8yOURPMUZCUXk5RExFbEJRVWtzUTBGQlEwZ3NTVUZCU1N4SFFVRkhRU3hKUVVGSkxFTkJRVU03VVVGRGFrSXNTVUZCU1N4RFFVRkRReXhQUVVGUExFZEJRVWRCTEU5QlFVOHNRMEZCUXp0UlFVTjJRaXhKUVVGSkxFTkJRVU5ETEZOQlFWTXNSMEZCUjBFc1UwRkJVeXhEUVVGRE8xRkJRek5DTEVsQlFVa3NRMEZCUTBNc1YwRkJWeXhIUVVGSFFTeFhRVUZYTEVOQlFVTTdPenM3V1VGSGFrTkRMRWRCUVU4c1JVRkJVRUVzUTBGQlR6dHRRa0ZCVUVFc1VVRkJVU3hEUVVGU1FTeFBRVUZQTEVkQlFVY3NRMEZCUXp0blFrRkRWQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZEU2l4SlFVRkpPMWxCUTJ4Q0xFTkJRVU03T3p0WlFVVkVTeXhIUVVGVkxFVkJRVlpCTEVOQlFWVTdiVUpCUVZaQkxGRkJRVkVzUTBGQlVrRXNWVUZCVlN4SFFVRkhMRU5CUVVNN1owSkJRMW9zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUTBvc1QwRkJUenRaUVVOeVFpeERRVUZET3pzN1dVRkZSRXNzUjBGQldTeEZRVUZhUVN4RFFVRlpPMjFDUVVGYVFTeFJRVUZSTEVOQlFWSkJMRmxCUVZrc1IwRkJSeXhEUVVGRE8yZENRVU5rTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOS0xGTkJRVk03V1VGRGRrSXNRMEZCUXpzN08xbEJSVVJMTEVkQlFXZENMRVZCUVdoQ1FTeERRVUZuUWp0dFFrRkJhRUpCTEZGQlFWRXNRMEZCVWtFc1owSkJRV2RDTEVkQlFVY3NRMEZCUXp0blFrRkRiRUlzUjBGQlN5eERRVUZEUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRFVDeFBRVUZQTEVOQlFVTlJMRTFCUVUwN1owSkJSWHBETEUxQlFVMHNRMEZCUTBRc1lVRkJZVHRaUVVOMFFpeERRVUZET3pzN1dVRkZSRVVzUjBGQllTeEZRVUZpUVN4RFFVRmhPMjFDUVVGaVFTeFJRVUZSTEVOQlFWSkJMR0ZCUVdFc1IwRkJSeXhEUVVGRE8yZENRVU5tTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOUUxGZEJRVmM3V1VGRGVrSXNRMEZCUXpzN08xbEJSVVJSTEVkQlFXTXNSVUZCWkVFc1EwRkJZenR0UWtGQlpFRXNVVUZCVVN4RFFVRlNRU3hqUVVGakxFZEJRVWNzUTBGQlF6dG5Ra0ZEYUVJc1IwRkJTeXhEUVVGRFF5eDFRa0ZCZFVJc1IwRkJSeXhKUVVGSkxFTkJRVU5hTEVsQlFVa3NRMEZCUTJFc1VVRkJVU3hEUVVGRFF5eE5RVUZYTEdWQlEzaEVReXhaUVVGWkxFZEJRVWRJTEhWQ1FVRjFRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVnFSQ3hOUVVGTkxFTkJRVU5ITEZsQlFWazdXVUZEY2tJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVdkQ0xFVkJRV2hDUVN4RFFVRm5RanR0UWtGQmFFSkJMRkZCUVZFc1EwRkJVa0VzWjBKQlFXZENMRWRCUVVjc1EwRkJRenRuUWtGRGJFSXNSMEZCU3l4RFFVRkRReXhwUWtGQmFVSXNSMEZCU1N4SlFVRkpMRU5CUVVOcVFpeEpRVUZKTEVOQlFVTmhMRkZCUVZFc1EwRkJRMHNzVFVGQllTeHBRa0ZEY2tSRExHTkJRV01zUjBGQlIwWXNhVUpCUVdsQ0xFVkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdaMEpCUlRkRExFMUJRVTBzUTBGQlEwVXNZMEZCWXp0WlFVTjJRaXhEUVVGRE96czdXVUZGUkVNc1IwRkJhVUlzUlVGQmFrSkJMRU5CUVdsQ08yMUNRVUZxUWtFc1VVRkJVU3hEUVVGU1FTeHBRa0ZCYVVJc1IwRkJSeXhEUVVGRE8yZENRVU51UWl4SFFVRkxMRU5CUVVORExHdENRVUZyUWl4SFFVRkpMRWxCUVVrc1EwRkJRM0pDTEVsQlFVa3NTMEZCUzNOQ0xFMUJRV01zYVVKQlEyeEVReXhsUVVGbExFZEJRVWRHTEd0Q1FVRnJRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVXZReXhOUVVGTkxFTkJRVU5GTEdWQlFXVTdXVUZEZUVJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVZNc1JVRkJWRUVzUTBGQlV6dHRRa0ZCVkVFc1VVRkJVU3hEUVVGU1FTeFRRVUZUTEVOQlFVTkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU5vUWl4SFFVRkxMRU5CUVVORExGbEJRVmtzUjBGQlNTeEpRVUZKTEV0QlFVdEVMRXRCUVVzN1owSkJSWEJETEUxQlFVMHNRMEZCUTBNc1dVRkJXVHRaUVVOeVFpeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRMFlzUzBGQlN5eEZRVUZGTEVOQlFVTTdaMEpCUTFvc1IwRkJTeXhEUVVGRGVrSXNTVUZCU1N4SFFVRkhlVUlzUzBGQlN5eERRVUZEY2tJc1QwRkJUeXhKUVVOd1FrZ3NUMEZCVHl4SFFVRkhkMElzUzBGQlN5eERRVUZEY0VJc1ZVRkJWU3hKUVVNeFFrWXNWMEZCVnl4SFFVRkhjMElzUzBGQlN5eERRVUZEWml4aFFVRmhMRWxCUTJwRGEwSXNUMEZCVHl4SFFVRkxMRWxCUVVrc1EwRkJRelZDTEVsQlFVa3NTMEZCUzBFc1NVRkJTU3hKUVVGTkxFbEJRVWtzUTBGQlEwTXNUMEZCVHl4TFFVRkxRU3hQUVVGUExFbEJRVTBzU1VGQlNTeERRVUZEUlN4WFFVRlhMRXRCUVV0QkxGZEJRVmM3WjBKQlJYaEhMRTFCUVUwc1EwRkJRM2xDTEU5QlFVODdXVUZEYUVJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVUwc1JVRkJUa0VzUTBGQlRUdHRRa0ZCVGtFc1VVRkJVU3hEUVVGU1FTeE5RVUZOTEVkQlFVY3NRMEZCUXp0blFrRkRVaXhIUVVGTExFTkJRVU5ETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNNVFpeEpRVUZKTEVWQlEzSkNLMElzU1VGQlNTeEhRVUZKTEVOQlFXRXNaMEpCUVdkQ0xFMUJRV01zUTBGQk5VSkVMRk5CUVZNc1JVRkJReXhEUVVGRkxFMUJRV2xDTEUxQlFVOHNRMEZCZEVJc1NVRkJTU3hEUVVGRE5VSXNVMEZCVXl4RlFVRkRMRU5CUVU4N1owSkJSV3BGTEUxQlFVMHNRMEZCUXpaQ0xFbEJRVWs3V1VGRFlpeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4aFFVRmhMRVZCUVVWRExGZEJRVmNzUlVGQlJXaERMRmRCUVZjc1JVRkJlVUlzUTBGQlF6dG5Ra0ZCZUVJc1IwRkJSMmxETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnNSamRGTEVORWEwWTJSVHRuUWtGQlJDeERRVUZETzJkQ1FVTjZSU3hIUVVGSExFTkJRVU5ZTEV0QlFVc3NSMEZCUnl4SlFVRkpPMmRDUVVWb1FpeEZRVUZGTEVWQlFVVlRMR0ZCUVdFc1MwRkJTME1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdiMEpCUTJ4RExFZEJRVWNzUTBGQlEyeERMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU5KTEZWQlFWVTdiMEpCUlRkQ1NpeFBRVUZQTEVkQlFVZEJMRTlCUVU4c1EwRkJRMjlETEZOQlFWTXNRMEZCUTBnc1lVRkJZU3hGUVVGRlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yOUNRVVUzUkN4SFFVRkxMRU5CUVVOdVF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRTU3hQUVVGUExFbEJRMjVDYTBNc1owSkJRV2RDTEU5QlFVZERMRkZCUVdVc2EwSkJRVU4wUXl4UFFVRlBMRWRCUXpGRFF5eFRRVUZUTEVkQlFVZHZReXhuUWtGQlowSXNSVUZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRmRrTmlMRXRCUVVzc1kwRkJUMUVzUzBGQlN5eEZRVUZVTEVOQlFVTTdkMEpCUVZOcVF5eEpRVUZKTzNkQ1FVRkZReXhQUVVGUE8zZENRVUZGUXl4VFFVRlRPM2RDUVVGRlF5eFhRVUZYTzI5Q1FVRjFRaXhEUVVGRExFTkJRWFpGTEUxQlFYVkZMRzlDUVVGdVFtbERMR3RDUVVGclFpeEhRVUZETEVOQlFVTTdaMEpCUTJ4R0xFTkJRVU03WjBKQlJVUXNUVUZCVFN4RFFVRkRXQ3hMUVVGTE8xbEJRMlFzUTBGQlF6czdPenRaUVVWTlJTeEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVm9zVVVGQlVTeERRVUZFUVN4TFFVRkxMRU5CUVVOTkxFdEJRVXNzUlVGQlJXaERMRTlCUVU4c1JVRkJSVVVzVjBGQlZ5eEZRVUY1UWl4RFFVRkRPMmRDUVVGNFFpeEhRVUZIYVVNc1EwRkJTQ3hIUVVGeFFpeERRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeFRRVUZ4UWl4RFFVRnlRaXhOUVVGeFFpeEZRVUZzUWtFc2EwSkJRV3RDTEVkQlFYSkNMRWRCUVhGQ0xFOUJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRWEZDTEVkQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRTlCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFVkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFbEJRWEZDTEVWQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFVTTdiMEpCUVVWQkxHdENRVUZyUWl4RFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhKUVVGeVFpeFRRVUZ4UWl4RFFVRnlRaXhKUVVGeFFpeERRM0JIYWtVc1EwUnZSMmxGTzJkQ1FVRkVMRU5CUVVNN1owSkJRemRFTEVkQlFVY3NRMEZCUTFnc1MwRkJTeXhIUVVGSExFbEJRVWs3WjBKQlJXaENMRWRCUVVzc1EwRkJSMlVzYVVKQlFXbENMRWRCUVV0UUxFdEJRVXNzUTBGQk0wSlBMR2xDUVVGcFFpeEZRVU51UWxvc1QwRkJUeXhIUVVGSE0wSXNUMEZCVHl4RFFVRkRNRUlzUzBGQlN5eERRVUZEWVN4cFFrRkJhVUk3WjBKQlJTOURMRVZCUVVVc1JVRkJSVm9zVDBGQlR5eExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPMjlDUVVOeVFpeEhRVUZMTEVOQlFVZGhMRXRCUVVzc1IwRkJTMklzVDBGQlR5eERRVUZxUW1Fc1MwRkJTenR2UWtGRllpeEZRVUZGTEVWQlFVVkJMRXRCUVVzc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF6dDNRa0ZEYUVJc1IwRkJTeXhEUVVGRFF5eFZRVUZWTEVkQlFVYzNReXhMUVVGTExFTkJRVU1yUWl4UFFVRlBPM2RDUVVWb1F6TkNMRTlCUVU4c1IwRkJSM2xETEZWQlFWVXNRMEZCUXl4RFFVRkRMRVZCUVVjc1FVRkJTQ3hEUVVGSE8zZENRVVY2UWl4SFFVRkxMRU5CUVVOc1F5eGhRVUZoTEVkQlFVZFFMRTlCUVU4c1EwRkJRMUVzVFVGQlRUdDNRa0ZGY0VNc1JVRkJSU3hGUVVGRlJDeGhRVUZoTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNN05FSkJRM1JDTEVkQlFVc3NRMEZCUjFJc1NVRkJTU3hIUVVGTGFVTXNTMEZCU3l4RFFVRmtha01zU1VGQlNTeEZRVU5PYzBNc1owSkJRV2RDTEU5QlFVZERMRkZCUVdVc2EwSkJRVU4wUXl4UFFVRlBMRWRCUXpGRFF5eFRRVUZUTEVkQlFVZHZReXhuUWtGQlowSXNSVUZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenMwUWtGRmRrTmlMRXRCUVVzc1kwRkJUMUVzUzBGQlN5eEZRVUZVTEVOQlFVTTdaME5CUVZOcVF5eEpRVUZKTzJkRFFVRkZReXhQUVVGUE8yZERRVUZGUXl4VFFVRlRPMmREUVVGRlF5eFhRVUZYT3pSQ1FVRjFRaXhEUVVGRExFTkJRWFpGTEUxQlFYVkZMRzlDUVVGdVFtbERMR3RDUVVGclFpeEhRVUZETEVOQlFVTTdkMEpCUTJ4R0xFTkJRVU03YjBKQlEwZ3NRMEZCUXp0blFrRkRTQ3hEUVVGRE8yZENRVVZFTEUxQlFVMHNRMEZCUTFnc1MwRkJTenRaUVVOa0xFTkJRVU03T3p0WlFVVk5hMElzUjBGQlZ5eEZRVUZZUVN4RFFVRlhPMjFDUVVGc1FpeFJRVUZSTEVOQlFVUkJMRmRCUVZjc1EwRkJRMVlzUzBGQlN5eEZRVUZGYUVNc1QwRkJUeXhGUVVGRlJTeFhRVUZYTEVWQlFYbENMRU5CUVVNN1owSkJRWGhDTEVkQlFVZHBReXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORGFrbDJSU3hEUkdsSmRVVTdaMEpCUVVRc1EwRkJRenRuUWtGRGJrVXNSMEZCU3l4RFFVRkhjRU1zU1VGQlNTeEhRVUZMYVVNc1MwRkJTeXhEUVVGa2FrTXNTVUZCU1N4RlFVTk9jME1zWjBKQlFXZENMRTlCUVVkRExGRkJRV1VzYTBKQlFVTjBReXhQUVVGUExFZEJRekZEUXl4VFFVRlRMRWRCUVVkdlF5eG5Ra0ZCWjBJc1JVRkROVUppTEV0QlFVc3NZMEZCVDFFc1MwRkJTeXhGUVVGVUxFTkJRVU03YjBKQlFWTnFReXhKUVVGSk8yOUNRVUZGUXl4UFFVRlBPMjlDUVVGRlF5eFRRVUZUTzI5Q1FVRkZReXhYUVVGWE8yZENRVUYxUWl4RFFVRkRMRU5CUVhaRkxFMUJRWFZGTEc5Q1FVRnVRbWxETEd0Q1FVRnJRanRuUWtGRmNFWXNUVUZCVFN4RFFVRkRXQ3hMUVVGTE8xbEJRMlFzUTBGQlF6czdPMWxCUlUxdFFpeEhRVUZyUWl4RlFVRnNRa0VzUTBGQmEwSTdiVUpCUVhwQ0xGRkJRVkVzUTBGQlJFRXNhMEpCUVd0Q0xFTkJRVU5ZTEV0QlFVc3NSVUZCUldoRExFOUJRVThzUlVGQlJVUXNTVUZCU1N4RlFVRkZSeXhYUVVGWExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRwUXl4RFFVRklMRWRCUVhGQ0xFTkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xGTkJRWEZDTEVOQlFYSkNMRTFCUVhGQ0xFVkJRV3hDUVN4clFrRkJhMElzUjBGQmNrSXNSMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUjBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNUMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1JVRkJja0lzU1VGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQlF6dHZRa0ZCUlVFc2EwSkJRV3RDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRWxCUVhKQ0xGTkJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFTkRNVWx3Uml4RFJEQkpiMFk3WjBKQlFVUXNRMEZCUXp0blFrRkRhRVlzUjBGQlN5eERRVUZEUlN4blFrRkJaMElzVDBGQlIwTXNVVUZCWlN4clFrRkJRM1JETEU5QlFVOHNSMEZETVVORExGTkJRVk1zUjBGQlIyOURMR2RDUVVGblFpeEZRVU0xUW1Jc1MwRkJTeXhqUVVGUFVTeExRVUZMTEVWQlFWUXNRMEZCUXp0dlFrRkJVMnBETEVsQlFVazdiMEpCUVVWRExFOUJRVTg3YjBKQlFVVkRMRk5CUVZNN2IwSkJRVVZETEZkQlFWYzdaMEpCUVhWQ0xFTkJRVU1zUTBGQmRrVXNUVUZCZFVVc2IwSkJRVzVDYVVNc2EwSkJRV3RDTzJkQ1FVVndSaXhOUVVGTkxFTkJRVU5ZTEV0QlFVczdXVUZEWkN4RFFVRkRPenROT3pzN2EwSkJka2xyUWpGQ0xFdEJRVXNzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfdG9rZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi90b2tlblwiKSk7XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGZvcih2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKWFycjJbaV0gPSBhcnJbaV07XG4gICAgcmV0dXJuIGFycjI7XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICAgIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obik7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBzaWduaWZpY2FudCA9IHRydWU7XG52YXIgU2lnbmlmaWNhbnRUb2tlbiA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oVG9rZW4pIHtcbiAgICBfaW5oZXJpdHMoU2lnbmlmaWNhbnRUb2tlbiwgVG9rZW4pO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2lnbmlmaWNhbnRUb2tlbik7XG4gICAgZnVuY3Rpb24gU2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhTaWduaWZpY2FudFRva2VuLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIF9pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247IC8vL1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlbiA9IChfaW5zdGFuY2UgPSBfZ2V0KF9nZXRQcm90b3R5cGVPZihTaWduaWZpY2FudFRva2VuLnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykpLmNhbGwuYXBwbHkoX2luc3RhbmNlLCBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRcbiAgICAgICAgICAgICAgICBdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocmVtYWluaW5nQXJndW1lbnRzKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaChDbGFzcywgY29udGVudCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIF9Ub2tlbjtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBDbGFzczsgLy8vXG4gICAgICAgICAgICAgICAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBzaWduaWZpY2FudFRva2VuID0gKF9Ub2tlbiA9IF90b2tlbi5kZWZhdWx0KS5tYXRjaC5hcHBseShfVG9rZW4sIFtcbiAgICAgICAgICAgICAgICAgICAgQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21Db250ZW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBfVG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlbiA9IChfVG9rZW4gPSBfdG9rZW4uZGVmYXVsdCkuZnJvbUNvbnRlbnQuYXBwbHkoX1Rva2VuLCBbXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudEFuZFR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBfVG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29udGVudDsgLy8vXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBDbGFzczsgLy8vXG4gICAgICAgICAgICAgICAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBzaWduaWZpY2FudFRva2VuID0gKF9Ub2tlbiA9IF90b2tlbi5kZWZhdWx0KS5mcm9tQ29udGVudEFuZFR5cGUuYXBwbHkoX1Rva2VuLCBbXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbjtcbn0oX3Rva2VuLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gU2lnbmlmaWNhbnRUb2tlbjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MGIydGxiaTl6YVdkdWFXWnBZMkZ1ZEM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1YVcxd2IzSjBJRlJ2YTJWdUlHWnliMjBnWENJdUxpOTBiMnRsYmx3aU8xeHVYRzVqYjI1emRDQnphV2R1YVdacFkyRnVkQ0E5SUhSeWRXVTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTnBaMjVwWm1sallXNTBWRzlyWlc0Z1pYaDBaVzVrY3lCVWIydGxiaUI3WEc0Z0lHTnNiMjVsS0VOc1lYTnpMQ0J6ZEdGeWRGQnZjMmwwYVc5dUxDQmxibVJRYjNOcGRHbHZiaXdnTGk0dWNtVnRZV2x1YVc1blFYSm5kVzFsYm5SektTQjdYRzRnSUNBZ2FXWWdLR1Z1WkZCdmMybDBhVzl1SUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJR1Z1WkZCdmMybDBhVzl1SUQwZ2MzUmhjblJRYjNOcGRHbHZianNnSUM4dkwxeHVJQ0FnSUNBZ2MzUmhjblJRYjNOcGRHbHZiaUE5SUVOc1lYTnpPeUFnTHk4dlhHNGdJQ0FnSUNCRGJHRnpjeUE5SUZOcFoyNXBabWxqWVc1MFZHOXJaVzQ3SUM4dkwxeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJSE5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J6ZFhCbGNpNWpiRzl1WlNoRGJHRnpjeXdnYzNSaGNuUlFiM05wZEdsdmJpd2daVzVrVUc5emFYUnBiMjRzSUhOcFoyNXBabWxqWVc1MExDQXVMaTV5WlcxaGFXNXBibWRCY21kMWJXVnVkSE1wTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE5wWjI1cFptbGpZVzUwVkc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdiV0YwWTJnb1EyeGhjM01zSUdOdmJuUmxiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHbG1JQ2hqYjI1MFpXNTBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHTnZiblJsYm5RZ1BTQkRiR0Z6Y3pzZ0lDOHZMMXh1SUNBZ0lDQWdRMnhoYzNNZ1BTQlRhV2R1YVdacFkyRnVkRlJ2YTJWdU95QXZMeTljYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCemFXZHVhV1pwWTJGdWRGUnZhMlZ1SUQwZ1ZHOXJaVzR1YldGMFkyZ29RMnhoYzNNc0lHTnZiblJsYm5Rc0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhOcFoyNXBabWxqWVc1MFZHOXJaVzQ3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVTnZiblJsYm5Rb1EyeGhjM01zSUdOdmJuUmxiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHbG1JQ2hqYjI1MFpXNTBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHTnZiblJsYm5RZ1BTQkRiR0Z6Y3pzZ0lDOHZMMXh1SUNBZ0lDQWdRMnhoYzNNZ1BTQlRhV2R1YVdacFkyRnVkRlJ2YTJWdU95QXZMeTljYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCemFXZHVhV1pwWTJGdWRGUnZhMlZ1SUQwZ1ZHOXJaVzR1Wm5KdmJVTnZiblJsYm5Rb1EyeGhjM01zSUdOdmJuUmxiblFzSUhOcFoyNXBabWxqWVc1MExDQXVMaTV5WlcxaGFXNXBibWRCY21kMWJXVnVkSE1wTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE5wWjI1cFptbGpZVzUwVkc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdabkp2YlVOdmJuUmxiblJCYm1SVWVYQmxLRU5zWVhOekxDQmpiMjUwWlc1MExDQjBlWEJsTENBdUxpNXlaVzFoYVc1cGJtZEJjbWQxYldWdWRITXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pTQTlQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnSUNCMGVYQmxJRDBnWTI5dWRHVnVkRHNnTHk4dlhHNGdJQ0FnSUNCamIyNTBaVzUwSUQwZ1EyeGhjM003SUNBdkx5OWNiaUFnSUNBZ0lFTnNZWE56SUQwZ1UybG5ibWxtYVdOaGJuUlViMnRsYmpzZ0x5OHZYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnYzJsbmJtbG1hV05oYm5SVWIydGxiaUE5SUZSdmEyVnVMbVp5YjIxRGIyNTBaVzUwUVc1a1ZIbHdaU2hEYkdGemN5d2dZMjl1ZEdWdWRDd2dkSGx3WlN3Z2MybG5ibWxtYVdOaGJuUXNJQzR1TG5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lrN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzJsbmJtbG1hV05oYm5SVWIydGxianRjYmlBZ2ZWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYkluTnBaMjVwWm1sallXNTBJaXdpVTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1Oc2IyNWxJaXdpUTJ4aGMzTWlMQ0p6ZEdGeWRGQnZjMmwwYVc5dUlpd2laVzVrVUc5emFYUnBiMjRpTENKeVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNaUxDSjFibVJsWm1sdVpXUWlMQ0p6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpYldGMFkyZ2lMQ0pqYjI1MFpXNTBJaXdpVkc5clpXNGlMQ0ptY205dFEyOXVkR1Z1ZENJc0ltWnliMjFEYjI1MFpXNTBRVzVrVkhsd1pTSXNJblI1Y0dVaVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFTkJRVmtzVjBGQlFTeERRVUZET3pzN1JUdDNRanRCUVVWTExFZEJRVlVzUTBGQlZpeE5RVUZWT3p0NVJEdDFSVHM3T3pzN096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdPenM3T3pzN2RVSTdPMHM3T3pzN08zZERPenM3T3pzN096czdNa0k3T3pzN096czdLMFE3T3pzN096czdPenR4UmpzN096czdPenM3T3pzN08yMUZPenRwUkRzN096czdRVUZGTlVJc1IwRkJTeXhEUVVGRFFTeFhRVUZYTEVkQlFVY3NTVUZCU1R0SlFVVklReXhuUWtGQlowSXNhVUpCUVhSQ0xGRkJRVkU3YzBNN08yRkJRVVpCTEdkQ1FVRm5RanNyUXpzN096czdXVUZEYmtORExFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNZVUZCWVN4RlFVRkZReXhYUVVGWExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTlFhRVVzUTBSUFowVTdaMEpCUVVRc1EwRkJRenR2UWtGUGJrTXNVMEZCU3p0blFrRk9PVUlzUlVGQlJTeEZRVUZGUkN4WFFVRlhMRXRCUVV0RkxGTkJRVk1zUlVGQlJTeERRVUZETzI5Q1FVTTVRa1lzVjBGQlZ5eEhRVUZIUkN4aFFVRmhMRU5CUVVNc1EwRkJSU3hGUVVGSExFRkJRVWdzUTBGQlJ6dHZRa0ZEYWtOQkxHRkJRV0VzUjBGQlIwUXNTMEZCU3l4RFFVRkRMRU5CUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3YjBKQlF6TkNRU3hMUVVGTExFZEJRVWRHTEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJ5eEJRVUZJTEVOQlFVYzdaMEpCUXk5Q0xFTkJRVU03WjBKQlJVUXNSMEZCU3l4RFFVRkRUeXhuUWtGQlowSXNTVUZCUnl4VFFVRkxMSGRDUVZKaVVDeG5Ra0ZCWjBJc1lVRlJSa01zUTBGQlN5eFJRVUZZTEVsQlFVc3NZMEZCVEN4VFFVRkxPenR2UWtGQlQwTXNTMEZCU3p0dlFrRkJSVU1zWVVGQllUdHZRa0ZCUlVNc1YwRkJWenR2UWtGQlJVd3NWMEZCVnpzMFEwRkJTMDBzYTBKQlFXdENPMmRDUVVVeFJ5eE5RVUZOTEVOQlFVTkZMR2RDUVVGblFqdFpRVU42UWl4RFFVRkRPenM3TzFsQlJVMURMRWRCUVVzc1JVRkJURUVzUTBGQlN6dHRRa0ZCV2l4UlFVRlJMRU5CUVVSQkxFdEJRVXNzUTBGQlEwNHNTMEZCU3l4RlFVRkZUeXhQUVVGUExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRLTEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnVRbkJFTEVORWJVSnZSRHRuUWtGQlJDeERRVUZETzI5Q1FVMTJRa3NzVFVGQlN6dG5Ra0ZNT1VJc1JVRkJSU3hGUVVGRlJDeFBRVUZQTEV0QlFVdElMRk5CUVZNc1JVRkJSU3hEUVVGRE8yOUNRVU14UWtjc1QwRkJUeXhIUVVGSFVDeExRVUZMTEVOQlFVTXNRMEZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRGNrSkJMRXRCUVVzc1IwRkJSMFlzWjBKQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZETDBJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTlBMR2RDUVVGblFpeEpRVUZIUnl4TlFVRkxMRWRCUVV4QkxFMUJRVXNzVlVGQlEwWXNTMEZCU3l4RFFVRllSU3hMUVVFclJDeERRVUV2UkVFc1RVRkJTeXhGUVVGTVFTeERRVUZETzI5Q1FVRlhVaXhMUVVGTE8yOUNRVUZGVHl4UFFVRlBPMjlDUVVGRlZpeFhRVUZYTzJkQ1FVRjFRaXhEUVVGRExFTkJRUzlFVnl4TlFVRXJSQ3h2UWtGQmJrSk1MR3RDUVVGclFqdG5Ra0ZGZGtZc1RVRkJUU3hEUVVGRFJTeG5Ra0ZCWjBJN1dVRkRla0lzUTBGQlF6czdPMWxCUlUxSkxFZEJRVmNzUlVGQldFRXNRMEZCVnp0dFFrRkJiRUlzVVVGQlVTeERRVUZFUVN4WFFVRlhMRU5CUVVOVUxFdEJRVXNzUlVGQlJVOHNUMEZCVHl4RlFVRjVRaXhEUVVGRE8yZENRVUY0UWl4SFFVRkhTaXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORE9VSXhSQ3hEUkRoQ01FUTdaMEpCUVVRc1EwRkJRenR2UWtGTk4wSkxMRTFCUVVzN1owSkJURGxDTEVWQlFVVXNSVUZCUlVRc1QwRkJUeXhMUVVGTFNDeFRRVUZUTEVWQlFVVXNRMEZCUXp0dlFrRkRNVUpITEU5QlFVOHNSMEZCUjFBc1MwRkJTeXhEUVVGRExFTkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdiMEpCUTNKQ1FTeExRVUZMTEVkQlFVZEdMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJReTlDTEVOQlFVTTdaMEpCUlVRc1IwRkJTeXhEUVVGRFR5eG5Ra0ZCWjBJc1NVRkJSMGNzVFVGQlN5eEhRVUZNUVN4TlFVRkxMRlZCUVVORExGZEJRVmNzUTBGQmFrSkVMRXRCUVhGRkxFTkJRWEpGUVN4TlFVRkxMRVZCUVV4QkxFTkJRVU03YjBKQlFXbENVaXhMUVVGTE8yOUNRVUZGVHl4UFFVRlBPMjlDUVVGRlZpeFhRVUZYTzJkQ1FVRjFRaXhEUVVGRExFTkJRWEpGVnl4TlFVRnhSU3h2UWtGQmJrSk1MR3RDUVVGclFqdG5Ra0ZGTjBZc1RVRkJUU3hEUVVGRFJTeG5Ra0ZCWjBJN1dVRkRla0lzUTBGQlF6czdPMWxCUlUxTExFZEJRV3RDTEVWQlFXeENRU3hEUVVGclFqdHRRa0ZCZWtJc1VVRkJVU3hEUVVGRVFTeHJRa0ZCYTBJc1EwRkJRMVlzUzBGQlN5eEZRVUZGVHl4UFFVRlBMRVZCUVVWSkxFbEJRVWtzUlVGQmVVSXNRMEZCUXp0blFrRkJlRUlzUjBGQlIxSXNRMEZCU0N4SFFVRnhRaXhEUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhUUVVGeFFpeERRVUZ5UWl4TlFVRnhRaXhGUVVGc1FrRXNhMEpCUVd0Q0xFZEJRWEpDTEVkQlFYRkNMRTlCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFZEJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRWEZDTEU5QlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRVZCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRWxCUVhGQ0xFVkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRVU03YjBKQlFVVkJMR3RDUVVGclFpeERRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4SlFVRnlRaXhUUVVGeFFpeERRVUZ5UWl4SlFVRnhRaXhEUTNwRGRrVXNRMFI1UTNWRk8yZENRVUZFTEVOQlFVTTdiMEpCVHpGRFN5eE5RVUZMTzJkQ1FVNDVRaXhGUVVGRkxFVkJRVVZITEVsQlFVa3NTMEZCUzFBc1UwRkJVeXhGUVVGRkxFTkJRVU03YjBKQlEzWkNUeXhKUVVGSkxFZEJRVWRLTEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yOUNRVU51UWtFc1QwRkJUeXhIUVVGSFVDeExRVUZMTEVOQlFVTXNRMEZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRGNrSkJMRXRCUVVzc1IwRkJSMFlzWjBKQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZETDBJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTlBMR2RDUVVGblFpeEpRVUZIUnl4TlFVRkxMRWRCUVV4QkxFMUJRVXNzVlVGQlEwVXNhMEpCUVd0Q0xFTkJRWGhDUml4TFFVRnJSaXhEUVVGc1JrRXNUVUZCU3l4RlFVRk1RU3hEUVVGRE8yOUNRVUYzUWxJc1MwRkJTenR2UWtGQlJVOHNUMEZCVHp0dlFrRkJSVWtzU1VGQlNUdHZRa0ZCUldRc1YwRkJWenRuUWtGQmRVSXNRMEZCUXl4RFFVRnNSbGNzVFVGQmEwWXNiMEpCUVc1Q1RDeHJRa0ZCYTBJN1owSkJSVEZITEUxQlFVMHNRMEZCUTBVc1owSkJRV2RDTzFsQlEzcENMRU5CUVVNN08wMDdPMFZCTjBNeVEwY3NUVUZCU3p0clFrRkJPVUpXTEdkQ1FVRm5RaXhCSW4wPSIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcmVndWxhckV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuICBcbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG4gIFxuICBnZXRSZWd1bGFyRXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIG1hdGNoKGNvbnRlbnQpIHtcbiAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKGNvbnRlbnQsIHRoaXMudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgYXNFbnRyeSgpIHtcbiAgICBjb25zdCBlbnRyeSA9IHt9LFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGAke3RoaXMucmVndWxhckV4cHJlc3Npb259YDtcblxuICAgIGVudHJ5W3RoaXMudHlwZV0gPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm47XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRva2VuKFRva2VuKSB7XG4gICAgY29uc3QgeyB0eXBlLCByZWd1bGFyRXhwcmVzc2lvbiB9ID0gVG9rZW4sXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21FbnRyeShlbnRyeSkge1xuICAgIGNvbnN0IGVudHJ5S2V5cyA9IE9iamVjdC5rZXlzKGVudHJ5KSxcbiAgICAgICAgICBmaXJzdEVudHJ5S2V5ID0gZmlyc3QoZW50cnlLZXlzKSxcbiAgICAgICAgICB0eXBlID0gZmlyc3RFbnRyeUtleSwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gZW50cnlbdHlwZV0sXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKTtcbiAgICAgICAgXG4gICAgcmV0dXJuIHJ1bGU7IFxuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICAgIGNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGUocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSxcbiAgICAgICAgICBmbGFncyA9IHVuaWNvZGUgP1xuICAgICAgICAgICAgICAgICAgICBVIDpcbiAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cChyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4sIGZsYWdzKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ0V4cCwgLy8vXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgY29uc3QgdW5pY29kZVJlZ3VsYXJFeHByZXNzaW9uID0gL3V7LywgLy8vXG4gICAgICAgIGluZGV4ID0gcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLnNlYXJjaCh1bmljb2RlUmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICB1bmljb2RlID0gKGluZGV4ICE9PSAtMSk7XG5cbiAgcmV0dXJuIHVuaWNvZGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgcGx1cyA9IFwiK1wiO1xyXG5leHBvcnQgY29uc3QgZXBzaWxvbiA9IFwiXHUwM0I1XCI7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdG9yID0gXCI7XCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbEJhciA9IFwifFwiO1xyXG5leHBvcnQgY29uc3Qgb3BlbkJyYWNrZXQgPSBcIihcIjtcclxuZXhwb3J0IGNvbnN0IGNsb3NlQnJhY2tldCA9IFwiKVwiO1xyXG5leHBvcnQgY29uc3QgcXVlc3Rpb25NYXJrID0gXCI/XCI7XHJcbmV4cG9ydCBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSBcIiFcIjtcclxuZXhwb3J0IGNvbnN0IE5PX1dISVRFU1BBQ0UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3QgRU5EX09GX0xJTkUgPSBcIjxFTkRfT0ZfTElORT5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwbHVzLFxyXG4gIGVwc2lsb24sXHJcbiAgd2lsZGNhcmQsXHJcbiAgYXN0ZXJpc2ssXHJcbiAgc2VwYXJhdG9yLFxyXG4gIHRlcm1pbmF0b3IsXHJcbiAgdmVydGljYWxCYXIsXHJcbiAgb3BlbkJyYWNrZXQsXHJcbiAgY2xvc2VCcmFja2V0LFxyXG4gIHF1ZXN0aW9uTWFyayxcclxuICBleGNsYW1hdGlvbk1hcmssXHJcbiAgTk9fV0hJVEVTUEFDRSxcclxuICBFTkRfT0ZfTElORVxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzo6Oj18XFxcXHx8XFxcXCh8XFxcXCl8XFxcXD98XFxcXCF8XFxcXCp8XFxcXCt8XFxcXC58XHUwM0I1fDt8PE5PX1dISVRFU1BBQ0U+fDxFTkRfT0ZfTElORT4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidHlwZVwiOiBcIl5cXFxcW1teXFxcXF1dK1xcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bXFxcXHd+XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpIHtcbiAgY29uc3QgdG9rZW5Db21tZW50VG9rZW4gPSB0b2tlbi5pc0NvbW1lbnRUb2tlbigpO1xuXG4gIGlmICh0b2tlbkNvbW1lbnRUb2tlbikge1xuICAgIGNvbnN0IGNvbW1lbnRUb2tlbiA9IHRva2VuLCAvLy9cbiAgICAgICAgICBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gY29tbWVudFRva2VuLmlzSW5Db21tZW50UHJlc2VydmluZygpO1xuXG4gICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGluQ29tbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vbkxleGVyIHtcclxuICBjb25zdHJ1Y3RvcihydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcykge1xyXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xyXG4gICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3NlcztcclxuICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG4gIFxyXG4gIGdldFJ1bGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucnVsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldE5vdEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2UoY29udGVudCwgaW5Db21tZW50ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChjb250ZW50ICE9PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IENsYXNzZXMgPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuXHJcbiAgICAgIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcclxuICAgICAgICBpZiAoQ2xhc3MgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRva2VuID0gQ2xhc3MubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucnVsZXMuc29tZSgocnVsZSkgPT4ge1xyXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHJ1bGUubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZW50ICcke2NvbnRlbnR9JyBjYW5ub3QgYmUgdG9rZW5pc2VkLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcblxyXG4gICAgICBpbkNvbW1lbnQgPSBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCk7XHJcblxyXG4gICAgICBjb25zdCB0b2tlbkNvbnRlbnRMZW5ndGggPSB0b2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5Db250ZW50TGVuZ3RoOyAvLy9cclxuXHJcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xyXG4gICAgY29uc3QgeyBlbnRyaWVzIH0gPSBDbGFzcyxcclxuICAgICAgICAgIEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XHJcbiAgICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBOb3RJbkNvbW1lbnRDbGFzc2VzID0gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKENsYXNzLCBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBydWxlcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gUnVsZS5mcm9tRW50cnkoZW50cnkpKSxcclxuICAgICAgICAgIEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XHJcbiAgY29uc3QgeyBFbmRPZkxpbmVDb21tZW50VG9rZW4sIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9ID0gQ2xhc3MsXHJcbiAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IFtcclxuICAgICAgICAgIEVuZE9mTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW5cclxuICAgICAgICBdO1xyXG5cclxuICByZXR1cm4gSW5Db21tZW50Q2xhc3NlcztcclxufVxyXG5cclxuZnVuY3Rpb24gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xyXG4gIGNvbnN0IHsgRW5kT2ZMaW5lVG9rZW4sXHJcbiAgICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcclxuICAgICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSA9IENsYXNzLFxyXG4gICAgICBOb3RJbkNvbW1lbnRDbGFzc2VzID0gW1xyXG4gICAgICAgIEVuZE9mTGluZVRva2VuLFxyXG4gICAgICAgIFdoaXRlc3BhY2VUb2tlbixcclxuICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcclxuICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuXHJcbiAgICAgIF07XHJcblxyXG4gIHJldHVybiBOb3RJbkNvbW1lbnRDbGFzc2VzO1xyXG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlKSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdoaXRlc3BhY2VUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSB3aGl0ZXNwYWNlVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXltcXHQgXSsvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oPzpcXFxcW15cXHNdfFteXFwvXFxyXFxuXSkqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzdHJpbmdMaXRlcmFsVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGgsXG4gICAgICAgICAgc3RhcnQgPSAxLFxuICAgICAgICAgIGVuZCA9IGNvbnRlbnRMZW5ndGggLSAxLFxuICAgICAgICAgIHN0cmluZyA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RyaW5nTGl0ZXJhbFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKD86XFxcXFteXFxzXXxbXlwiXFxcXFxcclxcbl0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuaW1wb3J0IFdoaXRlc3BhY2VUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgdG9rZW5zRnJvbUJORihibmYpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBibmYsICAvLy9cclxuICAgICAgICAgIHRva2VucyA9IHN1cGVyLnRva2VuaXNlKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJORkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQk5GTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQk5GTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcImRpZ2l0XCI6IFwiXlxcXFxkK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImJyYWNrZXRcIjogXCJeKD86XFxcXCh8XFxcXCkpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwib3BlcmF0b3JcIjogXCJeKD86XFxcXCt8XFxcXC18XFxcXCp8XFxcXC8pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXicoPzpcXFxcW15cXHNdfFteJ1xcXFxcXHJcXG5dKSonLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc2luZ2xlTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eI1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89IyMjKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcclxuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcclxuaW1wb3J0IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gUmVndWxhckV4cHJlc3Npb25Ub2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQmFzaWNMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEJhc2ljTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQmFzaWNMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89XFwqXFwvKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIi4vc3BlY2lhbFN5bWJvbHNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuXHJcbiAgeyBcImNvbG91clwiOiBcIl4jKD86WzAtOWEtZkEtRl17Nn18WzAtOWEtZkEtRl17M30pXCIgfSxcclxuXHJcbiAgeyBcImtleXdvcmRcIjogXCJeKD86IWltcG9ydGFudHxAbWVkaWEpXCIgfSxcclxuXHJcbiAgeyBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKVxcXFwlXCIgfSxcclxuXHJcbiAgeyBcImZyZXF1ZW5jeVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86aHp8a2h6KVwiIH0sXHJcblxyXG4gIHsgXCJmcmFjdGlvblwiOiBcIl5bMS05XVswLTldKj9mclwiIH0sXHJcblxyXG4gIHsgXCJsZW5ndGhcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnB4fGNtfG1tfGlufHB0fHBjKVwiIH0sXHJcblxyXG4gIHsgXCJhbmdsZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86ZGVnfHJhZHxncmFkKVwiIH0sXHJcblxyXG4gIHsgXCJ0aW1lXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpzfG1zKVwiIH0sXHJcblxyXG4gIHsgXCJyZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKylyZW1cIiB9LFxyXG5cclxuICB7IFwiZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKyllbVwiIH0sXHJcblxyXG4gIHsgXCJudW1iZXJcIjogXCJeWzAtOV0rfFswLTldKlxcXFwuWzAtOV0rXCIgfSxcclxuXHJcbiAgeyBcInNwZWNpYWxcIjogXCJeO3w6Onw6fFxcXFwufCx8L3xcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCIgfSxcclxuXHJcbiAgeyBcIm9wZXJhdG9yXCI6IFwiXl4oPzphbmR8bm90fG9ubHkpJFwiIH0sXHJcblxyXG4gIHsgXCJpZGVudGlmaWVyXCI6IFwiXltfYS16QS1aMC05LV0rXCIgfSxcclxuXHJcbiAgeyBcInVuYXJ5LW9wZXJhdG9yXCI6IFwiXlxcXFwrfFxcXFwtXCIgfSxcclxuXHJcbiAgeyBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCIgfVxyXG5cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhDU1NMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKENTU0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKENTU0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gICAgICBkb2N1bWVudCAgICAgICAgICAgICAgOjo9ICAoIHJ1bGUgfCBlcnJvciApKyA7XG5cbiAgICAgIHJ1bGUgICAgICAgICAgICAgICAgICA6Oj0gIG5hbWUgXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgIDo6PSAgcGFydCsgO1xuXG4gICAgICBwYXJ0ICAgICAgICAgICAgICAgICAgOjo9ICBub25UZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVBhcnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBub25UZXJtaW5hbFBhcnQgICAgICAgOjo9ICBjaG9pY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHNlcXVlbmNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBydWxlTmFtZSBsb29rQWhlYWRNb2RpZmllcj9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtaW5hbFBhcnQgICAgICAgICAgOjo9ICBzaWduaWZpY2FudFRva2VuVHlwZVxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmVndWxhckV4cHJlc3Npb25cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVuZE9mTGluZVxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgd2lsZGNhcmRcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydCAgICAgIDo6PSAgXCI8Tk9fV0hJVEVTUEFDRT5cIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgIGNob2ljZU9mUGFydHMgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgKCBcInxcIiBwYXJ0ICkrIFwiKVwiIDtcblxuICAgICAgc2VxdWVuY2VPZlBhcnRzICAgICAgIDo6PSAgXCIoXCIgcGFydCBwYXJ0KyBcIilcIiA7XG5cbiAgICAgIHJ1bGVOYW1lICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlICA6Oj0gIFt0eXBlXSA7XG5cbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uICAgICA6Oj0gIFtyZWd1bGFyLWV4cHJlc3Npb25dIDtcblxuICAgICAgdGVybWluYWxTeW1ib2wgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cbiAgICAgIGVuZE9mTGluZSAgICAgICAgICAgICA6Oj0gIFwiPEVORF9PRl9MSU5FPlwiIDtcblxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgb25lT3JNb3JlUXVhbnRpZmllclxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbG9va0FoZWFkTW9kaWZpZXIgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIhXCIgO1xuXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXIgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIj9cIiA7XG5cbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXIgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiK1wiIDtcblxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXIgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIqXCIgO1xuXG4gICAgICBlcnJvciAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKSB7XG4gIGxldCBwYWRkaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBwYWRkaW5nTGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgcGFkZGluZyArPSBTUEFDRV9DSEFSQUNURVI7XG4gIH1cblxuICByZXR1cm4gcGFkZGluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGggfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzZXROb25UZXJtaW5hbE5vZGUoTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgICAgICBwb3NpdGlvbiA9IGRlZmluaXRpb25zTGVuZ3RoOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbiwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBzdGFydCA9IGRlZmluaXRpb25JbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VEZWZpbml0aW9uKG9sZERlZmluaXRpb24sIG5ld0RlZmluaXRpb24pIHtcbiAgICBjb25zdCBvbGREZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2Yob2xkRGVmaW5pdGlvbik7XG5cbiAgICBpZiAob2xkRGVmaW5pdGlvbkluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gb2xkRGVmaW5pdGlvbkluZGV4LCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBuZXdEZWZpbml0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlKHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBydWxlTm9kZSA9IG51bGw7XG5cbiAgICBzdGF0ZS5pbmNyZWFzZURlcHRoKCk7XG5cbiAgICBjb25zdCB0b29EZWVwID0gc3RhdGUuaXNUb29EZWVwKCk7XG5cbiAgICBpZiAodG9vRGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFyc2UgdHJlZSBpcyB0b28gZGVlcCBhdCBydWxlIFwiJHt0aGlzLm5hbWV9XCIuYCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZCxcbiAgICAgICAgZGVmaW5pdGlvbk5vZGVzO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zb21lKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBkZWZpbml0aW9uTm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgZGVmaW5pdGlvbk5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgICAgY2hpbGROb2RlcyA9IGRlZmluaXRpb25Ob2RlcywgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gdGhpcy5Ob25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICAgIHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBzdGF0ZS5kZWNyZWFzZURlcHRoKCk7XG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBwYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUoQ2xhc3MsIHJ1bGUpIHtcbiAgICBpZiAocnVsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlID0gQ2xhc3M7XG4gICAgICBDbGFzcyA9IFJ1bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBydWxlLmdldE5vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgcnVsZSA9IG5ldyBDbGFzcyhuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWElNVU1fREVQVEggPSA5OTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgREVGQVVMVF9NQVhJTVVNX0RFUFRIIH0gZnJvbSBcIi4vZGVmYXVsdHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge1xuICBjb25zdHJ1Y3RvcihydWxlTWFwLCB0b2tlbnMsIGluZGV4LCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgICB0aGlzLnRva2VucyA9IHRva2Vucztcblx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG5cdFx0dGhpcy5kZXB0aCA9IGRlcHRoO1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG5cdGdldEluZGV4KCkge1xuXHRcdHJldHVybiB0aGlzLmluZGV4O1xuXHR9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVwdGg7XG4gIH1cblxuXHRnZXRNYXhpbXVtRGVwdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4aW11bURlcHRoO1xuXHR9XG5cblx0Z2V0U2F2ZWRJbmRleCgpIHtcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gdGhpcy5pbmRleDsgLy8vXG4gIFxuICAgIHJldHVybiBzYXZlZEluZGV4O1xuICB9XG5cbiAgZ2V0TmV4dFRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgdG9rZW5zTGVuZ3RoID0gdGhpcy50b2tlbnMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuaW5kZXggPCB0b2tlbnNMZW5ndGgpIHtcbiAgICAgIG5leHRUb2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK107XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgfVxuXG4gIGdldE5leHRTaWduaWZpY2FudFRva2VuKCkge1xuXHRcdGxldCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgXHRjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgXHR3aGlsZSAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICBcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4KytdLFxuXHRcdFx0XHRcdFx0dG9rZW5TaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKTtcblxuICBcdFx0aWYgKHRva2VuU2lnbmlmaWNhbnQpIHtcbiAgXHRcdCAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRva2VuOyAvLy9cblxuXHRcdFx0XHRuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XHQvLy9cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cbiAgXHR9XG5cblx0XHRyZXR1cm4gbmV4dFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpIHtcbiAgICBsZXQgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gZmFsc2U7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cbiAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IG5leHRUb2tlbi5pc1doaXRlc3BhY2VUb2tlbigpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuICBpc1Rvb0RlZXAoKSB7XG4gICAgY29uc3QgdG9vRGVlcCA9ICh0aGlzLmRlcHRoID4gdGhpcy5tYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIHRvb0RlZXA7XG4gIH1cblxuXHRiYWNrdHJhY2soc2F2ZWRJbmRleCkge1xuXHRcdHRoaXMuaW5kZXggPSBzYXZlZEluZGV4OyAgLy8vXG5cdH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIGluY3JlYXNlRGVwdGgoKSB7XG4gICAgdGhpcy5kZXB0aCsrO1xuICB9XG5cbiAgZGVjcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoLS07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCBydWxlTWFwKSB7XG4gICAgY29uc3QgaW5kZXggPSAwLFxuXHRcdFx0XHRcdGRlcHRoID0gMCxcblx0XHRcdFx0XHRtYXhpbXVtRGVwdGggPSBERUZBVUxUX01BWElNVU1fREVQVEgsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUocnVsZU1hcCwgdG9rZW5zLCBpbmRleCwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBsYXN0LCBwdXNoLCBmaWx0ZXIsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVuKGFycmF5KSB7IHJldHVybiBhcnJheS5maWx0ZXIoKGVudHJ5LCBpbmRleCkgPT4gaXNFdmVuKGluZGV4KSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0KGFycmF5KSB7XG4gIGFycmF5ID0gYXJyYXkuc2xpY2UoKTsgIC8vL1xuXG4gIGFycmF5LnNoaWZ0KCk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsQnV0Rmlyc3RBbmRMYXN0KGFycmF5KSB7XG4gIGFycmF5ID0gYXJyYXkuc2xpY2UoKTsgIC8vL1xuXG4gIGFycmF5LnNoaWZ0KCk7XG5cbiAgYXJyYXkucG9wKCk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBpc0V2ZW4oaW5kZXgpIHtcbiAgY29uc3QgZXZlbiA9IChNYXRoLmZsb29yKGluZGV4LzIpID09PSBpbmRleC8yKTtcblxuICByZXR1cm4gZXZlbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgbGFzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBORVdfTElORV9DSEFSQUNURVIsIFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubGluZXMuc2xpY2UoKSwgIC8vL1xuICAgICAgICAgIHBhcnNlVHJlZSA9IG5ldyBQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGxldCB3aWR0aDtcblxuICAgIGxldCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxpbmVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RMaW5lID0gbGFzdCh0aGlzLmxpbmVzKSxcbiAgICAgICAgICAgIGxhc3RMaW5lTGVuZ3RoID0gbGFzdExpbmUubGVuZ3RoO1xuXG4gICAgICB3aWR0aCA9IGxhc3RMaW5lTGVuZ3RoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoLFxuICAgICAgICAgIGRlcHRoID0gbGluZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBkZXB0aDtcbiAgfVxuXG4gIGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFwcGVuZFRvVG9wKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9MZWZ0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGluZSArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9SaWdodChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgbGluZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvQm90dG9tKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkVG9wTWFyZ2luKHRvcE1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgdG9wTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIHRvcE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aCh0b3BNYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9wTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdCh0b3BNYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgbGVmdE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChsZWZ0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGVmdE1hcmdpblN0cmluZyArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCByaWdodE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChyaWdodE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgcmlnaHRNYXJnaW5TdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgYm90dG9tTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIGJvdHRvbU1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChib3R0b21NYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYm90dG9tTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMucHVzaChib3R0b21NYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuICBcbiAgcG9wTGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMucG9wKCk7IH1cbiAgXG4gIHNoaWZ0TGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMuc2hpZnQoKTsgfVxuICBcbiAgcHVzaExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnB1c2gobGluZSk7IH1cbiAgXG4gIHVuc2hpZnRMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpOyB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5saW5lcy5yZWR1Y2UoKHN0cmluZywgbGluZSkgPT4ge1xuICAgICAgc3RyaW5nICs9IGxpbmUgKyBORVdfTElORV9DSEFSQUNURVI7XG5cbiAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKG1hcmdpbldpZHRoLCBzcGFjZUNoYXJhY3Rlcikge1xuICBzcGFjZUNoYXJhY3RlciA9IHNwYWNlQ2hhcmFjdGVyIHx8IFNQQUNFX0NIQVJBQ1RFUjtcblxuICBsZXQgbWFyZ2luU3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXJnaW5XaWR0aDsgaW5kZXgrKykge1xuICAgIG1hcmdpblN0cmluZyArPSBzcGFjZUNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBtYXJnaW5TdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25lY2Vzc2FyeSA9IHJlcXVpcmUoXCJuZWNlc3NhcnlcIik7XG52YXIgX3BhcnNlVHJlZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3BhcnNlVHJlZVwiKSk7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBCQVJfQ0hBUkFDVEVSID0gX25lY2Vzc2FyeS5jaGFyYWN0ZXJzLkJBUl9DSEFSQUNURVI7XG52YXIgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKFBhcnNlVHJlZSkge1xuICAgIF9pbmhlcml0cyhWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSwgUGFyc2VUcmVlKTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICBmdW5jdGlvbiBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZShsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbGluZXMpO1xuICAgICAgICBfdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhZGRMZWZ0TWFyZ2luXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBfZ2V0KF9nZXRQcm90b3R5cGVPZihWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5wcm90b3R5cGUpLCBcImFkZExlZnRNYXJnaW5cIiwgdGhpcykuY2FsbCh0aGlzLCBsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsZWZ0TWFyZ2luV2lkdGg7IC8vL1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVdpZHRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0cmluZyA9IEJBUl9DSEFSQUNURVIsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLCB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pLCBsZWZ0TWFyZ2luV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoIC8gMiksIHJpZ2h0TWFyZ2luV2lkdGggPSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aCAtIDE7XG4gICAgICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBkZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGxpbmVzRnJvbURlcHRoKGRlcHRoKSwgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25cbiAgICAgICAgICAgICAgICBdLCB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gc3RyaW5nOyAvLy9cbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IF9wYXJzZVRyZWUuZGVmYXVsdDsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc3RyaW5nLCBsaW5lcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIF0sIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uXG4gICAgICAgICAgICAgICAgXSwgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7IC8vL1xuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbn0oX3BhcnNlVHJlZS5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuZnVuY3Rpb24gbGluZXNGcm9tRGVwdGgoZGVwdGgpIHtcbiAgICB2YXIgbGluZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlKGluZGV4IDwgZGVwdGgpe1xuICAgICAgICBsaW5lc1tpbmRleCsrXSA9IF9jb25zdGFudHMuRU1QVFlfU1RSSU5HO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXM7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWEp6WlZSeVpXVXZkbVZ5ZEdsallXeENjbUZ1WTJndWFuTWlYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWENKMWMyVWdjM1J5YVdOMFhDSTdYRzVjYm1sdGNHOXlkQ0I3SUdOb1lYSmhZM1JsY25NZ2ZTQm1jbTl0SUZ3aWJtVmpaWE56WVhKNVhDSTdYRzVjYm1sdGNHOXlkQ0JRWVhKelpWUnlaV1VnWm5KdmJTQmNJaTR1TDNCaGNuTmxWSEpsWlZ3aU8xeHVYRzVwYlhCdmNuUWdleUJGVFZCVVdWOVRWRkpKVGtjZ2ZTQm1jbTl0SUZ3aUxpNHZZMjl1YzNSaGJuUnpYQ0k3WEc1Y2JtTnZibk4wSUhzZ1FrRlNYME5JUVZKQlExUkZVaUI5SUQwZ1kyaGhjbUZqZEdWeWN6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1ZtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1VnWlhoMFpXNWtjeUJRWVhKelpWUnlaV1VnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaWhzYVc1bGN5d2dkbVZ5ZEdsallXeENjbUZ1WTJoUWIzTnBkR2x2YmlrZ2UxeHVJQ0FnSUhOMWNHVnlLR3hwYm1WektUdGNiaUFnSUNCY2JpQWdJQ0IwYUdsekxuWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRnUFNCMlpYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVPMXh1SUNCOVhHNGdJRnh1SUNCblpYUldaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjQ3WEc0Z0lIMWNibHh1SUNCaFpHUk1aV1owVFdGeVoybHVLR3hsWm5STllYSm5hVzVYYVdSMGFDa2dlMXh1SUNBZ0lITjFjR1Z5TG1Ga1pFeGxablJOWVhKbmFXNG9iR1ZtZEUxaGNtZHBibGRwWkhSb0tUdGNibHh1SUNBZ0lIUm9hWE11ZG1WeWRHbGpZV3hDY21GdVkyaFFiM05wZEdsdmJpQXJQU0JzWldaMFRXRnlaMmx1VjJsa2RHZzdJQzh2TDF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVhhV1IwYUNoM2FXUjBhQ2tnZTF4dUlDQWdJR052Ym5OMElITjBjbWx1WnlBOUlFSkJVbDlEU0VGU1FVTlVSVklzWEc0Z0lDQWdJQ0FnSUNBZ2RtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUE5SURBc1hHNGdJQ0FnSUNBZ0lDQWdkbVZ5ZEdsallXeENjbUZ1WTJoUVlYSnpaVlJ5WldVZ1BTQldaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlM1bWNtOXRVM1J5YVc1blFXNWtWbVZ5ZEdsallXeENjbUZ1WTJoUWIzTnBkR2x2YmloV1pYSjBhV05oYkVKeVlXNWphRkJoY25ObFZISmxaU3dnYzNSeWFXNW5MQ0IyWlhKMGFXTmhiRUp5WVc1amFGQnZjMmwwYVc5dUtTeGNiaUFnSUNBZ0lDQWdJQ0JzWldaMFRXRnlaMmx1VjJsa2RHZ2dQU0JOWVhSb0xtWnNiMjl5S0hkcFpIUm9MeklwTEZ4dUlDQWdJQ0FnSUNBZ0lISnBaMmgwVFdGeVoybHVWMmxrZEdnZ1BTQjNhV1IwYUNBdElHeGxablJOWVhKbmFXNVhhV1IwYUNBdElERTdYRzVjYmlBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlM1aFpHUk1aV1owVFdGeVoybHVLR3hsWm5STllYSm5hVzVYYVdSMGFDazdYRzRnSUNBZ2RtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1V1WVdSa1VtbG5hSFJOWVhKbmFXNG9jbWxuYUhSTllYSm5hVzVYYVdSMGFDazdYRzVjYmlBZ0lDQnlaWFIxY200Z2RtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1U3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVUmxjSFJvUVc1a1ZtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaWhEYkdGemN5d2daR1Z3ZEdnc0lIWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0JqYjI1emRDQnNhVzVsY3lBOUlHeHBibVZ6Um5KdmJVUmxjSFJvS0dSbGNIUm9LU3hjYmlBZ0lDQWdJQ0FnSUNCaGNtZHpJRDBnVzI1MWJHd3NJR3hwYm1WekxDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1WFN4Y2JpQWdJQ0FnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlNBOUlHNWxkeUFvUm5WdVkzUnBiMjR1Y0hKdmRHOTBlWEJsTG1KcGJtUXVZWEJ3Ykhrb1EyeGhjM01zSUdGeVozTXBLVHNnSUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhabGNuUnBZMkZzUW5KaGJtTm9VR0Z5YzJWVWNtVmxPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxVGRISnBibWRCYm1SV1pYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVLRU5zWVhOekxDQnpkSEpwYm1jc0lIWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0JwWmlBb2RtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUE5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1SUQwZ2MzUnlhVzVuT3lBZ0x5OHZYRzRnSUNBZ0lDQnpkSEpwYm1jZ1BTQkRiR0Z6Y3pzZ0x5OHZYRzRnSUNBZ0lDQkRiR0Z6Y3lBOUlGQmhjbk5sVkhKbFpUc2dJQzh2TDF4dUlDQWdJSDFjYmlBZ0lDQmNiaUFnSUNCamIyNXpkQ0JzYVc1bElEMGdjM1J5YVc1bkxDQXZMeTljYmlBZ0lDQWdJQ0FnSUNCc2FXNWxjeUE5SUZ0c2FXNWxYU3hjYmlBZ0lDQWdJQ0FnSUNCaGNtZHpJRDBnVzI1MWJHd3NJR3hwYm1WekxDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1WFN4Y2JpQWdJQ0FnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlNBOUlHNWxkeUFvUm5WdVkzUnBiMjR1Y0hKdmRHOTBlWEJsTG1KcGJtUXVZWEJ3Ykhrb1EyeGhjM01zSUdGeVozTXBLVHNnSUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhabGNuUnBZMkZzUW5KaGJtTm9VR0Z5YzJWVWNtVmxPMXh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4cGJtVnpSbkp2YlVSbGNIUm9LR1JsY0hSb0tTQjdYRzRnSUdOdmJuTjBJR3hwYm1WeklEMGdXMTA3WEc1Y2JpQWdiR1YwSUdsdVpHVjRJRDBnTUR0Y2JseHVJQ0IzYUdsc1pTQW9hVzVrWlhnZ1BDQmtaWEIwYUNrZ2UxeHVJQ0FnSUd4cGJtVnpXMmx1WkdWNEt5dGRJRDBnUlUxUVZGbGZVMVJTU1U1SE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHeHBibVZ6TzF4dWZWeHVJbDBzSW01aGJXVnpJanBiSWtKQlVsOURTRUZTUVVOVVJWSWlMQ0pqYUdGeVlXTjBaWEp6SWl3aVZtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1VpTENKc2FXNWxjeUlzSW5abGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNGlMQ0puWlhSV1pYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVJaXdpWVdSa1RHVm1kRTFoY21kcGJpSXNJbXhsWm5STllYSm5hVzVYYVdSMGFDSXNJbVp5YjIxWGFXUjBhQ0lzSW5kcFpIUm9JaXdpYzNSeWFXNW5JaXdpZG1WeWRHbGpZV3hDY21GdVkyaFFZWEp6WlZSeVpXVWlMQ0ptY205dFUzUnlhVzVuUVc1a1ZtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUlzSWsxaGRHZ2lMQ0ptYkc5dmNpSXNJbkpwWjJoMFRXRnlaMmx1VjJsa2RHZ2lMQ0poWkdSU2FXZG9kRTFoY21kcGJpSXNJbVp5YjIxRVpYQjBhRUZ1WkZabGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNGlMQ0pEYkdGemN5SXNJbVJsY0hSb0lpd2liR2x1WlhOR2NtOXRSR1Z3ZEdnaUxDSmhjbWR6SWl3aVJuVnVZM1JwYjI0aUxDSndjbTkwYjNSNWNHVWlMQ0ppYVc1a0lpd2lZWEJ3YkhraUxDSjFibVJsWm1sdVpXUWlMQ0pRWVhKelpWUnlaV1VpTENKc2FXNWxJaXdpYVc1a1pYZ2lMQ0pGVFZCVVdWOVRWRkpKVGtjaVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFTkJRVmtzVjBGQlFTeERRVUZET3pzN1JUdDNRanRCUVVWakxFZEJRVmNzUTBGQldDeFZRVUZYTzBGQlJXaENMRWRCUVdNc1EwRkJaQ3hWUVVGak8wRkJSVkFzUjBGQll5eERRVUZrTEZWQlFXTTdPenM3T3pzN096czdPenM3T3pzNFJEdHpRenMyUkR0cFJUczdPenQzUlR0blJUczdPenM3TUVJN096czdPenM3T3pzN1V6czdPenM3T3p0TE96czdPenM3T3pzN096czdPMDA3ZVVRN096czdPenM3T3pzN096czdPenQxUWpzN1N6czdPenM3ZDBNN096czdPenN5UWpzN096czdPenM3Y1VZN096czdPenM3T3pzN096dHRSVHM3YVVRN096czdPMEZCUlRORExFZEJRVXNzUTBGQlIwRXNZVUZCWVN4SFFVRkxReXhWUVVGVkxGbEJRVFZDUkN4aFFVRmhPMGxCUlVGRkxIVkNRVUYxUWl4cFFrRkJOMElzVVVGQlVUdHBSRHM3WVVGQlJrRXNkVUpCUVhWQ0xFTkJRemxDUXl4TFFVRkxMRVZCUVVWRExITkNRVUZ6UWp0elJEczdhME5CUTJwRFJDeExRVUZMTEVORFdtWXNRMFJaYVVJN1kwRkZVa01zYzBKQlFYTkNMRWRCUVVkQkxITkNRVUZ6UWl4RFFVRkRPenM3T3p0WlFVZDJSRU1zUjBGQmVVSXNSVUZCZWtKQkxFTkJRWGxDTzIxQ1FVRjZRa0VzVVVGQlVTeERRVUZTUVN4NVFrRkJlVUlzUjBGQlJ5eERRVUZETzJkQ1FVTXpRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZEUkN4elFrRkJjMEk3V1VGRGNFTXNRMEZCUXpzN08xbEJSVVJGTEVkQlFXRXNSVUZCWWtFc1EwRkJZVHR0UWtGQllrRXNVVUZCVVN4RFFVRlNRU3hoUVVGaExFTkJRVU5ETEdWQlFXVXNSVUZCUlN4RFFVRkRPM0ZEUVZoaVRDeDFRa0ZCZFVJc1lVRlpiRU5KTEVOQlFXRXNaMEpCUVc1Q0xFbEJRVXNzWVVGQlpVTXNaVUZCWlN4RFEzUkNka01zUTBSelFubERPMmRDUVVWeVF5eEpRVUZKTEVOQlFVTklMSE5DUVVGelFpeEpRVUZKUnl4bFFVRmxMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dFpRVU55UkN4RFFVRkRPenM3TzFsQlJVMURMRWRCUVZNc1JVRkJWRUVzUTBGQlV6dHRRa0ZCYUVJc1VVRkJVU3hEUVVGRVFTeFRRVUZUTEVOQlFVTkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU4yUWl4SFFVRkxMRU5CUVVORExFMUJRVTBzUjBGQlIxWXNZVUZCWVN4RlFVTjBRa2tzYzBKQlFYTkNMRWRCUVVjc1EwRkJReXhGUVVNeFFrOHNkVUpCUVhWQ0xFZEJRVWRVTEhWQ1FVRjFRaXhEUVVGRFZTeHRRMEZCYlVNc1EwRkJRMVlzZFVKQlFYVkNMRVZCUVVWUkxFMUJRVTBzUlVGQlJVNHNjMEpCUVhOQ0xFZEJRemRKUnl4bFFVRmxMRWRCUVVkTkxFbEJRVWtzUTBGQlEwTXNTMEZCU3l4RFFVRkRUQ3hMUVVGTExFZEJRVU1zUTBGQlF5eEhRVU53UTAwc1owSkJRV2RDTEVkQlFVZE9MRXRCUVVzc1IwRkJSMFlzWlVGQlpTeEhRVUZITEVOQlFVTTdaMEpCUlhCRVNTeDFRa0ZCZFVJc1EwRkJRMHdzWVVGQllTeERRVUZEUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRuUWtGRGRrUkpMSFZDUVVGMVFpeERRVUZEU3l4alFVRmpMRU5CUVVORUxHZENRVUZuUWl4RFFVRkRMRU5CUVVNN1owSkJSWHBFTEUxQlFVMHNRMEZCUTBvc2RVSkJRWFZDTzFsQlEyaERMRU5CUVVNN096dFpRVVZOVFN4SFFVRnJReXhGUVVGc1EwRXNRMEZCYTBNN2JVSkJRWHBETEZGQlFWRXNRMEZCUkVFc2EwTkJRV3RETEVOQlFVTkRMRXRCUVVzc1JVRkJSVU1zUzBGQlN5eEZRVUZGWml4elFrRkJjMElzUlVGQlJTeERRVUZETzJkQ1FVTXZSU3hIUVVGTExFTkJRVU5FTEV0QlFVc3NSMEZCUjJsQ0xHTkJRV01zUTBGQlEwUXNTMEZCU3l4SFFVTTFRa1VzU1VGQlNTeEhRVUZITEVOQlFVTTdiMEpCUVVFc1NVRkJTVHR2UWtGQlJXeENMRXRCUVVzN2IwSkJRVVZETEhOQ1FVRnpRanRuUWtGQlFTeERRVUZETEVWQlF6VkRUeXgxUWtGQmRVSXNSMEZCUnl4SFFVRkhMRVZCUVVWWExGRkJRVkVzUTBGQlEwTXNVMEZCVXl4RFFVRkRReXhKUVVGSkxFTkJRVU5ETEV0QlFVc3NRMEZCUTFBc1MwRkJTeXhGUVVGRlJ5eEpRVUZKTEVsQlFVc3NSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJSWFJHTEUxQlFVMHNRMEZCUTFZc2RVSkJRWFZDTzFsQlEyaERMRU5CUVVNN096dFpRVVZOUXl4SFFVRnRReXhGUVVGdVEwRXNRMEZCYlVNN2JVSkJRVEZETEZGQlFWRXNRMEZCUkVFc2JVTkJRVzFETEVOQlFVTk5MRXRCUVVzc1JVRkJSVklzVFVGQlRTeEZRVUZGVGl4elFrRkJjMElzUlVGQlJTeERRVUZETzJkQ1FVTnFSaXhGUVVGRkxFVkJRVVZCTEhOQ1FVRnpRaXhMUVVGTGMwSXNVMEZCVXl4RlFVRkZMRU5CUVVNN2IwSkJRM3BEZEVJc2MwSkJRWE5DTEVkQlFVZE5MRTFCUVUwc1EwRkJReXhEUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzI5Q1FVTnlRMEVzVFVGQlRTeEhRVUZIVVN4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dHZRa0ZEYmtKQkxFdEJRVXNzUjBGQlIxTXNWVUZCVXl4UlFVRkJMRU5CUVVNc1EwRkJSU3hGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZEZWtJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTkRMRWxCUVVrc1IwRkJSMnhDTEUxQlFVMHNSVUZEWWxBc1MwRkJTeXhIUVVGSExFTkJRVU41UWp0dlFrRkJRVUVzU1VGQlNUdG5Ra0ZCUVN4RFFVRkRMRVZCUTJSUUxFbEJRVWtzUjBGQlJ5eERRVUZETzI5Q1FVRkJMRWxCUVVrN2IwSkJRVVZzUWl4TFFVRkxPMjlDUVVGRlF5eHpRa0ZCYzBJN1owSkJRVUVzUTBGQlF5eEZRVU0xUTA4c2RVSkJRWFZDTEVkQlFVY3NSMEZCUnl4RlFVRkZWeXhSUVVGUkxFTkJRVU5ETEZOQlFWTXNRMEZCUTBNc1NVRkJTU3hEUVVGRFF5eExRVUZMTEVOQlFVTlFMRXRCUVVzc1JVRkJSVWNzU1VGQlNTeEpRVUZMTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWMFJpeE5RVUZOTEVOQlFVTldMSFZDUVVGMVFqdFpRVU5vUXl4RFFVRkRPenROT3p0RlFXNUVhMFJuUWl4VlFVRlRPMnRDUVVGNlEzcENMSFZDUVVGMVFpeEJPMU5CYzBSdVEydENMR05CUVdNc1EwRkJRMFFzUzBGQlN5eEZRVUZGTEVOQlFVTTdTVUZET1VJc1IwRkJTeXhEUVVGRGFFSXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVWb1FpeEhRVUZITEVOQlFVTXdRaXhMUVVGTExFZEJRVWNzUTBGQlF6dFZRVVZPUVN4TFFVRkxMRWRCUVVkV0xFdEJRVXNzUTBGQlJTeERRVUZETzFGQlEzSkNhRUlzUzBGQlN5eERRVUZETUVJc1MwRkJTeXhOUVVGTlF5eFZRVUZaTEdGQlFVRXNRMEZCUXp0SlFVTm9ReXhEUVVGRE8wbEJSVVFzVFVGQlRTeERRVUZETTBJc1MwRkJTenRCUVVOa0xFTkJRVU1pZlE9PSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgdG9rZW5JbmRleGVzID0gdG9rZW5JbmRleGVzRnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cnVsZU5hbWV9JHt0b2tlbkluZGV4ZXN9YCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluZGV4ZXNGcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleH0tJHtsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCgke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgO1xuXG4gIHJldHVybiB0b2tlbkluZGV4ZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgREFTSF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSF9DSEFSQUNURVIpLFxuICAgICAgICAgIGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW2xpbmVdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcbmltcG9ydCBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL2hvcml6b250YWxCcmFuY2hcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoaWxkTm9kZXNQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tQ2hpbGROb2Rlc0FuZFRva2VucyhjaGlsZE5vZGVzLCB0b2tlbnMpIHtcbiAgICBsZXQgY2hpbGROb2Rlc1BhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlUGFyc2VUcmVlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zKTtcblxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5wdXNoKGNoaWxkTm9kZVBhcnNlVHJlZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVQYXJzZVRyZWVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID0gY2hpbGROb2RlUGFyc2VUcmVlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB1bmRlZmluZWQsXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSAxO1xuXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IE1hdGgubWF4KGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKyAxLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbixcbiAgICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggLSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aDtcblxuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENoaWxkTm9kZXNQYXJzZVRyZWUsIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUuY2xvbmUoKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0TWFyZ2luV2lkdGggPSAxO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoIDwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoKSB7XG4gICAgICAgICAgY29uc3QgYm90dG9tTWFyZ2luRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggLSBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aDtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1JpZ2h0KGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcChob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBSdWxlTmFtZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gQ2hpbGROb2Rlc1BhcnNlVHJlZS5mcm9tQ2hpbGROb2Rlc0FuZFRva2VucyhjaGlsZE5vZGVzLCB0b2tlbnMpO1xuICAgIFxuICAgIGxldCBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG4gICAgXG4gICAgY29uc3QgY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBjaGlsZE5vZGVzUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICBcbiAgICBsZXQgbGVmdE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA8IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IC12ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9ICt2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlV2lkdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB3aWR0aHNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCAtIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aDtcbiAgICBcbiAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IC13aWR0aHNEaWZmZXJlbmNlO1xuICAgICAgXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gK3dpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL25vblRlcm1pbmFsTm9kZVwiO1xuXG5pbXBvcnQgeyBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXRQYXJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGJhY2t3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAobGFzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKSB7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIHNldENoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICAgIHRoaXMuY2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7XG4gIH1cbiAgXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG4gICAgICBydWxlTmFtZSA9IENsYXNzOyAvLy9cbiAgICAgIENsYXNzID0gTm9uVGVybWluYWxOb2RlOyAgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIGNoaWxkIG5vZGVzIGF0IHJ1bGUgJyR7cnVsZU5hbWV9Jy5gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHVuZGVmaW5lZCwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgfSBmcm9tIFwiLi9wYXJ0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSAoY2FsbGJhY2sgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4XTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgY29uc3QgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKHBhcnQpO1xuXG4gICAgaWYgKHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXTtcblxuICAgICAgaW5kZXgrKztcblxuICAgICAgcGFyc2VkID0gcnVsZU5hbWVQYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbG9va0FoZWFkXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGZpcnN0LCBhbGxCdXRGaXJzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldEZpcnN0UGFydCgpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdCh0aGlzLnBhcnRzKTtcblxuICAgIHJldHVybiBmaXJzdFBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0c0xlbmd0aCgpIHtcbiAgICBjb25zdCBwYXJ0c0xlbmd0aCA9IHRoaXMucGFydHMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHBhcnRzTGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsQnV0Rmlyc3RQYXJ0cygpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdFBhcnRzID0gYWxsQnV0Rmlyc3QodGhpcy5wYXJ0cyk7XG5cbiAgICByZXR1cm4gYWxsQnV0Rmlyc3RQYXJ0cztcbiAgfVxuXG4gIGFkZFBhcnQocGFydCkge1xuICAgIHRoaXMucGFydHMucHVzaChwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZzsgLy8vXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgc3RyaW5nID0gcGFydHNTdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBUZXJtaW5hbFBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFRlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRlcm1pbmFsUGFydCk7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhUZXJtaW5hbFBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzTm9uVGVybWluYWxQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vblRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc1Rlcm1pbmFsUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzVGVybWluYWxQYXJ0KCkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc05vV2hpdGVzcGFjZVBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoUGFydCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoUGFydCwgX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFRlcm1pbmFsUGFydDtcbn0oKTtcbmV4cG9ydHMuZGVmYXVsdCA9IFRlcm1pbmFsUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYSjBMM1JsY20xcGJtRnNMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJVWlhKdGFXNWhiRkJoY25RZ2UxeHVJQ0JwYzA1dmJsUmxjbTFwYm1Gc1VHRnlkQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQnViMjVVWlhKdGFXNWhiRkJoY25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ1YjI1VVpYSnRhVzVoYkZCaGNuUTdYRzRnSUgxY2JseHVJQ0JwYzFSbGNtMXBibUZzVUdGeWRDZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCMFpYSnRhVzVoYkZCaGNuUWdQU0IwY25WbE8xeHVJQ0FnSUZ4dUlDQWdJSEpsZEhWeWJpQjBaWEp0YVc1aGJGQmhjblE3WEc0Z0lIMWNibHh1SUNCcGMwNXZWMmhwZEdWemNHRmpaVkJoY25Rb0tTQjdYRzRnSUNBZ1kyOXVjM1FnYm05WGFHbDBaWE53WVdObFVHRnlkQ0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHNXZWMmhwZEdWemNHRmpaVkJoY25RN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNoUVlYSjBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIc2djbVYwZFhKdUlHNWxkeUJRWVhKMEtDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKVVpYSnRhVzVoYkZCaGNuUWlMQ0pwYzA1dmJsUmxjbTFwYm1Gc1VHRnlkQ0lzSW01dmJsUmxjbTFwYm1Gc1VHRnlkQ0lzSW1selZHVnliV2x1WVd4UVlYSjBJaXdpZEdWeWJXbHVZV3hRWVhKMElpd2lhWE5PYjFkb2FYUmxjM0JoWTJWUVlYSjBJaXdpYm05WGFHbDBaWE53WVdObFVHRnlkQ0lzSW1Oc2IyNWxJaXdpVUdGeWRDSXNJbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeUpkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ096dDVSRHQxUlRzN096czdPenM3T3pzN096czdPenRuUmpzN096czdPenM3YzBNN096czdPenRwUXpzN08ybEZPenRUT3pzN096czdPemhFTzNORE96WkVPMmxGT3pzN08zZEZPMmRGT3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN096czdPenNyUkRzN096dEpRVVZSUVN4WlFVRlpMR2xDUVVGc1FpeFJRVUZSTzJGQlFVWkJMRmxCUVZrN01rTTdPenM3V1VGREwwSkRMRWRCUVdsQ0xFVkJRV3BDUVN4RFFVRnBRanR0UWtGQmFrSkJMRkZCUVZFc1EwRkJVa0VzYVVKQlFXbENMRWRCUVVjc1EwRkJRenRuUWtGRGJrSXNSMEZCU3l4RFFVRkRReXhsUVVGbExFZEJRVWNzUzBGQlN6dG5Ra0ZGTjBJc1RVRkJUU3hEUVVGRFFTeGxRVUZsTzFsQlEzaENMRU5CUVVNN096dFpRVVZFUXl4SFFVRmpMRVZCUVdSQkxFTkJRV003YlVKQlFXUkJMRkZCUVZFc1EwRkJVa0VzWTBGQll5eEhRVUZITEVOQlFVTTdaMEpCUTJoQ0xFZEJRVXNzUTBGQlEwTXNXVUZCV1N4SFFVRkhMRWxCUVVrN1owSkJSWHBDTEUxQlFVMHNRMEZCUTBFc1dVRkJXVHRaUVVOeVFpeERRVUZET3pzN1dVRkZSRU1zUjBGQmEwSXNSVUZCYkVKQkxFTkJRV3RDTzIxQ1FVRnNRa0VzVVVGQlVTeERRVUZTUVN4clFrRkJhMElzUjBGQlJ5eERRVUZETzJkQ1FVTndRaXhIUVVGTExFTkJRVU5ETEdkQ1FVRm5RaXhIUVVGSExFdEJRVXM3WjBKQlJUbENMRTFCUVUwc1EwRkJRMEVzWjBKQlFXZENPMWxCUTNwQ0xFTkJRVU03T3p0WlFVVkVReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4RFFVRkRReXhKUVVGSkxFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnlRbTVETEVORWNVSnRRenRuUWtGQlJDeERRVUZETzJkQ1FVRkpMRTFCUVUwc1dVRkJTMFFzU1VGQlNTeHhRa0ZCU1VNc2EwSkJRV3RDTzFsQlFVY3NRMEZCUXpzN1RUczdPMnRDUVc1Q00wUlVMRmxCUVZrc1FTSjkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtjb250ZW50fVske3R5cGV9XSgke3Rva2VuSW5kZXh9KWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbiwgcGFyZW50Tm9kZSkge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7IH1cblxuICBnZXRDb250ZW50KCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTsgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB1bmRlZmluZWQsIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuLCBwYXJlbnROb2RlKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3Rlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiKSk7XG52YXIgX3Rlcm1pbmFsMSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvdGVybWluYWxcIikpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCBUZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KTtcbiAgICBmdW5jdGlvbiBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgX3RoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuVHlwZSA9PT0gdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWxOb2RlID0gX3Rlcm1pbmFsMS5kZWZhdWx0LmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHRlcm1pbmFsTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBzdHJpbmcgPSBcIltcIi5jb25jYXQodGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSwgXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihTaWduaWZpY2FudFRva2VuVHlwZVBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCwgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xufShfdGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwzUmxjbTFwYm1Gc0wzTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4UVlYSjBJR1p5YjIwZ1hDSXVMaTh1TGk5d1lYSjBMM1JsY20xcGJtRnNYQ0k3WEc1cGJYQnZjblFnVkdWeWJXbHVZV3hPYjJSbElHWnliMjBnWENJdUxpOHVMaTl1YjJSbEwzUmxjbTFwYm1Gc1hDSTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxVR0Z5ZENCbGVIUmxibVJ6SUZSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxLU0I3WEc0Z0lDQWdjM1Z3WlhJb0tUdGNiaUFnSUNCY2JpQWdJQ0IwYUdsekxuTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxJRDBnYzJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVN1hHNGdJSDFjYmx4dUlDQndZWEp6WlNodWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdiR1YwSUhCaGNuTmxaRHRjYmx4dUlDQWdJR3hsZENCMFpYSnRhVzVoYkU1dlpHVWdQU0J1ZFd4c08xeHVJQ0FnSUZ4dUlDQWdJR052Ym5OMElITmhkbVZrU1c1a1pYZ2dQU0J6ZEdGMFpTNW5aWFJUWVhabFpFbHVaR1Y0S0Nrc1hHNWNkRngwSUNBZ0lDQWdibVY0ZEZOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCemRHRjBaUzVuWlhST1pYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJpZ3BMRnh1WEhSY2RGeDBYSFJjZEhOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCdVpYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJqc2dMeTh2WEc1Y2JpQWdJQ0JwWmlBb2MybG5ibWxtYVdOaGJuUlViMnRsYmlBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVZ1BTQnphV2R1YVdacFkyRnVkRlJ2YTJWdUxtZGxkRlI1Y0dVb0tUdGNibHh1SUNBZ0lDQWdhV1lnS0hOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbElEMDlQU0IwYUdsekxuTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pTQTlJRlJsY20xcGJtRnNUbTlrWlM1bWNtOXRVMmxuYm1sbWFXTmhiblJVYjJ0bGJpaHphV2R1YVdacFkyRnVkRlJ2YTJWdUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCd1lYSnpaV1FnUFNBb2RHVnliV2x1WVd4T2IyUmxJQ0U5UFNCdWRXeHNLVHRjYmx4dUlDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUc1dlpHVnpMbkIxYzJnb2RHVnliV2x1WVd4T2IyUmxLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHTmhiR3hpWVdOcklDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEJoY25ObFpDQTlJR05oYkd4aVlXTnJLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0Z3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdWIyUmxjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doY0dGeWMyVmtLU0I3WEc0Z0lDQWdJQ0J6ZEdGMFpTNWlZV05yZEhKaFkyc29jMkYyWldSSmJtUmxlQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlIQmhjbk5sWkR0Y2JpQWdmVnh1WEc0Z0lHRnpVM1J5YVc1bktDa2dlMXh1SUNBZ0lHTnZibk4wSUhOMGNtbHVaeUE5SUdCYkpIdDBhR2x6TG5OcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbGZWMWdPMXh1SUNBZ0lGeHVJQ0FnSUhKbGRIVnliaUJ6ZEhKcGJtYzdYRzRnSUgxY2JseHVJQ0JqYkc5dVpTZ3BJSHNnY21WMGRYSnVJSE4xY0dWeUxtTnNiMjVsS0ZOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbFVHRnlkQ3dnZEdocGN5NXphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaU2s3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKVGFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWQmhjblFpTENKemFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pTSXNJbkJoY25ObElpd2libTlrWlhNaUxDSnpkR0YwWlNJc0ltTmhiR3hpWVdOcklpd2ljR0Z5YzJWa0lpd2lkR1Z5YldsdVlXeE9iMlJsSWl3aWMyRjJaV1JKYm1SbGVDSXNJbWRsZEZOaGRtVmtTVzVrWlhnaUxDSnVaWGgwVTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1kbGRFNWxlSFJUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpYzJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1kbGRGUjVjR1VpTENKVVpYSnRhVzVoYkU1dlpHVWlMQ0ptY205dFUybG5ibWxtYVdOaGJuUlViMnRsYmlJc0luQjFjMmdpTENKd2IzQWlMQ0ppWVdOcmRISmhZMnNpTENKaGMxTjBjbWx1WnlJc0luTjBjbWx1WnlJc0ltTnNiMjVsSWl3aVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZXU3hIUVVGeFFpeERRVUZ5UWl4VFFVRnhRanRCUVVOeVFpeEhRVUZ4UWl4RFFVRnlRaXhWUVVGeFFqczdPenM3T3pzN096czdPenM3T3poRU8zTkRPelpFTzJsRk96czdPM2RGTzJkRk96czdPenN3UWpzN096czdPenM3T3p0VE96czdPenM3TzBzN096czdPenM3T3pzN096czdUVHQ1UkRzN096czdPenM3T3pzN096czdPM1ZDT3p0TE96czdPenQzUXpzN096czdPekpDT3pzN096czdPenR4UmpzN096czdPenM3T3pzN08yMUZPenRwUkRzN096czdTVUZGZWtKQkxIZENRVUYzUWl4cFFrRkJPVUlzVVVGQlVUdHhSRHM3WVVGQlJrRXNkMEpCUVhkQ0xFTkJReTlDUXl4dlFrRkJiMEk3ZFVRN08ybERRMDVzUXl4RFJFOVpPMk5CUlVoQkxHOUNRVUZ2UWl4SFFVRkhRU3h2UWtGQmIwSXNRMEZCUXpzN096czdXVUZIYmtSRExFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNTMEZCU3l4RlFVRkZReXhSUVVGUkxFVkJRVVVzUTBGQlF6dG5Ra0ZETjBJc1IwRkJSeXhEUVVGRFF5eE5RVUZOTzJkQ1FVVldMRWRCUVVjc1EwRkJRME1zV1VGQldTeEhRVUZITEVsQlFVazdaMEpCUlhaQ0xFZEJRVXNzUTBGQlEwTXNWVUZCVlN4SFFVRkhTaXhMUVVGTExFTkJRVU5MTEdGQlFXRXNTVUZEYkVORExHOUNRVUZ2UWl4SFFVRkhUaXhMUVVGTExFTkJRVU5QTEhWQ1FVRjFRaXhKUVVOMlJFTXNaMEpCUVdkQ0xFZEJRVWRHTEc5Q1FVRnZRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVTNReXhGUVVGRkxFVkJRVVZGTEdkQ1FVRm5RaXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzI5Q1FVTTVRaXhIUVVGTExFTkJRVU5ZTEc5Q1FVRnZRaXhIUVVGSFZ5eG5Ra0ZCWjBJc1EwRkJRME1zVDBGQlR6dHZRa0ZGY2tRc1JVRkJSU3hGUVVGRldpeHZRa0ZCYjBJc1MwRkJTeXhKUVVGSkxFTkJRVU5CTEc5Q1FVRnZRaXhGUVVGRkxFTkJRVU03ZDBKQlEzWkVUU3haUVVGWkxFZEJRVWRQTEZWQlFWa3NVMEZCUTBNc2IwSkJRVzlDTEVOQlFVTklMR2RDUVVGblFpeERRVUZETEVOQlFVTTdiMEpCUTNKRkxFTkJRVU03WjBKQlEwZ3NRMEZCUXp0blFrRkZSRTRzVFVGQlRTeEhRVUZKUXl4WlFVRlpMRXRCUVVzc1NVRkJTU3hCUVVGRExFTkJRVU03WjBKQlJXcERMRVZCUVVVc1JVRkJSVVFzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFoSUxFdEJRVXNzUTBGQlEyRXNTVUZCU1N4RFFVRkRWQ3haUVVGWkxFTkJRVU1zUTBGQlF6dHZRa0ZGZWtJc1JVRkJSU3hGUVVGRlJpeFJRVUZSTEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN2QwSkJRM1JDUXl4TlFVRk5MRWRCUVVkRUxGRkJRVkVzUlVGQlJTeERRVUZETzNkQ1FVVndRaXhGUVVGRkxFZEJRVWRETEUxQlFVMHNSVUZCUlN4RFFVRkRPelJDUVVOYVNDeExRVUZMTEVOQlFVTmpMRWRCUVVjc1JVRkJSU3hEUVVGRE8zZENRVU5rTEVOQlFVTTdiMEpCUTBnc1EwRkJRenRuUWtGRFNDeERRVUZETzJkQ1FVVkVMRVZCUVVVc1IwRkJSMWdzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFwR0xFdEJRVXNzUTBGQlEyTXNVMEZCVXl4RFFVRkRWaXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VJc1EwRkJRenRuUWtGRlJDeE5RVUZOTEVOQlFVTkdMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkdFc1IwRkJVU3hGUVVGU1FTeERRVUZSTzIxQ1FVRlNRU3hSUVVGUkxFTkJRVkpCTEZGQlFWRXNSMEZCUnl4RFFVRkRPMmRDUVVOV0xFZEJRVXNzUTBGQlEwTXNUVUZCVFN4SFFVRkpMRU5CUVVNc1IwRkJORUlzVFVGQlF5eERRVUV6UWl4SlFVRkpMRU5CUVVOdVFpeHZRa0ZCYjBJc1JVRkJReXhEUVVGRE8yZENRVVU1UXl4TlFVRk5MRU5CUVVOdFFpeE5RVUZOTzFsQlEyWXNRMEZCUXpzN08xbEJSVVJETEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFZEJRVWNzUTBGQlF6dG5Ra0ZCUXl4TlFVRk5MSE5DUVc1RVIzSkNMSGRDUVVGM1FpeGhRVzFFY0VKeFFpeERRVUZMTEZGQlFWZ3NTVUZCU3l4aFFVRlBja0lzZDBKQlFYZENMRVZCUVVVc1NVRkJTU3hEUVVGRFF5eHZRa0ZCYjBJN1dVRkJSeXhEUVVGRE96dE5PenRGUVc1RWFFTnhRaXhUUVVGWk8ydENRVUUzUTNSQ0xIZENRVUYzUWl4QkluMD0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5jb25zdCB7IG5hbWVUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlID0gbmFtZVR5cGUsICAvLy9cbiAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTmFtZVJ1bGVOYW1lID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgUGFydFJ1bGVOYW1lID0gXCJwYXJ0XCI7XG5leHBvcnQgY29uc3QgUnVsZVJ1bGVOYW1lID0gXCJydWxlXCI7XG5leHBvcnQgY29uc3QgRXJyb3JSdWxlTmFtZSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBSdWxlTmFtZVJ1bGVOYW1lID0gXCJydWxlTmFtZVwiO1xuZXhwb3J0IGNvbnN0IERvY3VtZW50UnVsZU5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgY29uc3QgV2lsZGNhcmRSdWxlTmFtZSA9IFwid2lsZGNhcmRcIjtcbmV4cG9ydCBjb25zdCBFbmRPZkxpbmVSdWxlTmFtZSA9IFwiZW5kT2ZMaW5lXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvblJ1bGVOYW1lID0gXCJkZWZpbml0aW9uXCI7XG5leHBvcnQgY29uc3QgUXVhbnRpZmllclJ1bGVOYW1lID0gXCJxdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvbnNSdWxlTmFtZSA9IFwiZGVmaW5pdGlvbnNcIjtcbmV4cG9ydCBjb25zdCBUZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwidGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgVGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFwidGVybWluYWxTeW1ib2xcIjtcbmV4cG9ydCBjb25zdCBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwibm9uVGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSA9IFwibm9XaGl0ZXNwYWNlUGFydFwiO1xuZXhwb3J0IGNvbnN0IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSBcImxvb2tBaGVhZE1vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFwicmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IFwib3B0aW9uYWxRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvbmVPck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwiemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gXCJzaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IE5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOYW1lQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBOb25UZXJtaW5hbFBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIE5vblRlcm1pbmFsUGFydCh0eXBlKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb25UZXJtaW5hbFBhcnQpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoTm9uVGVybWluYWxQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRUeXBlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNOb25UZXJtaW5hbFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9uVGVybWluYWxQYXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNUZXJtaW5hbFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGVybWluYWxQYXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzUnVsZU5hbWVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lUGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKFBhcnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBfY29uc3RydWN0KFBhcnQsIF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBOb25UZXJtaW5hbFBhcnQ7XG59KCk7XG5leHBvcnRzLmRlZmF1bHQgPSBOb25UZXJtaW5hbFBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWEowTDI1dmJsUmxjbTFwYm1Gc0xtcHpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5Qk9iMjVVWlhKdGFXNWhiRkJoY25RZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loMGVYQmxLU0I3WEc0Z0lDQWdkR2hwY3k1MGVYQmxJRDBnZEhsd1pUc2dJRnh1SUNCOVhHNGdJRnh1SUNCblpYUlVlWEJsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuUjVjR1U3WEc0Z0lIMWNibHh1SUNCcGMwNXZibFJsY20xcGJtRnNVR0Z5ZENncElIdGNiaUFnSUNCamIyNXpkQ0J1YjI1VVpYSnRhVzVoYkZCaGNuUWdQU0IwY25WbE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc1dmJsUmxjbTFwYm1Gc1VHRnlkRHRjYmlBZ2ZWeHVYRzRnSUdselZHVnliV2x1WVd4UVlYSjBLQ2tnZTF4dUlDQWdJR052Ym5OMElIUmxjbTFwYm1Gc1VHRnlkQ0E5SUdaaGJITmxPMXh1SUNBZ0lGeHVJQ0FnSUhKbGRIVnliaUIwWlhKdGFXNWhiRkJoY25RN1hHNGdJSDFjYmx4dUlDQnBjMUoxYkdWT1lXMWxVR0Z5ZENncElIdGNiaUFnSUNCamIyNXpkQ0J5ZFd4bFRtRnRaVkJoY25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5ZFd4bFRtRnRaVkJoY25RN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNoUVlYSjBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIc2djbVYwZFhKdUlHNWxkeUJRWVhKMEtDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKT2IyNVVaWEp0YVc1aGJGQmhjblFpTENKMGVYQmxJaXdpWjJWMFZIbHdaU0lzSW1selRtOXVWR1Z5YldsdVlXeFFZWEowSWl3aWJtOXVWR1Z5YldsdVlXeFFZWEowSWl3aWFYTlVaWEp0YVc1aGJGQmhjblFpTENKMFpYSnRhVzVoYkZCaGNuUWlMQ0pwYzFKMWJHVk9ZVzFsVUdGeWRDSXNJbkoxYkdWT1lXMWxVR0Z5ZENJc0ltTnNiMjVsSWl3aVVHRnlkQ0lzSW5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPenQ1UkR0MVJUczdPenM3T3pzN096czdPenM3T3p0blJqczdPenM3T3pzN2MwTTdPenM3T3p0cFF6czdPMmxGT3p0VE96czdPenM3T3poRU8zTkRPelpFTzJsRk96czdPM2RGTzJkRk96czdPenM3T3pzN096dDFRanM3U3pzN096czdPenM3T3pzclJEczdPenRKUVVWUlFTeGxRVUZsTEdsQ1FVRnlRaXhSUVVGUk8yRkJRVVpCTEdWQlFXVXNRMEZEZEVKRExFbEJRVWs3T0VNN1VVRkRaQ3hKUVVGSkxFTkJRVU5CTEVsQlFVa3NSMEZCUjBFc1NVRkJTU3hEUVVGRE96czdPMWxCUjI1Q1F5eEhRVUZQTEVWQlFWQkJMRU5CUVU4N2JVSkJRVkJCTEZGQlFWRXNRMEZCVWtFc1QwRkJUeXhIUVVGSExFTkJRVU03WjBKQlExUXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRMFFzU1VGQlNUdFpRVU5zUWl4RFFVRkRPenM3V1VGRlJFVXNSMEZCYVVJc1JVRkJha0pCTEVOQlFXbENPMjFDUVVGcVFrRXNVVUZCVVN4RFFVRlNRU3hwUWtGQmFVSXNSMEZCUnl4RFFVRkRPMmRDUVVOdVFpeEhRVUZMTEVOQlFVTkRMR1ZCUVdVc1IwRkJSeXhKUVVGSk8yZENRVVUxUWl4TlFVRk5MRU5CUVVOQkxHVkJRV1U3V1VGRGVFSXNRMEZCUXpzN08xbEJSVVJETEVkQlFXTXNSVUZCWkVFc1EwRkJZenR0UWtGQlpFRXNVVUZCVVN4RFFVRlNRU3hqUVVGakxFZEJRVWNzUTBGQlF6dG5Ra0ZEYUVJc1IwRkJTeXhEUVVGRFF5eFpRVUZaTEVkQlFVY3NTMEZCU3p0blFrRkZNVUlzVFVGQlRTeERRVUZEUVN4WlFVRlpPMWxCUTNKQ0xFTkJRVU03T3p0WlFVVkVReXhIUVVGakxFVkJRV1JCTEVOQlFXTTdiVUpCUVdSQkxGRkJRVkVzUTBGQlVrRXNZMEZCWXl4SFFVRkhMRU5CUVVNN1owSkJRMmhDTEVkQlFVc3NRMEZCUTBNc1dVRkJXU3hIUVVGSExFdEJRVXM3WjBKQlJURkNMRTFCUVUwc1EwRkJRMEVzV1VGQldUdFpRVU55UWl4RFFVRkRPenM3V1VGRlJFTXNSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUTBGQlEwTXNTVUZCU1N4RlFVRjVRaXhEUVVGRE8yZENRVUY0UWl4SFFVRkhReXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORE4wSnVReXhEUkRaQ2JVTTdaMEpCUVVRc1EwRkJRenRuUWtGQlNTeE5RVUZOTEZsQlFVdEVMRWxCUVVrc2NVSkJRVWxETEd0Q1FVRnJRanRaUVVGSExFTkJRVU03TzAwN096dHJRa0V6UWpORVdDeGxRVUZsTEVFaWZRPT0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBSdWxlTmFtZVBhcnRUeXBlID0gXCJydWxlTmFtZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBPcHRpb25hbFBhcnRQYXJ0VHlwZSA9IFwib3B0aW9uYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwib25lT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwiemVyb09yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFJ1bGVOYW1lUGFydFR5cGUsXG4gIE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICBDaG9pY2VPZlBhcnRzUGFydFR5cGUsXG4gIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfb2NjYW1MZXhlcnMgPSByZXF1aXJlKFwib2NjYW0tbGV4ZXJzXCIpO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9wYXJ0VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcGFydFR5cGVzXCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgcXVlc3Rpb25NYXJrID0gX29jY2FtTGV4ZXJzLnNwZWNpYWxTeW1ib2xzLnF1ZXN0aW9uTWFyaztcbnZhciBPcHRpb25hbFBhcnRQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoT3B0aW9uYWxQYXJ0UGFydCwgTm9uVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKE9wdGlvbmFsUGFydFBhcnQpO1xuICAgIGZ1bmN0aW9uIE9wdGlvbmFsUGFydFBhcnQocGFydCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgT3B0aW9uYWxQYXJ0UGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgdmFyIHR5cGUgPSBfcGFydFR5cGVzLk9wdGlvbmFsUGFydFBhcnRUeXBlOyAvLy9cbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlKTtcbiAgICAgICAgX3RoaXMucGFydCA9IHBhcnQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKE9wdGlvbmFsUGFydFBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYXJ0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gdGhpcy5nZXRQYXJ0KCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvclN0cmluZyA9IHF1ZXN0aW9uTWFyaywgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLCBzdHJpbmcgPSBcIlwiLmNvbmNhdChwYXJ0U3RyaW5nKS5jb25jYXQob3BlcmF0b3JTdHJpbmcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihPcHRpb25hbFBhcnRQYXJ0LnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykuY2FsbCh0aGlzLCBPcHRpb25hbFBhcnRQYXJ0LCB0aGlzLnBhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIE9wdGlvbmFsUGFydFBhcnQ7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IE9wdGlvbmFsUGFydFBhcnQ7XG5mdW5jdGlvbiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIHZhciBwYXJzZWQ7XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgcGFyc2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDI1dmJsUmxjbTFwYm1Gc0wyOXdkR2x2Ym1Gc1VHRnlkQzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElIc2djM0JsWTJsaGJGTjViV0p2YkhNZ2ZTQm1jbTl0SUZ3aWIyTmpZVzB0YkdWNFpYSnpYQ0k3WEc1Y2JtbHRjRzl5ZENCT2IyNVVaWEp0YVc1aGJGQmhjblFnWm5KdmJTQmNJaTR1THk0dUwzQmhjblF2Ym05dVZHVnliV2x1WVd4Y0lqdGNibHh1YVcxd2IzSjBJSHNnVDNCMGFXOXVZV3hRWVhKMFVHRnlkRlI1Y0dVZ2ZTQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRGUjVjR1Z6WENJN1hHNWNibU52Ym5OMElIc2djWFZsYzNScGIyNU5ZWEpySUgwZ1BTQnpjR1ZqYVdGc1UzbHRZbTlzY3p0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nVDNCMGFXOXVZV3hRWVhKMFVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhjblFwSUh0Y2JpQWdJQ0JqYjI1emRDQjBlWEJsSUQwZ1QzQjBhVzl1WVd4UVlYSjBVR0Z5ZEZSNWNHVTdJQzh2TDF4dVhHNGdJQ0FnYzNWd1pYSW9kSGx3WlNrN1hHNWNiaUFnSUNCMGFHbHpMbkJoY25RZ1BTQndZWEowTzF4dUlDQjlYRzVjYmlBZ1oyVjBVR0Z5ZENncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXdZWEowTzF4dUlDQjlYRzVjYmlBZ2NHRnljMlVvYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5a2dlMXh1SUNBZ0lHeGxkQ0J3WVhKelpXUTdYRzVjYmlBZ0lDQmpiMjV6ZENCd1lYSjBJRDBnZEdocGN5NW5aWFJRWVhKMEtDazdYRzVjYmlBZ0lDQndZWEp6WldRZ1BTQndZWEp6WlZCaGNuUW9jR0Z5ZEN3Z2JtOWtaWE1zSUhOMFlYUmxMQ0JqWVd4c1ltRmpheWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjR0Z5YzJWa08xeHVJQ0I5WEc1Y2JpQWdZWE5UZEhKcGJtY29LU0I3WEc0Z0lDQWdZMjl1YzNRZ2IzQmxjbUYwYjNKVGRISnBibWNnUFNCeGRXVnpkR2x2YmsxaGNtc3NJQ0F2THk5Y2JpQWdJQ0FnSUNBZ0lDQndZWEowVTNSeWFXNW5JRDBnZEdocGN5NXdZWEowTG1GelUzUnlhVzVuS0Nrc1hHNGdJQ0FnSUNBZ0lDQWdjM1J5YVc1bklEMGdZQ1I3Y0dGeWRGTjBjbWx1WjMwa2UyOXdaWEpoZEc5eVUzUnlhVzVuZldBN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnWTJ4dmJtVW9LU0I3SUhKbGRIVnliaUJ6ZFhCbGNpNWpiRzl1WlNoUGNIUnBiMjVoYkZCaGNuUlFZWEowTENCMGFHbHpMbkJoY25RcE95QjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlIQmhjbk5sVUdGeWRDaHdZWEowTENCdWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lHeGxkQ0J3WVhKelpXUTdYRzVjYmlBZ2FXWWdLR05oYkd4aVlXTnJJQ0U5UFNCdWRXeHNLU0I3WEc0Z0lDQWdjR0Z5YzJWa0lEMGdZMkZzYkdKaFkyc29LVHRjYmx4dUlDQWdJR2xtSUNnaGNHRnljMlZrS1NCN1hHNGdJQ0FnSUNCd1lYSnpaV1FnUFNCd1lYSjBMbkJoY25ObEtHNXZaR1Z6TENCemRHRjBaU3dnWTJGc2JHSmhZMnNwTzF4dUlDQWdJSDFjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0J3WVhKMExuQmhjbk5sS0c1dlpHVnpMQ0J6ZEdGMFpTd2dZMkZzYkdKaFkyc3BPMXh1WEc0Z0lDQWdjR0Z5YzJWa0lEMGdkSEoxWlR0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCd1lYSnpaV1E3WEc1OVhHNGlYU3dpYm1GdFpYTWlPbHNpY1hWbGMzUnBiMjVOWVhKcklpd2ljM0JsWTJsaGJGTjViV0p2YkhNaUxDSlBjSFJwYjI1aGJGQmhjblJRWVhKMElpd2ljR0Z5ZENJc0luUjVjR1VpTENKUGNIUnBiMjVoYkZCaGNuUlFZWEowVkhsd1pTSXNJbWRsZEZCaGNuUWlMQ0p3WVhKelpTSXNJbTV2WkdWeklpd2ljM1JoZEdVaUxDSmpZV3hzWW1GamF5SXNJbkJoY25ObFpDSXNJbkJoY25ObFVHRnlkQ0lzSW1GelUzUnlhVzVuSWl3aWIzQmxjbUYwYjNKVGRISnBibWNpTENKd1lYSjBVM1J5YVc1bklpd2ljM1J5YVc1bklpd2lZMnh2Ym1VaUxDSk9iMjVVWlhKdGFXNWhiRkJoY25RaVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFTkJRVmtzVjBGQlFTeERRVUZET3pzN1JUdDNRanRCUVVWclFpeEhRVUZqTEVOQlFXUXNXVUZCWXp0QlFVVnFRaXhIUVVGM1FpeERRVUY0UWl4WlFVRjNRanRCUVVWbUxFZEJRV2xDTEVOQlFXcENMRlZCUVdsQ096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdkVUk3TzBzN096czdPM2RET3pzN096czdNa0k3T3pzN096czdPM0ZHT3pzN096czdPenM3T3pzN2JVVTdPMmxFT3pzN096dEJRVVYwUkN4SFFVRkxMRU5CUVVkQkxGbEJRVmtzUjBGQlMwTXNXVUZCWXl4blFrRkJMMEpFTEZsQlFWazdTVUZGUTBVc1owSkJRV2RDTEdsQ1FVRjBRaXhSUVVGUk8yZEVPenRoUVVGR1FTeG5Ra0ZCWjBJc1EwRkRka0pETEVsQlFVazdLME03TzFGQlEyUXNSMEZCU3l4RFFVRkRReXhKUVVGSkxFZEJRVWRETEZWQlFXOUNMSFZDUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJ0RFFVVm9RMFFzU1VGQlNTeERRMlJrTEVORVkyZENPMk5CUlZCRUxFbEJRVWtzUjBGQlIwRXNTVUZCU1N4RFFVRkRPenM3T3p0WlFVZHVRa2NzUjBGQlR5eEZRVUZRUVN4RFFVRlBPMjFDUVVGUVFTeFJRVUZSTEVOQlFWSkJMRTlCUVU4c1IwRkJSeXhEUVVGRE8yZENRVU5VTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOSUxFbEJRVWs3V1VGRGJFSXNRMEZCUXpzN08xbEJSVVJKTEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFTkJRVU5ETEV0QlFVc3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0blFrRkROMElzUjBGQlJ5eERRVUZEUXl4TlFVRk5PMmRDUVVWV0xFZEJRVXNzUTBGQlExSXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRMGNzVDBGQlR6dG5Ra0ZGZWtKTExFMUJRVTBzUjBGQlIwTXNVMEZCVXl4RFFVRkRWQ3hKUVVGSkxFVkJRVVZMTEV0QlFVc3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0blFrRkZha1FzVFVGQlRTeERRVUZEUXl4TlFVRk5PMWxCUTJZc1EwRkJRenM3TzFsQlJVUkZMRWRCUVZFc1JVRkJVa0VzUTBGQlVUdHRRa0ZCVWtFc1VVRkJVU3hEUVVGU1FTeFJRVUZSTEVkQlFVY3NRMEZCUXp0blFrRkRWaXhIUVVGTExFTkJRVU5ETEdOQlFXTXNSMEZCUjJRc1dVRkJXU3hGUVVNM1FtVXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJRMW9zU1VGQlNTeERRVUZEVlN4UlFVRlJMRWxCUXk5Q1J5eE5RVUZOTEVkQlFVa3NRMEZCUVN4RlFVRmxSaXhOUVVGakxFTkJRVE5DUXl4VlFVRlZMRVZCUVd0Q0xFMUJRVUVzUTBGQlprUXNZMEZCWXp0blFrRkZOME1zVFVGQlRTeERRVUZEUlN4TlFVRk5PMWxCUTJZc1EwRkJRenM3TzFsQlJVUkRMRWRCUVVzc1JVRkJURUVzUTBGQlN6dHRRa0ZCVEVFc1VVRkJVU3hEUVVGU1FTeExRVUZMTEVkQlFVY3NRMEZCUXp0blFrRkJReXhOUVVGTkxITkNRUzlDUjJZc1owSkJRV2RDTEdGQkswSmFaU3hEUVVGTExGRkJRVmdzU1VGQlN5eGhRVUZQWml4blFrRkJaMElzUlVGQlJTeEpRVUZKTEVOQlFVTkRMRWxCUVVrN1dVRkJSeXhEUVVGRE96dE5PenRGUVM5Q2FFSmxMRmxCUVdVN2EwSkJRWGhEYUVJc1owSkJRV2RDTEVFN1UwRnJRelZDVlN4VFFVRlRMRU5CUVVOVUxFbEJRVWtzUlVGQlJVc3NTMEZCU3l4RlFVRkZReXhMUVVGTExFVkJRVVZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJoRUxFZEJRVWNzUTBGQlEwTXNUVUZCVFR0SlFVVldMRVZCUVVVc1JVRkJSVVFzVVVGQlVTeExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUTNSQ1F5eE5RVUZOTEVkQlFVZEVMRkZCUVZFc1JVRkJSU3hEUVVGRE8xRkJSWEJDTEVWQlFVVXNSMEZCUjBNc1RVRkJUU3hGUVVGRkxFTkJRVU03V1VGRFdrRXNUVUZCVFN4SFFVRkhVaXhKUVVGSkxFTkJRVU5KTEV0QlFVc3NRMEZCUTBNc1MwRkJTeXhGUVVGRlF5eExRVUZMTEVWQlFVVkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJRemxETEVOQlFVTTdTVUZEU0N4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVOT1VDeEpRVUZKTEVOQlFVTkpMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlJXNURReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzBsQlEyaENMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFTkJRVU5CTEUxQlFVMDdRVUZEWml4RFFVRkRJbjA9IiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgQ29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoQ29sbGVjdGlvbk9mUGFydHNQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ29sbGVjdGlvbk9mUGFydHNQYXJ0KTtcbiAgICBmdW5jdGlvbiBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQodHlwZSwgcGFydCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sbGVjdGlvbk9mUGFydHNQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0ID0gcGFydDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoQ29sbGVjdGlvbk9mUGFydHNQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFydCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZyhvcGVyYXRvclN0cmluZykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksIHN0cmluZyA9IFwiXCIuY29uY2F0KHBhcnRTdHJpbmcpLmNvbmNhdChvcGVyYXRvclN0cmluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoUGFydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFBhcnQsIHRoaXMucGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gQ29sbGVjdGlvbk9mUGFydHNQYXJ0O1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwyNXZibFJsY20xcGJtRnNMMk52Ykd4bFkzUnBiMjVQWmxCaGNuUnpMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ1RtOXVWR1Z5YldsdVlXeFFZWEowSUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowTDI1dmJsUmxjbTFwYm1Gc1hDSTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklFTnZiR3hsWTNScGIyNVBabEJoY25SelVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIUjVjR1VzSUhCaGNuUXBJSHRjYmlBZ0lDQnpkWEJsY2loMGVYQmxLVHRjYmx4dUlDQWdJSFJvYVhNdWNHRnlkQ0E5SUhCaGNuUTdYRzRnSUgxY2JseHVJQ0JuWlhSUVlYSjBLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5CaGNuUTdYRzRnSUgxY2JpQWdYRzRnSUdGelUzUnlhVzVuS0c5d1pYSmhkRzl5VTNSeWFXNW5LU0I3WEc0Z0lDQWdZMjl1YzNRZ2NHRnlkRk4wY21sdVp5QTlJSFJvYVhNdWNHRnlkQzVoYzFOMGNtbHVaeWdwTEZ4dUlDQWdJQ0FnSUNBZ0lITjBjbWx1WnlBOUlHQWtlM0JoY25SVGRISnBibWQ5Skh0dmNHVnlZWFJ2Y2xOMGNtbHVaMzFnTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE4wY21sdVp6dGNiaUFnZlZ4dVhHNGdJR05zYjI1bEtGQmhjblFwSUhzZ2NtVjBkWEp1SUhOMWNHVnlMbU5zYjI1bEtGQmhjblFzSUhSb2FYTXVjR0Z5ZENrN0lIMWNibjFjYmlKZExDSnVZVzFsY3lJNld5SkRiMnhzWldOMGFXOXVUMlpRWVhKMGMxQmhjblFpTENKMGVYQmxJaXdpY0dGeWRDSXNJbWRsZEZCaGNuUWlMQ0poYzFOMGNtbHVaeUlzSW05d1pYSmhkRzl5VTNSeWFXNW5JaXdpY0dGeWRGTjBjbWx1WnlJc0luTjBjbWx1WnlJc0ltTnNiMjVsSWl3aVVHRnlkQ0lzSWs1dmJsUmxjbTFwYm1Gc1VHRnlkQ0pkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ08wRkJSV1VzUjBGQmQwSXNRMEZCZUVJc1dVRkJkMEk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN01FSTdPenM3T3pzN096czdVenM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN2QwTTdPenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJTOUNRU3h4UWtGQmNVSXNhVUpCUVROQ0xGRkJRVkU3Y1VRN08yRkJRVVpCTEhGQ1FVRnhRaXhEUVVNMVFrTXNTVUZCU1N4RlFVRkZReXhKUVVGSk8yOUVPenRyUTBGRFpFUXNTVUZCU1N4RFEwNWtMRU5FVFdkQ08yTkJSVkJETEVsQlFVa3NSMEZCUjBFc1NVRkJTU3hEUVVGRE96czdPenRaUVVkdVFrTXNSMEZCVHl4RlFVRlFRU3hEUVVGUE8yMUNRVUZRUVN4UlFVRlJMRU5CUVZKQkxFOUJRVThzUjBGQlJ5eERRVUZETzJkQ1FVTlVMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU5FTEVsQlFVazdXVUZEYkVJc1EwRkJRenM3TzFsQlJVUkZMRWRCUVZFc1JVRkJVa0VzUTBGQlVUdHRRa0ZCVWtFc1VVRkJVU3hEUVVGU1FTeFJRVUZSTEVOQlFVTkRMR05CUVdNc1JVRkJSU3hEUVVGRE8yZENRVU40UWl4SFFVRkxMRU5CUVVORExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTktMRWxCUVVrc1EwRkJRMFVzVVVGQlVTeEpRVU12UWtjc1RVRkJUU3hIUVVGSkxFTkJRVUVzUlVGQlpVWXNUVUZCWXl4RFFVRXpRa01zVlVGQlZTeEZRVUZyUWl4TlFVRkJMRU5CUVdaRUxHTkJRV003WjBKQlJUZERMRTFCUVUwc1EwRkJRMFVzVFVGQlRUdFpRVU5tTEVOQlFVTTdPenRaUVVWRVF5eEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVXhCTEZGQlFWRXNRMEZCVWtFc1MwRkJTeXhEUVVGRFF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0blFrRkJReXhOUVVGTkxITkNRV3hDUkZRc2NVSkJRWEZDTEdGQmEwSmlVU3hEUVVGTExGRkJRVmdzU1VGQlN5eGhRVUZQUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRFVDeEpRVUZKTzFsQlFVY3NRMEZCUXpzN1RUczdSVUZzUWtoUkxGbEJRV1U3YTBKQlFUZERWaXh4UWtGQmNVSXNRU0o5IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUsIHBhcnQpO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5nZXRQYXJ0KCksXG4gICAgICAgICAgcGFydE5vZGVzID0gW10sXG4gICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBwYXJ0Tm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0Tm9kZXMpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IG9wZXJhdG9yU3RyaW5nID0gcGx1cywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKE9uZU9yTW9yZVBhcnRzUGFydCk7IH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4ge1xuICAgICAgbGV0IHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUsIHBhcnQpO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5nZXRQYXJ0KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBhc3RlcmlzaywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFplcm9Pck1vcmVQYXJ0c1BhcnQpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLCBRdWFudGlmaWVyUnVsZU5hbWUsIFJ1bGVOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IFJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gUXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2Rlcykge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX29jY2FtTGV4ZXJzID0gcmVxdWlyZShcIm9jY2FtLWxleGVyc1wiKTtcbnZhciBfbm9uVGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCIpKTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uLy4uL2NvbnN0YW50c1wiKTtcbnZhciBfcGFydFR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3BhcnRUeXBlc1wiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkge1xuICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIgfHwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgd2hpbGUoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSl7XG4gICAgICAgIG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIGV4Y2xhbWF0aW9uTWFyayA9IF9vY2NhbUxleGVycy5zcGVjaWFsU3ltYm9scy5leGNsYW1hdGlvbk1hcms7XG52YXIgUnVsZU5hbWVQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoUnVsZU5hbWVQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUnVsZU5hbWVQYXJ0KTtcbiAgICBmdW5jdGlvbiBSdWxlTmFtZVBhcnQocnVsZU5hbWUpIHtcbiAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSdWxlTmFtZVBhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIHZhciB0eXBlID0gX3BhcnRUeXBlcy5SdWxlTmFtZVBhcnRUeXBlOyAvLy9cbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlKTtcbiAgICAgICAgX3RoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgICAgICAgX3RoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhSdWxlTmFtZVBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFJ1bGVOYW1lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UnVsZU5hbWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc0xvb2tBaGVhZFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzTG9va0FoZWFkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvb2tBaGVhZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzUnVsZU5hbWVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lUGFydCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInNldExvb2tBaGVhZFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldExvb2tBaGVhZChsb29rQWhlYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZpbmRSdWxlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZmluZFJ1bGUoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVsZU1hcCA9IHN0YXRlLmdldFJ1bGVNYXAoKSwgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciBydWxlID0gdGhpcy5maW5kUnVsZShzdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBydWxlTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImFzU3RyaW5nXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYXNTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxvb2tBaGVhZFN0cmluZyA9IHRoaXMubG9va0FoZWFkID8gZXhjbGFtYXRpb25NYXJrIDogX2NvbnN0YW50cy5FTVBUWV9TVFJJTkcsIHN0cmluZyA9IFwiXCIuY29uY2F0KHRoaXMucnVsZU5hbWUpLmNvbmNhdChsb29rQWhlYWRTdHJpbmcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihSdWxlTmFtZVBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFJ1bGVOYW1lUGFydCwgdGhpcy5ydWxlTmFtZSwgdGhpcy5sb29rQWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFJ1bGVOYW1lUGFydDtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gUnVsZU5hbWVQYXJ0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5d1lYSjBMMjV2YmxSbGNtMXBibUZzTDNKMWJHVk9ZVzFsTG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzVwYlhCdmNuUWdleUJ6Y0dWamFXRnNVM2x0WW05c2N5QjlJR1p5YjIwZ1hDSnZZMk5oYlMxc1pYaGxjbk5jSWp0Y2JseHVhVzF3YjNKMElFNXZibFJsY20xcGJtRnNVR0Z5ZENCbWNtOXRJRndpTGk0dkxpNHZjR0Z5ZEM5dWIyNVVaWEp0YVc1aGJGd2lPMXh1WEc1cGJYQnZjblFnZXlCRlRWQlVXVjlUVkZKSlRrY2dmU0JtY205dElGd2lMaTR2TGk0dlkyOXVjM1JoYm5SelhDSTdYRzVwYlhCdmNuUWdleUJTZFd4bFRtRnRaVkJoY25SVWVYQmxJSDBnWm5KdmJTQmNJaTR1THk0dUwzQmhjblJVZVhCbGMxd2lPMXh1WEc1amIyNXpkQ0I3SUdWNFkyeGhiV0YwYVc5dVRXRnlheUI5SUQwZ2MzQmxZMmxoYkZONWJXSnZiSE03WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRkoxYkdWT1lXMWxVR0Z5ZENCbGVIUmxibVJ6SUU1dmJsUmxjbTFwYm1Gc1VHRnlkQ0I3WEc0Z0lHTnZibk4wY25WamRHOXlLSEoxYkdWT1lXMWxMQ0JzYjI5clFXaGxZV1FnUFNCbVlXeHpaU2tnZTF4dUlDQWdJR052Ym5OMElIUjVjR1VnUFNCU2RXeGxUbUZ0WlZCaGNuUlVlWEJsT3lBdkx5OWNibHh1SUNBZ0lITjFjR1Z5S0hSNWNHVXBPMXh1WEc0Z0lDQWdkR2hwY3k1eWRXeGxUbUZ0WlNBOUlISjFiR1ZPWVcxbE8xeHVYRzRnSUNBZ2RHaHBjeTVzYjI5clFXaGxZV1FnUFNCc2IyOXJRV2hsWVdRN1hHNGdJSDFjYmlBZ1hHNGdJR2RsZEZKMWJHVk9ZVzFsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuSjFiR1ZPWVcxbE8xeHVJQ0I5WEc1Y2JpQWdhWE5NYjI5clFXaGxZV1FvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWJHOXZhMEZvWldGa08xeHVJQ0I5WEc1Y2JpQWdhWE5TZFd4bFRtRnRaVkJoY25Rb0tTQjdYRzRnSUNBZ1kyOXVjM1FnY25Wc1pVNWhiV1ZRWVhKMElEMGdkSEoxWlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5ZFd4bFRtRnRaVkJoY25RN1hHNGdJSDFjYmx4dUlDQnpaWFJNYjI5clFXaGxZV1FvYkc5dmEwRm9aV0ZrS1NCN1hHNGdJQ0FnZEdocGN5NXNiMjlyUVdobFlXUWdQU0JzYjI5clFXaGxZV1E3WEc0Z0lIMWNibHh1SUNCbWFXNWtVblZzWlNoemRHRjBaU2tnZTF4dUlDQWdJR052Ym5OMElISjFiR1ZOWVhBZ1BTQnpkR0YwWlM1blpYUlNkV3hsVFdGd0tDa3NYRzRnSUNBZ0lDQWdJQ0FnY25Wc1pTQTlJSEoxYkdWTllYQmJkR2hwY3k1eWRXeGxUbUZ0WlYwZ2ZId2diblZzYkRzZ0lDOHZMMXh1WEc0Z0lDQWdjbVYwZFhKdUlISjFiR1U3WEc0Z0lIMWNibHh1SUNCd1lYSnpaU2h1YjJSbGN5d2djM1JoZEdVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2JHVjBJSEJoY25ObFpEdGNibHh1SUNBZ0lHTnZibk4wSUhKMWJHVWdQU0IwYUdsekxtWnBibVJTZFd4bEtITjBZWFJsS1R0Y2JseHVJQ0FnSUdsbUlDaHlkV3hsSUQwOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCd1lYSnpaV1FnUFNCbVlXeHpaVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnY25Wc1pVNXZaR1VnUFNCeWRXeGxMbkJoY25ObEtITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNWNiaUFnSUNBZ0lIQmhjbk5sWkNBOUlDaHlkV3hsVG05a1pTQWhQVDBnYm5Wc2JDazdYRzVjYmlBZ0lDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2JtOWtaWE11Y0hWemFDaHlkV3hsVG05a1pTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhCaGNuTmxaRHRjYmlBZ2ZWeHVYRzRnSUdGelUzUnlhVzVuS0NrZ2UxeHVJQ0FnSUdOdmJuTjBJR3h2YjJ0QmFHVmhaRk4wY21sdVp5QTlJSFJvYVhNdWJHOXZhMEZvWldGa0lEOWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWNFkyeGhiV0YwYVc5dVRXRnlheUE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRVZOVUZSWlgxTlVVa2xPUnl4Y2JpQWdJQ0FnSUNBZ0lDQnpkSEpwYm1jZ1BTQmdKSHQwYUdsekxuSjFiR1ZPWVcxbGZTUjdiRzl2YTBGb1pXRmtVM1J5YVc1bmZXQTdYRzVjYmlBZ0lDQnlaWFIxY200Z2MzUnlhVzVuTzF4dUlDQjlYRzVjYmlBZ1kyeHZibVVvS1NCN0lISmxkSFZ5YmlCemRYQmxjaTVqYkc5dVpTaFNkV3hsVG1GdFpWQmhjblFzSUhSb2FYTXVjblZzWlU1aGJXVXNJSFJvYVhNdWJHOXZhMEZvWldGa0tUc2dmVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbVY0WTJ4aGJXRjBhVzl1VFdGeWF5SXNJbk53WldOcFlXeFRlVzFpYjJ4eklpd2lVblZzWlU1aGJXVlFZWEowSWl3aWNuVnNaVTVoYldVaUxDSnNiMjlyUVdobFlXUWlMQ0owZVhCbElpd2lVblZzWlU1aGJXVlFZWEowVkhsd1pTSXNJbWRsZEZKMWJHVk9ZVzFsSWl3aWFYTk1iMjlyUVdobFlXUWlMQ0pwYzFKMWJHVk9ZVzFsVUdGeWRDSXNJbkoxYkdWT1lXMWxVR0Z5ZENJc0luTmxkRXh2YjJ0QmFHVmhaQ0lzSW1acGJtUlNkV3hsSWl3aWMzUmhkR1VpTENKeWRXeGxUV0Z3SWl3aVoyVjBVblZzWlUxaGNDSXNJbkoxYkdVaUxDSndZWEp6WlNJc0ltNXZaR1Z6SWl3aVkyRnNiR0poWTJzaUxDSndZWEp6WldRaUxDSnlkV3hsVG05a1pTSXNJbkIxYzJnaUxDSmhjMU4wY21sdVp5SXNJbXh2YjJ0QmFHVmhaRk4wY21sdVp5SXNJa1ZOVUZSWlgxTlVVa2xPUnlJc0luTjBjbWx1WnlJc0ltTnNiMjVsSWl3aVRtOXVWR1Z5YldsdVlXeFFZWEowSWwwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4RFFVRlpMRmRCUVVFc1EwRkJRenM3TzBVN2QwSTdRVUZGYTBJc1IwRkJZeXhEUVVGa0xGbEJRV003UVVGRmFrSXNSMEZCZDBJc1EwRkJlRUlzV1VGQmQwSTdRVUZGZGtJc1IwRkJhVUlzUTBGQmFrSXNWVUZCYVVJN1FVRkRZaXhIUVVGcFFpeERRVUZxUWl4VlFVRnBRanM3T3pzN096czdPenM3T3pzN096aEVPM05ET3paRU8ybEZPenM3TzNkRk8yZEZPenM3T3pzd1FqczdPenM3T3pzN096dFRPenM3T3pzN08wczdPenM3T3pzN096czdPenM3VFR0NVJEczdPenM3T3pzN096czdPenM3TzNWQ096dExPenM3T3p0M1F6czdPenM3T3pKQ096czdPenM3T3p0eFJqczdPenM3T3pzN096czdPMjFGT3p0cFJEczdPenM3UVVGRmJFUXNSMEZCU3l4RFFVRkhRU3hsUVVGbExFZEJRVXRETEZsQlFXTXNaMEpCUVd4RFJDeGxRVUZsTzBsQlJVWkZMRmxCUVZrc2FVSkJRV3hDTEZGQlFWRTdORU03TzJGQlFVWkJMRmxCUVZrc1EwRkRia0pETEZGQlFWRTdXVUZCUlVNc1UwRkJVeXh2UlVGQlJ5eExRVUZMT3pKRE96dFJRVU55UXl4SFFVRkxMRU5CUVVORExFbEJRVWtzUjBGQlIwTXNWVUZCWjBJc2JVSkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdhME5CUlRWQ1JDeEpRVUZKTEVORFptUXNRMFJsWjBJN1kwRkZVRVlzVVVGQlVTeEhRVUZIUVN4UlFVRlJMRU5CUVVNN1kwRkZjRUpETEZOQlFWTXNSMEZCUjBFc1UwRkJVeXhEUVVGRE96czdPenRaUVVjM1FrY3NSMEZCVnl4RlFVRllRU3hEUVVGWE8yMUNRVUZZUVN4UlFVRlJMRU5CUVZKQkxGZEJRVmNzUjBGQlJ5eERRVUZETzJkQ1FVTmlMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU5LTEZGQlFWRTdXVUZEZEVJc1EwRkJRenM3TzFsQlJVUkxMRWRCUVZjc1JVRkJXRUVzUTBGQlZ6dHRRa0ZCV0VFc1VVRkJVU3hEUVVGU1FTeFhRVUZYTEVkQlFVY3NRMEZCUXp0blFrRkRZaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZEU2l4VFFVRlRPMWxCUTNaQ0xFTkJRVU03T3p0WlFVVkVTeXhIUVVGakxFVkJRV1JCTEVOQlFXTTdiVUpCUVdSQkxGRkJRVkVzUTBGQlVrRXNZMEZCWXl4SFFVRkhMRU5CUVVNN1owSkJRMmhDTEVkQlFVc3NRMEZCUTBNc1dVRkJXU3hIUVVGSExFbEJRVWs3WjBKQlJYcENMRTFCUVUwc1EwRkJRMEVzV1VGQldUdFpRVU55UWl4RFFVRkRPenM3V1VGRlJFTXNSMEZCV1N4RlFVRmFRU3hEUVVGWk8yMUNRVUZhUVN4UlFVRlJMRU5CUVZKQkxGbEJRVmtzUTBGQlExQXNVMEZCVXl4RlFVRkZMRU5CUVVNN1owSkJRM1pDTEVsQlFVa3NRMEZCUTBFc1UwRkJVeXhIUVVGSFFTeFRRVUZUTEVOQlFVTTdXVUZETjBJc1EwRkJRenM3TzFsQlJVUlJMRWRCUVZFc1JVRkJVa0VzUTBGQlVUdHRRa0ZCVWtFc1VVRkJVU3hEUVVGU1FTeFJRVUZSTEVOQlFVTkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU5tTEVkQlFVc3NRMEZCUTBNc1QwRkJUeXhIUVVGSFJDeExRVUZMTEVOQlFVTkZMRlZCUVZVc1NVRkRNVUpETEVsQlFVa3NSMEZCUjBZc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlExZ3NVVUZCVVN4TFFVRkxMRWxCUVVrc1JVRkJSeXhGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZGYWtRc1RVRkJUU3hEUVVGRFlTeEpRVUZKTzFsQlEySXNRMEZCUXpzN08xbEJSVVJETEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFTkJRVU5ETEV0QlFVc3NSVUZCUlV3c1MwRkJTeXhGUVVGRlRTeFJRVUZSTEVWQlFVVXNRMEZCUXp0blFrRkROMElzUjBGQlJ5eERRVUZEUXl4TlFVRk5PMmRDUVVWV0xFZEJRVXNzUTBGQlEwb3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRMG9zVVVGQlVTeERRVUZEUXl4TFFVRkxPMmRDUVVWb1F5eEZRVUZGTEVWQlFVVkhMRWxCUVVrc1MwRkJTeXhKUVVGSkxFVkJRVVVzUTBGQlF6dHZRa0ZEYkVKSkxFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTTdaMEpCUTJwQ0xFTkJRVU1zVFVGQlRTeERRVUZETzI5Q1FVTk9MRWRCUVVzc1EwRkJRME1zVVVGQlVTeEhRVUZIVEN4SlFVRkpMRU5CUVVORExFdEJRVXNzUTBGQlEwb3NTMEZCU3l4RlFVRkZUU3hSUVVGUk8yOUNRVVV6UTBNc1RVRkJUU3hIUVVGSlF5eFJRVUZSTEV0QlFVc3NTVUZCU1N4QlFVRkRMRU5CUVVNN2IwSkJSVGRDTEVWQlFVVXNSVUZCUlVRc1RVRkJUU3hGUVVGRkxFTkJRVU03ZDBKQlExaEdMRXRCUVVzc1EwRkJRMGtzU1VGQlNTeERRVUZEUkN4UlFVRlJMRU5CUVVNc1EwRkJRenR2UWtGRGRrSXNRMEZCUXp0blFrRkRTQ3hEUVVGRE8yZENRVVZFTEUxQlFVMHNRMEZCUTBRc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVSeXhIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzUjBGQlN5eERRVUZEUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRGNFSXNVMEZCVXl4SFFVTmFTaXhsUVVGbExFZEJRMko1UWl4VlFVRlpMR1ZCUTJ4RFF5eE5RVUZOTEVkQlFVa3NRMEZCUVN4RlFVRnJRa1lzVFVGQlpTeERRVUV2UWl4SlFVRkpMRU5CUVVOeVFpeFJRVUZSTEVWQlFXMUNMRTFCUVVFc1EwRkJhRUp4UWl4bFFVRmxPMmRDUVVWcVJDeE5RVUZOTEVOQlFVTkZMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkVNc1IwRkJTeXhGUVVGTVFTeERRVUZMTzIxQ1FVRk1RU3hSUVVGUkxFTkJRVkpCTEV0QlFVc3NSMEZCUnl4RFFVRkRPMmRDUVVGRExFMUJRVTBzYzBKQmFrVkhla0lzV1VGQldTeGhRV2xGVW5sQ0xFTkJRVXNzVVVGQldDeEpRVUZMTEdGQlFVOTZRaXhaUVVGWkxFVkJRVVVzU1VGQlNTeERRVUZEUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRFF5eFRRVUZUTzFsQlFVY3NRMEZCUXpzN1RUczdSVUZxUlhCRGQwSXNXVUZCWlR0clFrRkJjRU14UWl4WlFVRlpMRUVpZlE9PSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydCh0ZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBRdWFudGlmaWVyUnVsZU5hbWUsIE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWUgPSBRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBxdWFudGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChxdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobm9uVGVybWluYWxQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChxdWFudGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSwgTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0LCB0aGlyZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVJ1bGUoUnVsZSkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHRoaXMuZ2VuZXJhdGVEZWZpbml0aW9ucygpLFxuICAgICAgICAgIE5vZGUgPSBOb25UZXJtaW5hbE5vZGUsXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBuYW1lQk5GTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVCTkZOb2RlLmdldE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgdGhpcmRDaGlsZE5vZGUgPSB0aGlyZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBkZWZpbml0aW9uc05vZGUgPSB0aGlyZENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnNOb2RlLmdlbmVyYXRlRGVmaW5pdGlvbnMoKTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF90ZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvdGVybWluYWxcIikpO1xudmFyIF90ZXJtaW5hbDEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCIpKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkge1xuICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIgfHwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgd2hpbGUoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSl7XG4gICAgICAgIG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIFRlcm1pbmFsU3ltYm9sUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oVGVybWluYWxQYXJ0KSB7XG4gICAgX2luaGVyaXRzKFRlcm1pbmFsU3ltYm9sUGFydCwgVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFRlcm1pbmFsU3ltYm9sUGFydCk7XG4gICAgZnVuY3Rpb24gVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRlcm1pbmFsU3ltYm9sUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgX3RoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFRlcm1pbmFsU3ltYm9sUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicGFyc2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgICAgICAgICB2YXIgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB2YXIgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSwgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLCBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50ID09PSB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IF90ZXJtaW5hbDEuZGVmYXVsdC5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJzZWQgPSB0ZXJtaW5hbE5vZGUgIT09IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuY29udGVudC5yZXBsYWNlKC9cXFxcLywgXCJcXFxcXFxcXFwiKSwgc3RyaW5nID0gXCJcXFwiXCIuY29uY2F0KGNvbnRlbnQsIFwiXFxcIlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiY2xvbmVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoVGVybWluYWxTeW1ib2xQYXJ0LnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykuY2FsbCh0aGlzLCBUZXJtaW5hbFN5bWJvbFBhcnQsIHRoaXMuY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gVGVybWluYWxTeW1ib2xQYXJ0O1xufShfdGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBUZXJtaW5hbFN5bWJvbFBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwzUmxjbTFwYm1Gc0wzUmxjbTFwYm1Gc1UzbHRZbTlzTG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzVwYlhCdmNuUWdWR1Z5YldsdVlXeFFZWEowSUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowTDNSbGNtMXBibUZzWENJN1hHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4T2IyUmxJR1p5YjIwZ1hDSXVMaTh1TGk5dWIyUmxMM1JsY20xcGJtRnNYQ0k3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRlJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ0JsZUhSbGJtUnpJRlJsY20xcGJtRnNVR0Z5ZENCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0dOdmJuUmxiblFwSUh0Y2JpQWdJQ0J6ZFhCbGNpZ3BPMXh1SUNBZ0lGeHVJQ0FnSUhSb2FYTXVZMjl1ZEdWdWRDQTlJR052Ym5SbGJuUTdYRzRnSUgxY2JseHVJQ0J3WVhKelpTaHViMlJsY3l3Z2MzUmhkR1VzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnYkdWMElIQmhjbk5sWkR0Y2JseHVJQ0FnSUd4bGRDQjBaWEp0YVc1aGJFNXZaR1VnUFNCdWRXeHNPMXh1SUNBZ0lGeHVJQ0FnSUdOdmJuTjBJSE5oZG1Wa1NXNWtaWGdnUFNCemRHRjBaUzVuWlhSVFlYWmxaRWx1WkdWNEtDa3NYRzVjZEZ4MElDQWdJQ0FnYm1WNGRGTnBaMjVwWm1sallXNTBWRzlyWlc0Z1BTQnpkR0YwWlM1blpYUk9aWGgwVTJsbmJtbG1hV05oYm5SVWIydGxiaWdwTEZ4dVhIUmNkRngwWEhSY2RITnBaMjVwWm1sallXNTBWRzlyWlc0Z1BTQnVaWGgwVTJsbmJtbG1hV05oYm5SVWIydGxianNnTHk4dlhHNWNiaUFnSUNCcFppQW9jMmxuYm1sbWFXTmhiblJVYjJ0bGJpQWhQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZENBOUlITnBaMjVwWm1sallXNTBWRzlyWlc0dVoyVjBRMjl1ZEdWdWRDZ3BPMXh1WEc0Z0lDQWdJQ0JwWmlBb1kyOXVkR1Z1ZENBOVBUMGdkR2hwY3k1amIyNTBaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lIUmxjbTFwYm1Gc1RtOWtaU0E5SUZSbGNtMXBibUZzVG05a1pTNW1jbTl0VTJsbmJtbG1hV05oYm5SVWIydGxiaWh6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQndZWEp6WldRZ1BTQW9kR1Z5YldsdVlXeE9iMlJsSUNFOVBTQnVkV3hzS1R0Y2JseHVJQ0FnSUdsbUlDaHdZWEp6WldRcElIdGNiaUFnSUNBZ0lHNXZaR1Z6TG5CMWMyZ29kR1Z5YldsdVlXeE9iMlJsS1R0Y2JseHVJQ0FnSUNBZ2FXWWdLR05oYkd4aVlXTnJJQ0U5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUhCaGNuTmxaQ0E5SUdOaGJHeGlZV05yS0NrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0NGd1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnViMlJsY3k1d2IzQW9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaGNHRnljMlZrS1NCN1hHNGdJQ0FnSUNCemRHRjBaUzVpWVdOcmRISmhZMnNvYzJGMlpXUkpibVJsZUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSEJoY25ObFpEdGNiaUFnZlZ4dUlDQmNiaUFnWVhOVGRISnBibWNvS1NCN1hHNGdJQ0FnWTI5dWMzUWdZMjl1ZEdWdWRDQTlJSFJvYVhNdVkyOXVkR1Z1ZEM1eVpYQnNZV05sS0M5Y1hGeGNMeXdnWENKY1hGeGNYRnhjWEZ3aUtTeGNiaUFnSUNBZ0lDQWdJQ0J6ZEhKcGJtY2dQU0JnWENJa2UyTnZiblJsYm5SOVhDSmdPMXh1SUNBZ0lGeHVJQ0FnSUhKbGRIVnliaUJ6ZEhKcGJtYzdYRzRnSUgxY2JseHVJQ0JqYkc5dVpTZ3BJSHNnY21WMGRYSnVJSE4xY0dWeUxtTnNiMjVsS0ZSbGNtMXBibUZzVTNsdFltOXNVR0Z5ZEN3Z2RHaHBjeTVqYjI1MFpXNTBLVHNnZlZ4dWZWeHVJbDBzSW01aGJXVnpJanBiSWxSbGNtMXBibUZzVTNsdFltOXNVR0Z5ZENJc0ltTnZiblJsYm5RaUxDSndZWEp6WlNJc0ltNXZaR1Z6SWl3aWMzUmhkR1VpTENKallXeHNZbUZqYXlJc0luQmhjbk5sWkNJc0luUmxjbTFwYm1Gc1RtOWtaU0lzSW5OaGRtVmtTVzVrWlhnaUxDSm5aWFJUWVhabFpFbHVaR1Y0SWl3aWJtVjRkRk5wWjI1cFptbGpZVzUwVkc5clpXNGlMQ0puWlhST1pYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJpSXNJbk5wWjI1cFptbGpZVzUwVkc5clpXNGlMQ0puWlhSRGIyNTBaVzUwSWl3aVZHVnliV2x1WVd4T2IyUmxJaXdpWm5KdmJWTnBaMjVwWm1sallXNTBWRzlyWlc0aUxDSndkWE5vSWl3aWNHOXdJaXdpWW1GamEzUnlZV05ySWl3aVlYTlRkSEpwYm1jaUxDSnlaWEJzWVdObElpd2ljM1J5YVc1bklpd2lZMnh2Ym1VaUxDSlVaWEp0YVc1aGJGQmhjblFpWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEVOQlFWa3NWMEZCUVN4RFFVRkRPenM3UlR0M1FqdEJRVVZaTEVkQlFYRkNMRU5CUVhKQ0xGTkJRWEZDTzBGQlEzSkNMRWRCUVhGQ0xFTkJRWEpDTEZWQlFYRkNPenM3T3pzN096czdPenM3T3pzN09FUTdjME03TmtRN2FVVTdPenM3ZDBVN1owVTdPenM3T3pCQ096czdPenM3T3pzN08xTTdPenM3T3pzN1N6czdPenM3T3pzN096czdPenROTzNsRU96czdPenM3T3pzN096czdPenM3ZFVJN08wczdPenM3TzNkRE96czdPenM3TWtJN096czdPenM3TzNGR096czdPenM3T3pzN096czdiVVU3TzJsRU96czdPenRKUVVWNlFrRXNhMEpCUVd0Q0xHbENRVUY0UWl4UlFVRlJPeXRET3p0aFFVRkdRU3hyUWtGQmEwSXNRMEZEZWtKRExFOUJRVTg3YVVRN08ybERRMDV5UWl4RFJFOVpPMk5CUlVoQkxFOUJRVThzUjBGQlIwRXNUMEZCVHl4RFFVRkRPenM3T3p0WlFVZDZRa01zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUlVGQlJTeERRVUZETzJkQ1FVTTNRaXhIUVVGSExFTkJRVU5ETEUxQlFVMDdaMEpCUlZZc1IwRkJSeXhEUVVGRFF5eFpRVUZaTEVkQlFVY3NTVUZCU1R0blFrRkZka0lzUjBGQlN5eERRVUZEUXl4VlFVRlZMRWRCUVVkS0xFdEJRVXNzUTBGQlEwc3NZVUZCWVN4SlFVTnNRME1zYjBKQlFXOUNMRWRCUVVkT0xFdEJRVXNzUTBGQlEwOHNkVUpCUVhWQ0xFbEJRM1pFUXl4blFrRkJaMElzUjBGQlIwWXNiMEpCUVc5Q0xFVkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdaMEpCUlRkRExFVkJRVVVzUlVGQlJVVXNaMEpCUVdkQ0xFdEJRVXNzU1VGQlNTeEZRVUZGTEVOQlFVTTdiMEpCUXpsQ0xFZEJRVXNzUTBGQlExZ3NUMEZCVHl4SFFVRkhWeXhuUWtGQlowSXNRMEZCUTBNc1ZVRkJWVHR2UWtGRk0wTXNSVUZCUlN4RlFVRkZXaXhQUVVGUExFdEJRVXNzU1VGQlNTeERRVUZEUVN4UFFVRlBMRVZCUVVVc1EwRkJRenQzUWtGRE4wSk5MRmxCUVZrc1IwRkJSMDhzVlVGQldTeFRRVUZEUXl4dlFrRkJiMElzUTBGQlEwZ3NaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dHZRa0ZEY2tVc1EwRkJRenRuUWtGRFNDeERRVUZETzJkQ1FVVkVUaXhOUVVGTkxFZEJRVWxETEZsQlFWa3NTMEZCU3l4SlFVRkpMRUZCUVVNc1EwRkJRenRuUWtGRmFrTXNSVUZCUlN4RlFVRkZSQ3hOUVVGTkxFVkJRVVVzUTBGQlF6dHZRa0ZEV0Vnc1MwRkJTeXhEUVVGRFlTeEpRVUZKTEVOQlFVTlVMRmxCUVZrc1EwRkJReXhEUVVGRE8yOUNRVVY2UWl4RlFVRkZMRVZCUVVWR0xGRkJRVkVzUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0M1FrRkRkRUpETEUxQlFVMHNSMEZCUjBRc1VVRkJVU3hGUVVGRkxFTkJRVU03ZDBKQlJYQkNMRVZCUVVVc1IwRkJSME1zVFVGQlRTeEZRVUZGTEVOQlFVTTdORUpCUTFwSUxFdEJRVXNzUTBGQlEyTXNSMEZCUnl4RlFVRkZMRU5CUVVNN2QwSkJRMlFzUTBGQlF6dHZRa0ZEU0N4RFFVRkRPMmRDUVVOSUxFTkJRVU03WjBKQlJVUXNSVUZCUlN4SFFVRkhXQ3hOUVVGTkxFVkJRVVVzUTBGQlF6dHZRa0ZEV2tZc1MwRkJTeXhEUVVGRFl5eFRRVUZUTEVOQlFVTldMRlZCUVZVc1EwRkJReXhEUVVGRE8yZENRVU01UWl4RFFVRkRPMmRDUVVWRUxFMUJRVTBzUTBGQlEwWXNUVUZCVFR0WlFVTm1MRU5CUVVNN096dFpRVVZFWVN4SFFVRlJMRVZCUVZKQkxFTkJRVkU3YlVKQlFWSkJMRkZCUVZFc1EwRkJVa0VzVVVGQlVTeEhRVUZITEVOQlFVTTdaMEpCUTFZc1IwRkJTeXhEUVVGRGJFSXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRMEVzVDBGQlR5eERRVUZEYlVJc1QwRkJUeXhQUVVGUExFTkJRVTBzVVVGRE0wTkRMRTFCUVUwc1IwRkJTU3hEUVVGRExFbEJRVlVzVFVGQlF5eERRVUZVY0VJc1QwRkJUeXhGUVVGRExFTkJRVU03WjBKQlJUVkNMRTFCUVUwc1EwRkJRMjlDTEUxQlFVMDdXVUZEWml4RFFVRkRPenM3V1VGRlJFTXNSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUjBGQlJ5eERRVUZETzJkQ1FVRkRMRTFCUVUwc2MwSkJjRVJIZEVJc2EwSkJRV3RDTEdGQmIwUmtjMElzUTBGQlN5eFJRVUZZTEVsQlFVc3NZVUZCVDNSQ0xHdENRVUZyUWl4RlFVRkZMRWxCUVVrc1EwRkJRME1zVDBGQlR6dFpRVUZITEVOQlFVTTdPMDA3TzBWQmNFUnVRbk5DTEZOQlFWazdhMEpCUVhaRGRrSXNhMEpCUVd0Q0xFRWlmUT09IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgTmFtZVJ1bGVOYW1lLCBEZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHNlcGFyYXRvcixcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gdGVybWluYXRvcixcbiAgICAgICAgICBuYW1lUnVsZU5hbWUgPSBOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZSA9IERlZmluaXRpb25zUnVsZU5hbWUsXG4gICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGRlZmluaXRpb25zUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZVwiO1xuaW1wb3J0IFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVcIjtcblxuaW1wb3J0IHsgUnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBSdWxlUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBydWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJ1bGVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcnJvckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHdpbGRjYXJkOyAgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShXaWxkY2FyZFBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFcnJvckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2Vycm9yXCI7XG5pbXBvcnQgRXJyb3JEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Vycm9yXCI7XG5cbmltcG9ydCB7IEVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlcnJvckRlZmluaXRpb24gPSBuZXcgRXJyb3JEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IEVycm9yUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlcnJvckRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFcnJvckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZXMoUnVsZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgocnVsZU5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGNoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVJ1bGVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gUnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5vZGUgPSBydWxlTmFtZVJ1bGVSdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgICAgIHJ1bGVOb2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU5vZGVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVOb2Rlcy5tYXAoKHJ1bGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZU5vZGUuZ2VuZXJhdGVSdWxlKFJ1bGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRG9jdW1lbnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbm9uVGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCIpKTtcbnZhciBfcGFydFR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3BhcnRUeXBlc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgQ2hvaWNlT2ZQYXJ0c1BhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsUGFydCkge1xuICAgIF9pbmhlcml0cyhDaG9pY2VPZlBhcnRzUGFydCwgTm9uVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKENob2ljZU9mUGFydHNQYXJ0KTtcbiAgICBmdW5jdGlvbiBDaG9pY2VPZlBhcnRzUGFydChwYXJ0cykge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2hvaWNlT2ZQYXJ0c1BhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIHZhciB0eXBlID0gX3BhcnRUeXBlcy5DaG9pY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhDaG9pY2VPZlBhcnRzUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0UGFydHNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYXJ0cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5zb21lKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHNTdHJpbmcxID0gdGhpcy5wYXJ0cy5yZWR1Y2UoZnVuY3Rpb24ocGFydHNTdHJpbmcsIHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBcIlwiLmNvbmNhdChwYXJ0c1N0cmluZywgXCIgfCBcIikuY29uY2F0KHBhcnRTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICAgICAgICB9LCBudWxsKSwgc3RyaW5nID0gXCIoIFwiLmNvbmNhdChwYXJ0c1N0cmluZzEsIFwiIClcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKENob2ljZU9mUGFydHNQYXJ0LnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykuY2FsbCh0aGlzLCBDaG9pY2VPZlBhcnRzUGFydCwgdGhpcy5wYXJ0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tTm9kZXNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tTm9kZXMobm9kZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXMgPSAoMCwgX2FycmF5KS5hbGxCdXRGaXJzdEFuZExhc3Qobm9kZXMpO1xuICAgICAgICAgICAgICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7IC8vL1xuICAgICAgICAgICAgICAgIHZhciBldmVuTm9kZXMgPSAoMCwgX2FycmF5KS5ldmVuKG5vZGVzKTtcbiAgICAgICAgICAgICAgICBub2RlcyA9IGV2ZW5Ob2RlczsgLy8vXG4gICAgICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGZhbHNlLCBwYXJ0cyA9IG5vZGVzLm1hcChmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgICAgICAgfSksIGNob2ljZU9mUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c1BhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gQ2hvaWNlT2ZQYXJ0c1BhcnQ7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IENob2ljZU9mUGFydHNQYXJ0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5d1lYSjBMMjV2YmxSbGNtMXBibUZzTDJOb2IybGpaVTltVUdGeWRITXVhbk1pWFN3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVhDSjFjMlVnYzNSeWFXTjBYQ0k3WEc1Y2JtbHRjRzl5ZENCT2IyNVVaWEp0YVc1aGJGQmhjblFnWm5KdmJTQmNJaTR1THk0dUwzQmhjblF2Ym05dVZHVnliV2x1WVd4Y0lqdGNibHh1YVcxd2IzSjBJSHNnUTJodmFXTmxUMlpRWVhKMGMxQmhjblJVZVhCbElIMGdabkp2YlNCY0lpNHVMeTR1TDNCaGNuUlVlWEJsYzF3aU8xeHVhVzF3YjNKMElIc2daWFpsYml3Z1lXeHNRblYwUm1seWMzUkJibVJNWVhOMElIMGdabkp2YlNCY0lpNHVMeTR1TDNWMGFXeHBkR2xsY3k5aGNuSmhlVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJEYUc5cFkyVlBabEJoY25SelVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhjblJ6S1NCN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlNBOUlFTm9iMmxqWlU5bVVHRnlkSE5RWVhKMFZIbHdaVHNnTHk4dlhHNWNiaUFnSUNCemRYQmxjaWgwZVhCbEtUdGNiaUFnSUNCY2JpQWdJQ0IwYUdsekxuQmhjblJ6SUQwZ2NHRnlkSE03WEc0Z0lIMWNiaUFnWEc0Z0lHZGxkRkJoY25SektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkJoY25Sek8xeHVJQ0I5WEc1Y2JpQWdjR0Z5YzJVb2JtOWtaWE1zSUhOMFlYUmxMQ0JqWVd4c1ltRmpheWtnZTF4dUlDQWdJR3hsZENCd1lYSnpaV1E3WEc1Y2JpQWdJQ0IwYUdsekxuQmhjblJ6TG5OdmJXVW9LSEJoY25RcElEMCtJSHRjYmlBZ0lDQWdJSEJoY25ObFpDQTlJSEJoY25RdWNHRnljMlVvYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5azdYRzVjYmlBZ0lDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQnlaWFIxY200Z2NHRnljMlZrTzF4dUlDQjlYRzVjYmlBZ1lYTlRkSEpwYm1jb0tTQjdYRzRnSUNBZ1kyOXVjM1FnY0dGeWRITlRkSEpwYm1jZ1BTQjBhR2x6TG5CaGNuUnpMbkpsWkhWalpTZ29jR0Z5ZEhOVGRISnBibWNzSUhCaGNuUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElIQmhjblJUZEhKcGJtY2dQU0J3WVhKMExtRnpVM1J5YVc1bktDazdYRzRnSUNBZ1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NHRnlkSE5UZEhKcGJtY2dQVDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjR0Z5ZEhOVGRISnBibWNnUFNCd1lYSjBVM1J5YVc1bk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjR0Z5ZEhOVGRISnBibWNnUFNCZ0pIdHdZWEowYzFOMGNtbHVaMzBnZkNBa2UzQmhjblJUZEhKcGJtZDlZRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNCY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQndZWEowYzFOMGNtbHVaenRjYmlBZ0lDQWdJQ0FnSUNCOUxDQnVkV3hzS1N4Y2JpQWdJQ0FnSUNBZ0lDQnpkSEpwYm1jZ1BTQmdLQ0FrZTNCaGNuUnpVM1J5YVc1bmZTQXBZRHRjYmlBZ0lDQmNiaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnWTJ4dmJtVW9LU0I3SUhKbGRIVnliaUJ6ZFhCbGNpNWpiRzl1WlNoRGFHOXBZMlZQWmxCaGNuUnpVR0Z5ZEN3Z2RHaHBjeTV3WVhKMGN5azdJSDFjYmx4dUlDQnpkR0YwYVdNZ1puSnZiVTV2WkdWektHNXZaR1Z6S1NCN1hHNGdJQ0FnWTI5dWMzUWdZV3hzUW5WMFJtbHljM1JCYm1STVlYTjBUbTlrWlhNZ1BTQmhiR3hDZFhSR2FYSnpkRUZ1WkV4aGMzUW9ibTlrWlhNcE8xeHVYRzRnSUNBZ2JtOWtaWE1nUFNCaGJHeENkWFJHYVhKemRFRnVaRXhoYzNST2IyUmxjenNnSUM4dkwxeHVJQ0FnSUZ4dUlDQWdJR052Ym5OMElHVjJaVzVPYjJSbGN5QTlJR1YyWlc0b2JtOWtaWE1wTzF4dVhHNGdJQ0FnYm05a1pYTWdQU0JsZG1WdVRtOWtaWE03SUNBdkx5OWNibHh1SUNBZ0lHTnZibk4wSUd4dmIydEJhR1ZoWkNBOUlHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lIQmhjblJ6SUQwZ2JtOWtaWE11YldGd0tDaHViMlJsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3WVhKMElEMGdibTlrWlM1blpXNWxjbUYwWlZCaGNuUW9iRzl2YTBGb1pXRmtLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIQmhjblE3WEc0Z0lDQWdJQ0FnSUNBZ2ZTa3NYRzRnSUNBZ0lDQWdJQ0FnWTJodmFXTmxUMlpRWVhKMGMxQmhjblFnUFNCdVpYY2dRMmh2YVdObFQyWlFZWEowYzFCaGNuUW9jR0Z5ZEhNcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUdOb2IybGpaVTltVUdGeWRITlFZWEowTzF4dUlDQjlYRzU5WEc0aVhTd2libUZ0WlhNaU9sc2lRMmh2YVdObFQyWlFZWEowYzFCaGNuUWlMQ0p3WVhKMGN5SXNJblI1Y0dVaUxDSkRhRzlwWTJWUFpsQmhjblJ6VUdGeWRGUjVjR1VpTENKblpYUlFZWEowY3lJc0luQmhjbk5sSWl3aWJtOWtaWE1pTENKemRHRjBaU0lzSW1OaGJHeGlZV05ySWl3aWNHRnljMlZrSWl3aWMyOXRaU0lzSW5CaGNuUWlMQ0poYzFOMGNtbHVaeUlzSW5CaGNuUnpVM1J5YVc1bklpd2ljbVZrZFdObElpd2ljR0Z5ZEZOMGNtbHVaeUlzSW5OMGNtbHVaeUlzSW1Oc2IyNWxJaXdpWm5KdmJVNXZaR1Z6SWl3aVlXeHNRblYwUm1seWMzUkJibVJNWVhOMFRtOWtaWE1pTENKaGJHeENkWFJHYVhKemRFRnVaRXhoYzNRaUxDSmxkbVZ1VG05a1pYTWlMQ0psZG1WdUlpd2liRzl2YTBGb1pXRmtJaXdpYldGd0lpd2libTlrWlNJc0ltZGxibVZ5WVhSbFVHRnlkQ0lzSW1Ob2IybGpaVTltVUdGeWRITlFZWEowSWl3aVRtOXVWR1Z5YldsdVlXeFFZWEowSWwwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4RFFVRlpMRmRCUVVFc1EwRkJRenM3TzBVN2QwSTdRVUZGWlN4SFFVRjNRaXhEUVVGNFFpeFpRVUYzUWp0QlFVVmtMRWRCUVdsQ0xFTkJRV3BDTEZWQlFXbENPMEZCUTJRc1IwRkJkVUlzUTBGQmRrSXNUVUZCZFVJN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdNRUk3T3pzN096czdPenM3VXpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096czdkME03T3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wbEJSVE5EUVN4cFFrRkJhVUlzYVVKQlFYWkNMRkZCUVZFN2FVUTdPMkZCUVVaQkxHbENRVUZwUWl4RFFVTjRRa01zUzBGQlN6dG5SRHM3VVVGRFppeEhRVUZMTEVOQlFVTkRMRWxCUVVrc1IwRkJSME1zVlVGQmNVSXNkMEpCUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3YTBOQlJXcERSQ3hKUVVGSkxFTkRXR1FzUTBSWFowSTdZMEZGVUVRc1MwRkJTeXhIUVVGSFFTeExRVUZMTEVOQlFVTTdPenM3TzFsQlIzSkNSeXhIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUTBnc1MwRkJTenRaUVVOdVFpeERRVUZET3pzN1dVRkZSRWtzUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUlVGQlJTeERRVUZETzJkQ1FVTTNRaXhIUVVGSExFTkJRVU5ETEUxQlFVMDdaMEpCUlZZc1NVRkJTU3hEUVVGRFVpeExRVUZMTEVOQlFVTlRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVkJETEVsQlFVa3NSVUZCU3l4RFFVRkRPMjlDUVVONlFrWXNUVUZCVFN4SFFVRkhSU3hKUVVGSkxFTkJRVU5PTEV0QlFVc3NRMEZCUTBNc1MwRkJTeXhGUVVGRlF5eExRVUZMTEVWQlFVVkRMRkZCUVZFc1EwRkJReXhEUVVGRE8yOUNRVVUxUXl4RlFVRkZMRVZCUVVWRExFMUJRVTBzUlVGQlJTeERRVUZETzNkQ1FVTllMRTFCUVUwc1EwRkJReXhKUVVGSk8yOUNRVU5pTEVOQlFVTTdaMEpCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJVZ3NUVUZCVFN4RFFVRkRRU3hOUVVGTk8xbEJRMllzUTBGQlF6czdPMWxCUlVSSExFZEJRVkVzUlVGQlVrRXNRMEZCVVR0dFFrRkJVa0VzVVVGQlVTeERRVUZTUVN4UlFVRlJMRWRCUVVjc1EwRkJRenRuUWtGRFZpeEhRVUZMTEVOQlFVTkRMRmxCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU5hTEV0QlFVc3NRMEZCUTJFc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlVFUXNWMEZCVnl4RlFVRkZSaXhKUVVGSkxFVkJRVXNzUTBGQlF6dHZRa0ZEZEVRc1IwRkJTeXhEUVVGRFNTeFZRVUZWTEVkQlFVZEtMRWxCUVVrc1EwRkJRME1zVVVGQlVUdHZRa0ZGYUVNc1JVRkJSU3hGUVVGRlF5eFhRVUZYTEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN2QwSkJRM3BDUVN4WFFVRlhMRWRCUVVkRkxGVkJRVlVzUTBGQlF6dHZRa0ZETTBJc1EwRkJReXhOUVVGTkxFTkJRVU03ZDBKQlEwNUdMRmRCUVZjc1IwRkJTU3hEUVVGQkxFVkJRVzFDUlN4TlFVRlZMRU5CUVROQ1JpeFhRVUZYTEVWQlFVTXNRMEZCUnl4TlFVRmhMRTFCUVVFc1EwRkJXRVVzVlVGQlZTeERRVUZGTEVOQlFVTTdiMEpCUTJwRUxFTkJRVU03YjBKQlJVUXNUVUZCVFN4RFFVRkRSaXhYUVVGWE8yZENRVU53UWl4RFFVRkRMRVZCUVVVc1NVRkJTU3hIUVVOUVJ5eE5RVUZOTEVkQlFVa3NRMEZCUlN4SlFVRmpMRTFCUVVVc1EwRkJaRWdzV1VGQlZ5eEZRVUZETEVOQlFVVTdaMEpCUld4RExFMUJRVTBzUTBGQlEwY3NUVUZCVFR0WlFVTm1MRU5CUVVNN096dFpRVVZFUXl4SFFVRkxMRVZCUVV4QkxFTkJRVXM3YlVKQlFVeEJMRkZCUVZFc1EwRkJVa0VzUzBGQlN5eEhRVUZITEVOQlFVTTdaMEpCUVVNc1RVRkJUU3h6UWtFMVEwZHFRaXhwUWtGQmFVSXNZVUUwUTJKcFFpeERRVUZMTEZGQlFWZ3NTVUZCU3l4aFFVRlBha0lzYVVKQlFXbENMRVZCUVVVc1NVRkJTU3hEUVVGRFF5eExRVUZMTzFsQlFVY3NRMEZCUXpzN096dFpRVVYyUkdsQ0xFZEJRVk1zUlVGQlZFRXNRMEZCVXp0dFFrRkJhRUlzVVVGQlVTeERRVUZFUVN4VFFVRlRMRU5CUVVOYUxFdEJRVXNzUlVGQlJTeERRVUZETzJkQ1FVTjJRaXhIUVVGTExFTkJRVU5oTEhWQ1FVRjFRaXhQUVVGSFF5eE5RVUZyUWl4eFFrRkJRMlFzUzBGQlN6dG5Ra0ZGZUVSQkxFdEJRVXNzUjBGQlIyRXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlJTeEZRVUZITEVGQlFVZ3NRMEZCUnp0blFrRkZja01zUjBGQlN5eERRVUZEUlN4VFFVRlRMRTlCUVVkRExFMUJRVWtzVDBGQlEyaENMRXRCUVVzN1owSkJSVFZDUVN4TFFVRkxMRWRCUVVkbExGTkJRVk1zUTBGQlF5eERRVUZGTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWMlFpeEhRVUZMTEVOQlFVTkZMRk5CUVZNc1IwRkJSeXhMUVVGTExFVkJRMnBDZEVJc1MwRkJTeXhIUVVGSFN5eExRVUZMTEVOQlFVTnJRaXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZRUXl4SlFVRkpMRVZCUVVzc1EwRkJRenR2UWtGRE0wSXNSMEZCU3l4RFFVRkRaQ3hKUVVGSkxFZEJRVWRqTEVsQlFVa3NRMEZCUTBNc1dVRkJXU3hEUVVGRFNDeFRRVUZUTzI5Q1FVVjRReXhOUVVGTkxFTkJRVU5hTEVsQlFVazdaMEpCUTJJc1EwRkJReXhIUVVORVowSXNhVUpCUVdsQ0xFZEJRVWNzUjBGQlJ5eERRVUZETTBJc2FVSkJRV2xDTEVOQlFVTkRMRXRCUVVzN1owSkJSWEpFTEUxQlFVMHNRMEZCUXpCQ0xHbENRVUZwUWp0WlFVTXhRaXhEUVVGRE96dE5PenRGUVdoRk5FTkRMRmxCUVdVN2EwSkJRWHBETlVJc2FVSkJRV2xDTEVFaWZRPT0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUsIEVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWUgPSBSdWxlUnVsZU5hbWUsXG4gICAgICAgICAgZXJyb3JSdWxlTmFtZSA9IEVycm9yUnVsZU5hbWUsXG4gICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZXJyb3JSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoY2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERvY3VtZW50Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZG9jdW1lbnRcIjtcbmltcG9ydCBEb2N1bWVudERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZG9jdW1lbnRcIjtcblxuaW1wb3J0IHsgRG9jdW1lbnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbiA9IG5ldyBEb2N1bWVudERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRG9jdW1lbnRSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERvY3VtZW50Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlTmFtZSwgbG9va0FoZWFkKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGVybWluYWxOb2RlQ29udGVudDsgLy8vXG4gICAgXG4gICAgcmV0dXJuIHJ1bGVOYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJ1bGVOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvbiAgLy8vXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZU5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoV2lsZGNhcmRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3dpbGRjYXJkXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IFdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB3aWxkY2FyZCxcbiAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24od2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBXaWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBXaWxkY2FyZEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU5EX09GX0xJTkUsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihFbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IGVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUgPSBFbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gZW5kT2ZMaW5lQk5GTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKSB7IHJldHVybiBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oRW5kT2ZMaW5lQk5GTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IGVuZE9mTGluZUJORk5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuID0gc2lnbmlmaWNhbnRUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgZW5kT2ZMaW5lQk5GTm9kZSA9IEVuZE9mTGluZUJORk5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKGVuZE9mTGluZUJORk5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlbmRPZkxpbmVCTkZOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVBhcnQgPSBuZXcgRW5kT2ZMaW5lUGFydCgpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRW5kT2ZMaW5lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVuZE9mTGluZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBFbmRPZkxpbmVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50ID0gRU5EX09GX0xJTkUsXG4gICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbihlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBFbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVuZE9mTGluZUJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSwgIC8vL1xuICAgICAgICAgIHBhcnRzID0gcGFydE5vZGVzLm1hcCgocGFydE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Tm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRGVmaW5pdGlvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25EZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IERlZmluaXRpb25SdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbkRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGV2ZW4gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGV2ZW5DaGlsZE5vZGVzID0gZXZlbihjaGlsZE5vZGVzKSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25Ob2RlcyA9IGV2ZW5DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25Ob2Rlcy5tYXAoKGRlZmluaXRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uc0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG52YXIgX2xvb2tBaGVhZCA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvbG9va0FoZWFkXCIpO1xudmFyIF9wYXJ0VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcGFydFR5cGVzXCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgU2VxdWVuY2VPZlBhcnRzUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oTm9uVGVybWluYWxQYXJ0KSB7XG4gICAgX2luaGVyaXRzKFNlcXVlbmNlT2ZQYXJ0c1BhcnQsIE5vblRlcm1pbmFsUGFydCk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTZXF1ZW5jZU9mUGFydHNQYXJ0KTtcbiAgICBmdW5jdGlvbiBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZXF1ZW5jZU9mUGFydHNQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICB2YXIgdHlwZSA9IF9wYXJ0VHlwZXMuU2VxdWVuY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhTZXF1ZW5jZU9mUGFydHNQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRQYXJ0c1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhcnRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicGFyc2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgICAgICAgICB2YXIgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSwgcGFydHNOb2RlcyA9IFtdLCBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gKDAsIF9sb29rQWhlYWQpLnBhcnNlUGFydHModGhpcy5wYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgX2FycmF5KS5wdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHNTdHJpbmcxID0gdGhpcy5wYXJ0cy5yZWR1Y2UoZnVuY3Rpb24ocGFydHNTdHJpbmcsIHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBcIlwiLmNvbmNhdChwYXJ0c1N0cmluZywgXCIgXCIpLmNvbmNhdChwYXJ0U3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgICAgICAgfSwgbnVsbCksIHN0cmluZyA9IFwiKCBcIi5jb25jYXQocGFydHNTdHJpbmcxLCBcIiApXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihTZXF1ZW5jZU9mUGFydHNQYXJ0LnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykuY2FsbCh0aGlzLCBTZXF1ZW5jZU9mUGFydHNQYXJ0LCB0aGlzLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0sIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21Ob2Rlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgICAgICAgICAgICAgIHZhciBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9ICgwLCBfYXJyYXkpLmFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG4gICAgICAgICAgICAgICAgbm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3ROb2RlczsgLy8vXG4gICAgICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGZhbHNlLCBwYXJ0cyA9IG5vZGVzLm1hcChmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgICAgICAgfSksIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydChwYXJ0cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2VxdWVuY2VPZlBhcnRzUGFydDtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gU2VxdWVuY2VPZlBhcnRzUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDI1dmJsUmxjbTFwYm1Gc0wzTmxjWFZsYm1ObFQyWlFZWEowY3k1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1YVcxd2IzSjBJRTV2YmxSbGNtMXBibUZzVUdGeWRDQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRDOXViMjVVWlhKdGFXNWhiRndpTzF4dVhHNXBiWEJ2Y25RZ2V5QndkWE5vSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1YVcxd2IzSjBJSHNnY0dGeWMyVlFZWEowY3lCOUlHWnliMjBnWENJdUxpOHVMaTkxZEdsc2FYUnBaWE12Ykc5dmEwRm9aV0ZrWENJN1hHNXBiWEJ2Y25RZ2V5QmhiR3hDZFhSR2FYSnpkRUZ1WkV4aGMzUWdmU0JtY205dElGd2lMaTR2TGk0dmRYUnBiR2wwYVdWekwyRnljbUY1WENJN1hHNXBiWEJ2Y25RZ2V5QlRaWEYxWlc1alpVOW1VR0Z5ZEhOUVlYSjBWSGx3WlNCOUlHWnliMjBnWENJdUxpOHVMaTl3WVhKMFZIbHdaWE5jSWp0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nVTJWeGRXVnVZMlZQWmxCaGNuUnpVR0Z5ZENCbGVIUmxibVJ6SUU1dmJsUmxjbTFwYm1Gc1VHRnlkQ0I3WEc0Z0lHTnZibk4wY25WamRHOXlLSEJoY25SektTQjdYRzRnSUNBZ1kyOXVjM1FnZEhsd1pTQTlJRk5sY1hWbGJtTmxUMlpRWVhKMGMxQmhjblJVZVhCbE95QXZMeTljYmx4dUlDQWdJSE4xY0dWeUtIUjVjR1VwTzF4dVhHNGdJQ0FnZEdocGN5NXdZWEowY3lBOUlIQmhjblJ6TzF4dUlDQjlYRzVjYmlBZ1oyVjBVR0Z5ZEhNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjR0Z5ZEhNN1hHNGdJSDFjYmx4dUlDQndZWEp6WlNodWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdiR1YwSUhCaGNuTmxaRHRjYmx4dUlDQWdJR052Ym5OMElITmhkbVZrU1c1a1pYZ2dQU0J6ZEdGMFpTNW5aWFJUWVhabFpFbHVaR1Y0S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdjR0Z5ZEhOT2IyUmxjeUE5SUZ0ZExGeHVJQ0FnSUNBZ0lDQWdJR2x1WkdWNElEMGdNRHRjYmx4dUlDQWdJSEJoY25ObFpDQTlJSEJoY25ObFVHRnlkSE1vZEdocGN5NXdZWEowY3l3Z2NHRnlkSE5PYjJSbGN5d2dhVzVrWlhnc0lITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNWNiaUFnSUNCcFppQW9jR0Z5YzJWa0tTQjdYRzRnSUNBZ0lDQndkWE5vS0c1dlpHVnpMQ0J3WVhKMGMwNXZaR1Z6S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lYQmhjbk5sWkNrZ2UxeHVJQ0FnSUNBZ2MzUmhkR1V1WW1GamEzUnlZV05yS0hOaGRtVmtTVzVrWlhncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJ3WVhKelpXUTdYRzRnSUgxY2JseHVJQ0JoYzFOMGNtbHVaeWdwSUh0Y2JpQWdJQ0JqYjI1emRDQndZWEowYzFOMGNtbHVaeUE5SUhSb2FYTXVjR0Z5ZEhNdWNtVmtkV05sS0Nod1lYSjBjMU4wY21sdVp5d2djR0Z5ZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY0dGeWRGTjBjbWx1WnlBOUlIQmhjblF1WVhOVGRISnBibWNvS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIQmhjblJ6VTNSeWFXNW5JRDA5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoY25SelUzUnlhVzVuSUQwZ2NHRnlkRk4wY21sdVp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoY25SelUzUnlhVzVuSUQwZ1lDUjdjR0Z5ZEhOVGRISnBibWQ5SUNSN2NHRnlkRk4wY21sdVozMWdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY0dGeWRITlRkSEpwYm1jN1hHNGdJQ0FnSUNBZ0lDQWdmU3dnYm5Wc2JDa3NYRzRnSUNBZ0lDQWdJQ0FnYzNSeWFXNW5JRDBnWUNnZ0pIdHdZWEowYzFOMGNtbHVaMzBnS1dBN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnWTJ4dmJtVW9LU0I3SUhKbGRIVnliaUJ6ZFhCbGNpNWpiRzl1WlNoVFpYRjFaVzVqWlU5bVVHRnlkSE5RWVhKMExDQjBhR2x6TG5CaGNuUnpLVHNnZlZ4dVhHNGdJSE4wWVhScFl5Qm1jbTl0VG05a1pYTW9ibTlrWlhNcElIdGNiaUFnSUNCamIyNXpkQ0JoYkd4Q2RYUkdhWEp6ZEVGdVpFeGhjM1JPYjJSbGN5QTlJR0ZzYkVKMWRFWnBjbk4wUVc1a1RHRnpkQ2h1YjJSbGN5azdYRzVjYmlBZ0lDQnViMlJsY3lBOUlHRnNiRUoxZEVacGNuTjBRVzVrVEdGemRFNXZaR1Z6T3lBZ0x5OHZYRzVjYmlBZ0lDQmpiMjV6ZENCc2IyOXJRV2hsWVdRZ1BTQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQndZWEowY3lBOUlHNXZaR1Z6TG0xaGNDZ29ibTlrWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY0dGeWRDQTlJRzV2WkdVdVoyVnVaWEpoZEdWUVlYSjBLR3h2YjJ0QmFHVmhaQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQndZWEowTzF4dUlDQWdJQ0FnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdJQ0FnSUhObGNYVmxibU5sVDJaUVlYSjBjMUJoY25RZ1BTQnVaWGNnVTJWeGRXVnVZMlZQWmxCaGNuUnpVR0Z5ZENod1lYSjBjeWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjMlZ4ZFdWdVkyVlBabEJoY25SelVHRnlkRHRjYmlBZ2ZWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYklsTmxjWFZsYm1ObFQyWlFZWEowYzFCaGNuUWlMQ0p3WVhKMGN5SXNJblI1Y0dVaUxDSlRaWEYxWlc1alpVOW1VR0Z5ZEhOUVlYSjBWSGx3WlNJc0ltZGxkRkJoY25Seklpd2ljR0Z5YzJVaUxDSnViMlJsY3lJc0luTjBZWFJsSWl3aVkyRnNiR0poWTJzaUxDSndZWEp6WldRaUxDSnpZWFpsWkVsdVpHVjRJaXdpWjJWMFUyRjJaV1JKYm1SbGVDSXNJbkJoY25SelRtOWtaWE1pTENKcGJtUmxlQ0lzSW5CaGNuTmxVR0Z5ZEhNaUxDSndkWE5vSWl3aVltRmphM1J5WVdOcklpd2lZWE5UZEhKcGJtY2lMQ0p3WVhKMGMxTjBjbWx1WnlJc0luSmxaSFZqWlNJc0luQmhjblFpTENKd1lYSjBVM1J5YVc1bklpd2ljM1J5YVc1bklpd2lZMnh2Ym1VaUxDSm1jbTl0VG05a1pYTWlMQ0poYkd4Q2RYUkdhWEp6ZEVGdVpFeGhjM1JPYjJSbGN5SXNJbUZzYkVKMWRFWnBjbk4wUVc1a1RHRnpkQ0lzSW14dmIydEJhR1ZoWkNJc0ltMWhjQ0lzSW01dlpHVWlMQ0puWlc1bGNtRjBaVkJoY25RaUxDSnpaWEYxWlc1alpVOW1VR0Z5ZEhOUVlYSjBJaXdpVG05dVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZaU3hIUVVGM1FpeERRVUY0UWl4WlFVRjNRanRCUVVVdlFpeEhRVUYxUWl4RFFVRjJRaXhOUVVGMVFqdEJRVU5xUWl4SFFVRXlRaXhEUVVFelFpeFZRVUV5UWp0QlFVVmtMRWRCUVdsQ0xFTkJRV3BDTEZWQlFXbENPenM3T3pzN096czdPenM3T3pzN09FUTdjME03TmtRN2FVVTdPenM3ZDBVN1owVTdPenM3T3pCQ096czdPenM3T3pzN08xTTdPenM3T3pzN1N6czdPenM3T3pzN096czdPenROTzNsRU96czdPenM3T3pzN096czdPenM3ZFVJN08wczdPenM3TzNkRE96czdPenM3TWtJN096czdPenM3TzNGR096czdPenM3T3pzN096czdiVVU3TzJsRU96czdPenRKUVVWd1EwRXNiVUpCUVcxQ0xHbENRVUY2UWl4UlFVRlJPMjFFT3p0aFFVRkdRU3h0UWtGQmJVSXNRMEZETVVKRExFdEJRVXM3YTBRN08xRkJRMllzUjBGQlN5eERRVUZEUXl4SlFVRkpMRWRCUVVkRExGVkJRWFZDTERCQ1FVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8ydERRVVZ1UTBRc1NVRkJTU3hEUTJKa0xFTkVZV2RDTzJOQlJWQkVMRXRCUVVzc1IwRkJSMEVzUzBGQlN5eERRVUZET3pzN096dFpRVWR5UWtjc1IwRkJVU3hGUVVGU1FTeERRVUZSTzIxQ1FVRlNRU3hSUVVGUkxFTkJRVkpCTEZGQlFWRXNSMEZCUnl4RFFVRkRPMmRDUVVOV0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTklMRXRCUVVzN1dVRkRia0lzUTBGQlF6czdPMWxCUlVSSkxFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNTMEZCU3l4RlFVRkZReXhSUVVGUkxFVkJRVVVzUTBGQlF6dG5Ra0ZETjBJc1IwRkJSeXhEUVVGRFF5eE5RVUZOTzJkQ1FVVldMRWRCUVVzc1EwRkJRME1zVlVGQlZTeEhRVUZIU0N4TFFVRkxMRU5CUVVOSkxHRkJRV0VzU1VGRGFFTkRMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGRFprTXNTMEZCU3l4SFFVRkhMRU5CUVVNN1owSkJSV1pLTEUxQlFVMHNUMEZCUjBzc1ZVRkJWU3hoUVVGRExFbEJRVWtzUTBGQlEySXNTMEZCU3l4RlFVRkZWeXhWUVVGVkxFVkJRVVZETEV0QlFVc3NSVUZCUlU0c1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0blFrRkZjRVVzUlVGQlJTeEZRVUZGUXl4TlFVRk5MRVZCUVVVc1EwRkJRenQzUWtGRFdFMHNUVUZCU1N4UFFVRkRWQ3hMUVVGTExFVkJRVVZOTEZWQlFWVXNRMEZCUXl4RFFVRkRPMmRDUVVNeFFpeERRVUZETzJkQ1FVVkVMRVZCUVVVc1IwRkJSMGdzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFwR0xFdEJRVXNzUTBGQlExTXNVMEZCVXl4RFFVRkRUaXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VJc1EwRkJRenRuUWtGRlJDeE5RVUZOTEVOQlFVTkVMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkZFc1IwRkJVU3hGUVVGU1FTeERRVUZSTzIxQ1FVRlNRU3hSUVVGUkxFTkJRVkpCTEZGQlFWRXNSMEZCUnl4RFFVRkRPMmRDUVVOV0xFZEJRVXNzUTBGQlEwTXNXVUZCVnl4SFFVRkhMRWxCUVVrc1EwRkJRMnBDTEV0QlFVc3NRMEZCUTJ0Q0xFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFWQkVMRmRCUVZjc1JVRkJSVVVzU1VGQlNTeEZRVUZMTEVOQlFVTTdiMEpCUTNSRUxFZEJRVXNzUTBGQlEwTXNWVUZCVlN4SFFVRkhSQ3hKUVVGSkxFTkJRVU5JTEZGQlFWRTdiMEpCUldoRExFVkJRVVVzUlVGQlJVTXNWMEZCVnl4TFFVRkxMRWxCUVVrc1JVRkJSU3hEUVVGRE8zZENRVU42UWtFc1YwRkJWeXhIUVVGSFJ5eFZRVUZWTEVOQlFVTTdiMEpCUXpOQ0xFTkJRVU1zVFVGQlRTeERRVUZETzNkQ1FVTk9TQ3hYUVVGWExFZEJRVWtzUTBGQlFTeEZRVUZwUWtjc1RVRkJWU3hEUVVGNlFrZ3NWMEZCVnl4RlFVRkRMRU5CUVVNc1NVRkJZU3hOUVVGQkxFTkJRVmhITEZWQlFWVXNRMEZCUlN4RFFVRkRPMjlDUVVNdlF5eERRVUZETzI5Q1FVVkVMRTFCUVUwc1EwRkJRMGdzVjBGQlZ6dG5Ra0ZEY0VJc1EwRkJReXhGUVVGRkxFbEJRVWtzUjBGRFVFa3NUVUZCVFN4SFFVRkpMRU5CUVVVc1NVRkJZeXhOUVVGRkxFTkJRV1JLTEZsQlFWY3NSVUZCUXl4RFFVRkZPMmRDUVVWc1F5eE5RVUZOTEVOQlFVTkpMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkVNc1IwRkJTeXhGUVVGTVFTeERRVUZMTzIxQ1FVRk1RU3hSUVVGUkxFTkJRVkpCTEV0QlFVc3NSMEZCUnl4RFFVRkRPMmRDUVVGRExFMUJRVTBzYzBKQmJFUkhka0lzYlVKQlFXMUNMR0ZCYTBSbWRVSXNRMEZCU3l4UlFVRllMRWxCUVVzc1lVRkJUM1pDTEcxQ1FVRnRRaXhGUVVGRkxFbEJRVWtzUTBGQlEwTXNTMEZCU3p0WlFVRkhMRU5CUVVNN096czdXVUZGZWtSMVFpeEhRVUZUTEVWQlFWUkJMRU5CUVZNN2JVSkJRV2hDTEZGQlFWRXNRMEZCUkVFc1UwRkJVeXhEUVVGRGJFSXNTMEZCU3l4RlFVRkZMRU5CUVVNN1owSkJRM1pDTEVkQlFVc3NRMEZCUTIxQ0xIVkNRVUYxUWl4UFFVRkhReXhOUVVGclFpeHhRa0ZCUTNCQ0xFdEJRVXM3WjBKQlJYaEVRU3hMUVVGTExFZEJRVWR0UWl4MVFrRkJkVUlzUTBGQlF5eERRVUZGTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWeVF5eEhRVUZMTEVOQlFVTkZMRk5CUVZNc1IwRkJSeXhMUVVGTExFVkJRMnBDTVVJc1MwRkJTeXhIUVVGSFN5eExRVUZMTEVOQlFVTnpRaXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZRUXl4SlFVRkpMRVZCUVVzc1EwRkJRenR2UWtGRE0wSXNSMEZCU3l4RFFVRkRWQ3hKUVVGSkxFZEJRVWRUTEVsQlFVa3NRMEZCUTBNc1dVRkJXU3hEUVVGRFNDeFRRVUZUTzI5Q1FVVjRReXhOUVVGTkxFTkJRVU5RTEVsQlFVazdaMEpCUTJJc1EwRkJReXhIUVVORVZ5eHRRa0ZCYlVJc1IwRkJSeXhIUVVGSExFTkJRVU12UWl4dFFrRkJiVUlzUTBGQlEwTXNTMEZCU3p0blFrRkZla1FzVFVGQlRTeERRVUZET0VJc2JVSkJRVzFDTzFsQlF6VkNMRU5CUVVNN08wMDdPMFZCYkVVNFEwTXNXVUZCWlR0clFrRkJNME5vUXl4dFFrRkJiVUlzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvblJ1bGVOYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50ID0gdmVydGljYWxCYXIsXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlbkRlZmluaXRpb25SdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25zQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBEZWZpbml0aW9uc0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZGVmaW5pdGlvbnNcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbnNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uc0RlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25zRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25zQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBUZXJtaW5hbFBhcnRSdWxlTmFtZSwgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSwgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSwgVGVybWluYWxTeW1ib2xSdWxlTmFtZSwgRW5kT2ZMaW5lUnVsZU5hbWUsIFdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUgPSBXaWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lID0gRW5kT2ZMaW5lUnVsZU5hbWUsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsXG4gICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHdpbGRjYXJkUnVsZU5hbWUpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oZW5kT2ZMaW5lUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ocmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBUZXJtaW5hbFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHZlcnRpY2FsQmFyLCBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50ID0gdmVydGljYWxCYXIsIC8vL1xuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuUGFydFJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IENob2ljZU9mUGFydHNEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IENob2ljZU9mUGFydHNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25vblRlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiKSk7XG52YXIgX3Rlcm1pbmFsU3ltYm9sID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgVGVybWluYWxTeW1ib2xCTkZOb2RlID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBfaW5oZXJpdHMoVGVybWluYWxTeW1ib2xCTkZOb2RlLCBOb25UZXJtaW5hbE5vZGUpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoVGVybWluYWxTeW1ib2xCTkZOb2RlKTtcbiAgICBmdW5jdGlvbiBUZXJtaW5hbFN5bWJvbEJORk5vZGUoKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXJtaW5hbFN5bWJvbEJORk5vZGUpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWd1bGFyRXhwcmVzc2lvblwiLCAvXlwiKCg/OlxcXFwufFteXCJcXFxcXSkqKVwiJC8pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhUZXJtaW5hbFN5bWJvbEJORk5vZGUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdlbmVyYXRlUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgX3Rlcm1pbmFsU3ltYm9sLmRlZmF1bHQoY29udGVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldENvbnRlbnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDb250ZW50KCkge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksIGZpcnN0Q2hpbGROb2RlID0gKDAsIF9hcnJheSkuZmlyc3QoY2hpbGROb2RlcyksIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSwgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksIHNlY29uZE1hdGNoID0gKDAsIF9hcnJheSkuc2Vjb25kKG1hdGNoZXMpLCBjb250ZW50ID0gc2Vjb25kTWF0Y2gucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCBcIlxcXCJcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfbm9uVGVybWluYWwuZGVmYXVsdC5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFRlcm1pbmFsU3ltYm9sQk5GTm9kZTtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5dWIyUmxMMkp1Wmk5MFpYSnRhVzVoYkZONWJXSnZiQzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElFNXZibFJsY20xcGJtRnNUbTlrWlNCbWNtOXRJRndpTGk0dkxpNHZibTlrWlM5dWIyNVVaWEp0YVc1aGJGd2lPMXh1YVcxd2IzSjBJRlJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ0JtY205dElGd2lMaTR2TGk0dmNHRnlkQzkwWlhKdGFXNWhiQzkwWlhKdGFXNWhiRk41YldKdmJGd2lPMXh1WEc1cGJYQnZjblFnZXlCbWFYSnpkQ3dnYzJWamIyNWtJSDBnWm5KdmJTQmNJaTR1THk0dUwzVjBhV3hwZEdsbGN5OWhjbkpoZVZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCVVpYSnRhVzVoYkZONWJXSnZiRUpPUms1dlpHVWdaWGgwWlc1a2N5Qk9iMjVVWlhKdGFXNWhiRTV2WkdVZ2UxeHVJQ0J5WldkMWJHRnlSWGh3Y21WemMybHZiaUE5SUM5ZVhDSW9LRDg2WEZ4Y1hDNThXMTVjSWx4Y1hGeGRLU29wWENJa0x6dGNibHh1SUNCblpXNWxjbUYwWlZCaGNuUW9iRzl2YTBGb1pXRmtLU0I3WEc0Z0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZENBOUlIUm9hWE11WjJWMFEyOXVkR1Z1ZENncExGeHVJQ0FnSUNBZ0lDQWdJSFJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ0E5SUc1bGR5QlVaWEp0YVc1aGJGTjViV0p2YkZCaGNuUW9ZMjl1ZEdWdWRDazdYRzVjYmlBZ0lDQnlaWFIxY200Z2RHVnliV2x1WVd4VGVXMWliMnhRWVhKME8xeHVJQ0I5WEc1Y2JpQWdaMlYwUTI5dWRHVnVkQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQmphR2xzWkU1dlpHVnpJRDBnZEdocGN5NW5aWFJEYUdsc1pFNXZaR1Z6S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdabWx5YzNSRGFHbHNaRTV2WkdVZ1BTQm1hWEp6ZENoamFHbHNaRTV2WkdWektTeGNiaUFnSUNBZ0lDQWdJQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQm1hWEp6ZEVOb2FXeGtUbTlrWlN3Z0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pVTnZiblJsYm5RZ1BTQjBaWEp0YVc1aGJFNXZaR1V1WjJWMFEyOXVkR1Z1ZENncExGeHVJQ0FnSUNBZ0lDQWdJRzFoZEdOb1pYTWdQU0IwWlhKdGFXNWhiRTV2WkdWRGIyNTBaVzUwTG0xaGRHTm9LSFJvYVhNdWNtVm5kV3hoY2tWNGNISmxjM05wYjI0cExGeHVJQ0FnSUNBZ0lDQWdJSE5sWTI5dVpFMWhkR05vSUQwZ2MyVmpiMjVrS0cxaGRHTm9aWE1wTEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiblJsYm5RZ1BTQnpaV052Ym1STllYUmphQzV5WlhCc1lXTmxLQzljWEZ4Y1hGeGNYQzluTENCY0lseGNYRnhjSWlrdWNtVndiR0ZqWlNndlhGeGNYRndpTDJjc0lGd2lYRnhjSWx3aUtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCamIyNTBaVzUwTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1vY25Wc1pVNWhiV1VzSUdOb2FXeGtUbTlrWlhNcElIc2djbVYwZFhKdUlFNXZibFJsY20xcGJtRnNUbTlrWlM1bWNtOXRVblZzWlU1aGJXVkJibVJEYUdsc1pFNXZaR1Z6S0ZSbGNtMXBibUZzVTNsdFltOXNRazVHVG05a1pTd2djblZzWlU1aGJXVXNJR05vYVd4a1RtOWtaWE1wT3lCOVhHNTlYRzVjYmlKZExDSnVZVzFsY3lJNld5SlVaWEp0YVc1aGJGTjViV0p2YkVKT1JrNXZaR1VpTENKeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmlJc0ltZGxibVZ5WVhSbFVHRnlkQ0lzSW14dmIydEJhR1ZoWkNJc0ltTnZiblJsYm5RaUxDSm5aWFJEYjI1MFpXNTBJaXdpZEdWeWJXbHVZV3hUZVcxaWIyeFFZWEowSWl3aVZHVnliV2x1WVd4VGVXMWliMnhRWVhKMElpd2lZMmhwYkdST2IyUmxjeUlzSW1kbGRFTm9hV3hrVG05a1pYTWlMQ0ptYVhKemRFTm9hV3hrVG05a1pTSXNJbVpwY25OMElpd2lkR1Z5YldsdVlXeE9iMlJsSWl3aWRHVnliV2x1WVd4T2IyUmxRMjl1ZEdWdWRDSXNJbTFoZEdOb1pYTWlMQ0p0WVhSamFDSXNJbk5sWTI5dVpFMWhkR05vSWl3aWMyVmpiMjVrSWl3aWNtVndiR0ZqWlNJc0ltWnliMjFTZFd4bFRtRnRaVUZ1WkVOb2FXeGtUbTlrWlhNaUxDSnlkV3hsVG1GdFpTSXNJazV2YmxSbGNtMXBibUZzVG05a1pTSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDTzBGQlJXVXNSMEZCZDBJc1EwRkJlRUlzV1VGQmQwSTdRVUZEY2tJc1IwRkJiME1zUTBGQmNFTXNaVUZCYjBNN1FVRkZja01zUjBGQmRVSXNRMEZCZGtJc1RVRkJkVUk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN096czdPenRWT3p0M1FqczdPenM3T3p0TE96czdPenM3T3pzN096czdPMDA3ZVVRN096czdPenM3T3pzN096czdPenQxUWpzN1N6czdPenN5UWpzN096czdPenM3Y1VZN096czdPenM3T3pzN096dHRSVHM3YVVRN096czdPMGxCUldoRFFTeHhRa0ZCY1VJc2FVSkJRVE5DTEZGQlFWRTdjVVE3TzJGQlFVWkJMSEZDUVVGeFFqdHZSRHM3TmtNN2RVUkJRM2hEUXl4RFFVRnBRaXcwUTBOU2JrSXNRMFJST0VNN096czdPMWxCUlRWRFF5eEhRVUZaTEVWQlFWcEJMRU5CUVZrN2JVSkJRVnBCTEZGQlFWRXNRMEZCVWtFc1dVRkJXU3hEUVVGRFF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzUjBGQlN5eERRVUZEUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRFF5eFZRVUZWTEVsQlEzcENReXhyUWtGQmEwSXNSMEZCUnl4SFFVRkhMRU5CUVVORExHVkJRV3RDTEZOQlFVTklMRTlCUVU4N1owSkJSWHBFTEUxQlFVMHNRMEZCUTBVc2EwSkJRV3RDTzFsQlF6TkNMRU5CUVVNN096dFpRVVZFUkN4SFFVRlZMRVZCUVZaQkxFTkJRVlU3YlVKQlFWWkJMRkZCUVZFc1EwRkJVa0VzVlVGQlZTeEhRVUZITEVOQlFVTTdaMEpCUTFvc1IwRkJTeXhEUVVGRFJ5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRReXhoUVVGaExFbEJReTlDUXl4alFVRmpMRTlCUVVkRExFMUJRVXNzVVVGQlEwZ3NWVUZCVlN4SFFVTnFRMGtzV1VGQldTeEhRVUZIUml4alFVRmpMRVZCUXpkQ1J5eHRRa0ZCYlVJc1IwRkJSMFFzV1VGQldTeERRVUZEVUN4VlFVRlZMRWxCUXpkRFV5eFBRVUZQTEVkQlFVZEVMRzFDUVVGdFFpeERRVUZEUlN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRFpDeHBRa0ZCYVVJc1IwRkRNVVJsTEZkQlFWY3NUMEZCUjBNc1RVRkJUU3hUUVVGRFNDeFBRVUZQTEVkQlF6VkNWaXhQUVVGUExFZEJRVWRaTEZkQlFWY3NRMEZCUTBVc1QwRkJUeXhWUVVGVkxFTkJRVWtzUzBGQlJVRXNUMEZCVHl4VFFVRlRMRU5CUVVrN1owSkJSWFpGTEUxQlFVMHNRMEZCUTJRc1QwRkJUenRaUVVOb1FpeERRVUZET3pzN08xbEJSVTFsTEVkQlFYbENMRVZCUVhwQ1FTeERRVUY1UWp0dFFrRkJhRU1zVVVGQlVTeERRVUZFUVN4NVFrRkJlVUlzUTBGQlEwTXNVVUZCVVN4RlFVRkZXaXhWUVVGVkxFVkJRVVVzUTBGQlF6dG5Ra0ZCUXl4TlFVRk5MRU5CUVVOaExGbEJRV1VzVTBGQlEwWXNlVUpCUVhsQ0xFTkJRVU51UWl4eFFrRkJjVUlzUlVGQlJXOUNMRkZCUVZFc1JVRkJSVm9zVlVGQlZUdFpRVUZITEVOQlFVTTdPMDA3TzBWQmRFSjRSMkVzV1VGQlpUdHJRa0ZCTjBOeVFpeHhRa0ZCY1VJc1FTSjkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlID0gc3RyaW5nTGl0ZXJhbFR5cGUsICAvLy9cbiAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsU3ltYm9sQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb25UZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCk7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBub2Rlcy5wb3AoKTtcblxuICAgIGxvb2tBaGVhZCA9IHRydWU7XG5cbiAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IFJ1bGVOYW1lUnVsZU5hbWUsIExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9uZU9yTW9yZVBhcnRSdWxlTmFtZVBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgPSBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKE5vV2hpdGVzcGFjZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBub1doaXRlc3BhY2VOb2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gc3RhdGUuaXNOZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4oKTtcblxuICAgIGlmICghbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKSB7XG4gICAgICBub1doaXRlc3BhY2VOb2RlID0gTm9XaGl0ZXNwYWNlTm9kZS5mcm9tTm90aGluZygpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IChub1doaXRlc3BhY2VOb2RlICE9PSBudWxsKVxuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChub1doaXRlc3BhY2VOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IE5PX1dISVRFU1BBQ0U7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoTm9XaGl0ZXNwYWNlUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IE5PX1dISVRFU1BBQ0UsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydFwiO1xuXG5pbXBvcnQgeyBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uID0gbmV3IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9XaGl0ZXNwYWNlUGFydEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGV4Y2xhbWF0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25cIjtcbmltcG9ydCBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2xvb2tBaGVhZE1vZGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb29rQWhlYWRNb2RpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbkJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfdGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCIpKTtcbnZhciBfdGVybWluYWwxID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkge1xuICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIgfHwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgd2hpbGUoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSl7XG4gICAgICAgIG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIFJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oVGVybWluYWxQYXJ0KSB7XG4gICAgX2luaGVyaXRzKFJlZ3VsYXJFeHByZXNzaW9uUGFydCwgVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFJlZ3VsYXJFeHByZXNzaW9uUGFydCk7XG4gICAgZnVuY3Rpb24gUmVndWxhckV4cHJlc3Npb25QYXJ0KHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWd1bGFyRXhwcmVzc2lvblBhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIF90aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFJlZ3VsYXJFeHByZXNzaW9uUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicGFyc2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgICAgICAgICB2YXIgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB2YXIgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSwgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLCBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0TWF0Y2ggPSAoMCwgX2FycmF5KS5maXJzdChtYXRjaGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWxOb2RlID0gX3Rlcm1pbmFsMS5kZWZhdWx0LmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHRlcm1pbmFsTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciByZWd1bGFyRXhwcmVzc2lvblN0cmluZyA9IHRoaXMucmVndWxhckV4cHJlc3Npb24udG9TdHJpbmcoKSwgc3RyaW5nID0gcmVndWxhckV4cHJlc3Npb25TdHJpbmc7IC8vL1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihSZWd1bGFyRXhwcmVzc2lvblBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFJlZ3VsYXJFeHByZXNzaW9uUGFydCwgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gUmVndWxhckV4cHJlc3Npb25QYXJ0O1xufShfdGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBSZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwzUmxjbTFwYm1Gc0wzSmxaM1ZzWVhKRmVIQnlaWE56YVc5dUxtcHpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1cGJYQnZjblFnVkdWeWJXbHVZV3hRWVhKMElHWnliMjBnWENJdUxpOHVMaTl3WVhKMEwzUmxjbTFwYm1Gc1hDSTdYRzVwYlhCdmNuUWdWR1Z5YldsdVlXeE9iMlJsSUdaeWIyMGdYQ0l1TGk4dUxpOXViMlJsTDNSbGNtMXBibUZzWENJN1hHNWNibWx0Y0c5eWRDQjdJR1pwY25OMElIMGdabkp2YlNCY0lpNHVMeTR1TDNWMGFXeHBkR2xsY3k5aGNuSmhlVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJTWldkMWJHRnlSWGh3Y21WemMybHZibEJoY25RZ1pYaDBaVzVrY3lCVVpYSnRhVzVoYkZCaGNuUWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpaHlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpa2dlMXh1SUNBZ0lITjFjR1Z5S0NrN1hHNWNiaUFnSUNCMGFHbHpMbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJRDBnY21WbmRXeGhja1Y0Y0hKbGMzTnBiMjQ3WEc0Z0lIMWNibHh1SUNCd1lYSnpaU2h1YjJSbGN5d2djM1JoZEdVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2JHVjBJSEJoY25ObFpEdGNibHh1SUNBZ0lHeGxkQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQnVkV3hzTzF4dUlDQWdJRnh1SUNBZ0lHTnZibk4wSUhOaGRtVmtTVzVrWlhnZ1BTQnpkR0YwWlM1blpYUlRZWFpsWkVsdVpHVjRLQ2tzWEc1Y2RGeDBJQ0FnSUNBZ2JtVjRkRk5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J6ZEdGMFpTNW5aWFJPWlhoMFUybG5ibWxtYVdOaGJuUlViMnRsYmlncExGeHVYSFJjZEZ4MFhIUmNkSE5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J1WlhoMFUybG5ibWxtYVdOaGJuUlViMnRsYmpzZ0x5OHZYRzVjYmlBZ0lDQnBaaUFvYzJsbmJtbG1hV05oYm5SVWIydGxiaUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdZMjl1ZEdWdWRDQTlJSE5wWjI1cFptbGpZVzUwVkc5clpXNHVaMlYwUTI5dWRHVnVkQ2dwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiV0YwWTJobGN5QTlJR052Ym5SbGJuUXViV0YwWTJnb2RHaHBjeTV5WldkMWJHRnlSWGh3Y21WemMybHZiaWs3WEc1Y2JpQWdJQ0FnSUdsbUlDaHRZWFJqYUdWeklDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHWnBjbk4wVFdGMFkyZ2dQU0JtYVhKemRDaHRZWFJqYUdWektUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1ptbHljM1JOWVhSamFDQTlQVDBnWTI5dWRHVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUmxjbTFwYm1Gc1RtOWtaU0E5SUZSbGNtMXBibUZzVG05a1pTNW1jbTl0VTJsbmJtbG1hV05oYm5SVWIydGxiaWh6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSEJoY25ObFpDQTlJQ2gwWlhKdGFXNWhiRTV2WkdVZ0lUMDlJRzUxYkd3cE8xeHVYRzRnSUNBZ2FXWWdLSEJoY25ObFpDa2dlMXh1SUNBZ0lDQWdibTlrWlhNdWNIVnphQ2gwWlhKdGFXNWhiRTV2WkdVcE8xeHVYRzRnSUNBZ0lDQnBaaUFvWTJGc2JHSmhZMnNnSVQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUNBZ2NHRnljMlZrSUQwZ1kyRnNiR0poWTJzb0tUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb0lYQmhjbk5sWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJRzV2WkdWekxuQnZjQ2dwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRndZWEp6WldRcElIdGNiaUFnSUNBZ0lITjBZWFJsTG1KaFkydDBjbUZqYXloellYWmxaRWx1WkdWNEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnY0dGeWMyVmtPMXh1SUNCOVhHNWNiaUFnWVhOVGRISnBibWNvS1NCN1hHNGdJQ0FnWTI5dWMzUWdjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNVRkSEpwYm1jZ1BTQjBhR2x6TG5KbFozVnNZWEpGZUhCeVpYTnphVzl1TG5SdlUzUnlhVzVuS0Nrc1hHNWNkRngwSUNBZ0lDQWdjM1J5YVc1bklEMGdjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNVRkSEpwYm1jN0lDOHZMMXh1WEc0Z0lDQWdjbVYwZFhKdUlITjBjbWx1Wnp0Y2JpQWdmVnh1WEc0Z0lHTnNiMjVsS0NrZ2V5QnlaWFIxY200Z2MzVndaWEl1WTJ4dmJtVW9VbVZuZFd4aGNrVjRjSEpsYzNOcGIyNVFZWEowTENCMGFHbHpMbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVLVHNnZlZ4dWZWeHVJbDBzSW01aGJXVnpJanBiSWxKbFozVnNZWEpGZUhCeVpYTnphVzl1VUdGeWRDSXNJbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJaXdpY0dGeWMyVWlMQ0p1YjJSbGN5SXNJbk4wWVhSbElpd2lZMkZzYkdKaFkyc2lMQ0p3WVhKelpXUWlMQ0owWlhKdGFXNWhiRTV2WkdVaUxDSnpZWFpsWkVsdVpHVjRJaXdpWjJWMFUyRjJaV1JKYm1SbGVDSXNJbTVsZUhSVGFXZHVhV1pwWTJGdWRGUnZhMlZ1SWl3aVoyVjBUbVY0ZEZOcFoyNXBabWxqWVc1MFZHOXJaVzRpTENKemFXZHVhV1pwWTJGdWRGUnZhMlZ1SWl3aVkyOXVkR1Z1ZENJc0ltZGxkRU52Ym5SbGJuUWlMQ0p0WVhSamFHVnpJaXdpYldGMFkyZ2lMQ0ptYVhKemRFMWhkR05vSWl3aVptbHljM1FpTENKVVpYSnRhVzVoYkU1dlpHVWlMQ0ptY205dFUybG5ibWxtYVdOaGJuUlViMnRsYmlJc0luQjFjMmdpTENKd2IzQWlMQ0ppWVdOcmRISmhZMnNpTENKaGMxTjBjbWx1WnlJc0luSmxaM1ZzWVhKRmVIQnlaWE56YVc5dVUzUnlhVzVuSWl3aWRHOVRkSEpwYm1jaUxDSnpkSEpwYm1jaUxDSmpiRzl1WlNJc0lsUmxjbTFwYm1Gc1VHRnlkQ0pkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ08wRkJSVmtzUjBGQmNVSXNRMEZCY2tJc1UwRkJjVUk3UVVGRGNrSXNSMEZCY1VJc1EwRkJja0lzVlVGQmNVSTdRVUZGZUVJc1IwRkJkVUlzUTBGQmRrSXNUVUZCZFVJN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdNRUk3T3pzN096czdPenM3VXpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096czdkME03T3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wbEJSWGhDUVN4eFFrRkJjVUlzYVVKQlFUTkNMRkZCUVZFN2EwUTdPMkZCUVVaQkxIRkNRVUZ4UWl4RFFVTTFRa01zYVVKQlFXbENPMjlFT3p0cFEwTlNMMElzUTBSVFdUdGpRVVZJUVN4cFFrRkJhVUlzUjBGQlIwRXNhVUpCUVdsQ0xFTkJRVU03T3pzN08xbEJSemREUXl4SFFVRkxMRVZCUVV4QkxFTkJRVXM3YlVKQlFVeEJMRkZCUVZFc1EwRkJVa0VzUzBGQlN5eERRVUZEUXl4TFFVRkxMRVZCUVVWRExFdEJRVXNzUlVGQlJVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1owSkJRemRDTEVkQlFVY3NRMEZCUTBNc1RVRkJUVHRuUWtGRlZpeEhRVUZITEVOQlFVTkRMRmxCUVZrc1IwRkJSeXhKUVVGSk8yZENRVVYyUWl4SFFVRkxMRU5CUVVORExGVkJRVlVzUjBGQlIwb3NTMEZCU3l4RFFVRkRTeXhoUVVGaExFbEJRMnhEUXl4dlFrRkJiMElzUjBGQlIwNHNTMEZCU3l4RFFVRkRUeXgxUWtGQmRVSXNTVUZEZGtSRExHZENRVUZuUWl4SFFVRkhSaXh2UWtGQmIwSXNSVUZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenRuUWtGRk4wTXNSVUZCUlN4RlFVRkZSU3huUWtGQlowSXNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenR2UWtGRE9VSXNSMEZCU3l4RFFVRkRReXhQUVVGUExFZEJRVWRFTEdkQ1FVRm5RaXhEUVVGRFJTeFZRVUZWTEVsQlEzSkRReXhQUVVGUExFZEJRVWRHTEU5QlFVOHNRMEZCUTBjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlEyWXNhVUpCUVdsQ08yOUNRVVZ3UkN4RlFVRkZMRVZCUVVWakxFOUJRVThzUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0M1FrRkRja0lzUjBGQlN5eERRVUZEUlN4VlFVRlZMRTlCUVVkRExFMUJRVXNzVVVGQlEwZ3NUMEZCVHp0M1FrRkZhRU1zUlVGQlJTeEZRVUZGUlN4VlFVRlZMRXRCUVV0S0xFOUJRVThzUlVGQlJTeERRVUZET3pSQ1FVTXpRazRzV1VGQldTeEhRVUZIV1N4VlFVRlpMRk5CUVVORExHOUNRVUZ2UWl4RFFVRkRVaXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPM2RDUVVOeVJTeERRVUZETzI5Q1FVTklMRU5CUVVNN1owSkJRMGdzUTBGQlF6dG5Ra0ZGUkU0c1RVRkJUU3hIUVVGSlF5eFpRVUZaTEV0QlFVc3NTVUZCU1N4QlFVRkRMRU5CUVVNN1owSkJSV3BETEVWQlFVVXNSVUZCUlVRc1RVRkJUU3hGUVVGRkxFTkJRVU03YjBKQlExaElMRXRCUVVzc1EwRkJRMnRDTEVsQlFVa3NRMEZCUTJRc1dVRkJXU3hEUVVGRExFTkJRVU03YjBKQlJYcENMRVZCUVVVc1JVRkJSVVlzVVVGQlVTeExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPM2RDUVVOMFFrTXNUVUZCVFN4SFFVRkhSQ3hSUVVGUkxFVkJRVVVzUTBGQlF6dDNRa0ZGY0VJc1JVRkJSU3hIUVVGSFF5eE5RVUZOTEVWQlFVVXNRMEZCUXpzMFFrRkRXa2dzUzBGQlN5eERRVUZEYlVJc1IwRkJSeXhGUVVGRkxFTkJRVU03ZDBKQlEyUXNRMEZCUXp0dlFrRkRTQ3hEUVVGRE8yZENRVU5JTEVOQlFVTTdaMEpCUlVRc1JVRkJSU3hIUVVGSGFFSXNUVUZCVFN4RlFVRkZMRU5CUVVNN2IwSkJRMXBHTEV0QlFVc3NRMEZCUTIxQ0xGTkJRVk1zUTBGQlEyWXNWVUZCVlN4RFFVRkRMRU5CUVVNN1owSkJRemxDTEVOQlFVTTdaMEpCUlVRc1RVRkJUU3hEUVVGRFJpeE5RVUZOTzFsQlEyWXNRMEZCUXpzN08xbEJSVVJyUWl4SFFVRlJMRVZCUVZKQkxFTkJRVkU3YlVKQlFWSkJMRkZCUVZFc1EwRkJVa0VzVVVGQlVTeEhRVUZITEVOQlFVTTdaMEpCUTFZc1IwRkJTeXhEUVVGRFF5eDFRa0ZCZFVJc1IwRkJSeXhKUVVGSkxFTkJRVU40UWl4cFFrRkJhVUlzUTBGQlEzbENMRkZCUVZFc1NVRkRNMFJETEUxQlFVMHNSMEZCUjBZc2RVSkJRWFZDTEVWQlFVVXNSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJSWHBETEUxQlFVMHNRMEZCUTBVc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4SFFVRkhMRU5CUVVNN1owSkJRVU1zVFVGQlRTeHpRa0Y2UkVjMVFpeHhRa0ZCY1VJc1lVRjVSR3BDTkVJc1EwRkJTeXhSUVVGWUxFbEJRVXNzWVVGQlR6VkNMSEZDUVVGeFFpeEZRVUZGTEVsQlFVa3NRMEZCUTBNc2FVSkJRV2xDTzFsQlFVY3NRMEZCUXpzN1RUczdSVUY2UkRkQ05FSXNVMEZCV1R0clFrRkJNVU0zUWl4eFFrRkJjVUlzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbm9uVGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCIpKTtcbnZhciBfcmVndWxhckV4cHJlc3Npb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCIpKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsTm9kZSkge1xuICAgIF9pbmhlcml0cyhSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIE5vblRlcm1pbmFsTm9kZSk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUpO1xuICAgIGZ1bmN0aW9uIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlZ3VsYXJFeHByZXNzaW9uXCIsIC9eXFwvKCg/OlxcXFwufFteXFwvXSkqKVxcLyQvKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZW5lcmF0ZVBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ3VsYXJFeHByZXNzaW9uID0gdGhpcy5nZXRSZWd1bGFyRXhwcmVzc2lvbigpLCByZWd1bGFyRXhwcmVzc2lvblBhcnQgPSBuZXcgX3JlZ3VsYXJFeHByZXNzaW9uLmRlZmF1bHQocmVndWxhckV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRSZWd1bGFyRXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksIGZpcnN0Q2hpbGROb2RlID0gKDAsIF9hcnJheSkuZmlyc3QoY2hpbGROb2RlcyksIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSwgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksIHNlY29uZE1hdGNoID0gKDAsIF9hcnJheSkuc2Vjb25kKG1hdGNoZXMpLCBwYXR0ZXJuID0gc2Vjb25kTWF0Y2gsIHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2Rlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX25vblRlcm1pbmFsLmRlZmF1bHQuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGU7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXViMlJsTDJKdVppOXlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKY0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dWFXMXdiM0owSUU1dmJsUmxjbTFwYm1Gc1RtOWtaU0JtY205dElGd2lMaTR2TGk0dmJtOWtaUzl1YjI1VVpYSnRhVzVoYkZ3aU8xeHVhVzF3YjNKMElGSmxaM1ZzWVhKRmVIQnlaWE56YVc5dVVHRnlkQ0JtY205dElGd2lMaTR2TGk0dmNHRnlkQzkwWlhKdGFXNWhiQzl5WldkMWJHRnlSWGh3Y21WemMybHZibHdpTzF4dVhHNXBiWEJ2Y25RZ2V5Qm1hWEp6ZEN3Z2MyVmpiMjVrSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlNaV2QxYkdGeVJYaHdjbVZ6YzJsdmJrSk9SazV2WkdVZ1pYaDBaVzVrY3lCT2IyNVVaWEp0YVc1aGJFNXZaR1VnZTF4dUlDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpQTlJQzllWEZ3dktDZy9PbHhjWEZ3dWZGdGVYRnd2WFNrcUtWeGNMeVF2TzF4dVhHNGdJR2RsYm1WeVlYUmxVR0Z5ZENoc2IyOXJRV2hsWVdRcElIdGNiaUFnSUNCamIyNXpkQ0J5WldkMWJHRnlSWGh3Y21WemMybHZiaUE5SUhSb2FYTXVaMlYwVW1WbmRXeGhja1Y0Y0hKbGMzTnBiMjRvS1N4Y2JpQWdJQ0FnSUNBZ0lDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblFnUFNCdVpYY2dVbVZuZFd4aGNrVjRjSEpsYzNOcGIyNVFZWEowS0hKbFozVnNZWEpGZUhCeVpYTnphVzl1S1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5WldkMWJHRnlSWGh3Y21WemMybHZibEJoY25RN1hHNGdJSDFjYmx4dUlDQm5aWFJTWldkMWJHRnlSWGh3Y21WemMybHZiaWdwSUh0Y2JpQWdJQ0JqYjI1emRDQmphR2xzWkU1dlpHVnpJRDBnZEdocGN5NW5aWFJEYUdsc1pFNXZaR1Z6S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdabWx5YzNSRGFHbHNaRTV2WkdVZ1BTQm1hWEp6ZENoamFHbHNaRTV2WkdWektTeGNiaUFnSUNBZ0lDQWdJQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQm1hWEp6ZEVOb2FXeGtUbTlrWlN3Z0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pVTnZiblJsYm5RZ1BTQjBaWEp0YVc1aGJFNXZaR1V1WjJWMFEyOXVkR1Z1ZENncExGeHVJQ0FnSUNBZ0lDQWdJRzFoZEdOb1pYTWdQU0IwWlhKdGFXNWhiRTV2WkdWRGIyNTBaVzUwTG0xaGRHTm9LSFJvYVhNdWNtVm5kV3hoY2tWNGNISmxjM05wYjI0cExGeHVJQ0FnSUNBZ0lDQWdJSE5sWTI5dVpFMWhkR05vSUQwZ2MyVmpiMjVrS0cxaGRHTm9aWE1wTEZ4dUlDQWdJQ0FnSUNBZ0lIQmhkSFJsY200Z1BTQnpaV052Ym1STllYUmphQ3dnTHk4dlhHNGdJQ0FnSUNBZ0lDQWdjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNGdQU0J1WlhjZ1VtVm5SWGh3S0hCaGRIUmxjbTRwT3lBZ0x5OHZYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVm5kV3hoY2tWNGNISmxjM05wYjI0N1hHNGdJSDFjYmx4dUlDQnpkR0YwYVdNZ1puSnZiVkoxYkdWT1lXMWxRVzVrUTJocGJHUk9iMlJsY3loeWRXeGxUbUZ0WlN3Z1kyaHBiR1JPYjJSbGN5a2dleUJ5WlhSMWNtNGdUbTl1VkdWeWJXbHVZV3hPYjJSbExtWnliMjFTZFd4bFRtRnRaVUZ1WkVOb2FXeGtUbTlrWlhNb1VtVm5kV3hoY2tWNGNISmxjM05wYjI1Q1RrWk9iMlJsTENCeWRXeGxUbUZ0WlN3Z1kyaHBiR1JPYjJSbGN5azdJSDFjYm4xY2JseHVJbDBzSW01aGJXVnpJanBiSWxKbFozVnNZWEpGZUhCeVpYTnphVzl1UWs1R1RtOWtaU0lzSW5KbFozVnNZWEpGZUhCeVpYTnphVzl1SWl3aVoyVnVaWEpoZEdWUVlYSjBJaXdpYkc5dmEwRm9aV0ZrSWl3aVoyVjBVbVZuZFd4aGNrVjRjSEpsYzNOcGIyNGlMQ0p5WldkMWJHRnlSWGh3Y21WemMybHZibEJoY25RaUxDSlNaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblFpTENKamFHbHNaRTV2WkdWeklpd2laMlYwUTJocGJHUk9iMlJsY3lJc0ltWnBjbk4wUTJocGJHUk9iMlJsSWl3aVptbHljM1FpTENKMFpYSnRhVzVoYkU1dlpHVWlMQ0owWlhKdGFXNWhiRTV2WkdWRGIyNTBaVzUwSWl3aVoyVjBRMjl1ZEdWdWRDSXNJbTFoZEdOb1pYTWlMQ0p0WVhSamFDSXNJbk5sWTI5dVpFMWhkR05vSWl3aWMyVmpiMjVrSWl3aWNHRjBkR1Z5YmlJc0lsSmxaMFY0Y0NJc0ltWnliMjFTZFd4bFRtRnRaVUZ1WkVOb2FXeGtUbTlrWlhNaUxDSnlkV3hsVG1GdFpTSXNJazV2YmxSbGNtMXBibUZzVG05a1pTSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDTzBGQlJXVXNSMEZCZDBJc1EwRkJlRUlzV1VGQmQwSTdRVUZEYkVJc1IwRkJkVU1zUTBGQmRrTXNhMEpCUVhWRE8wRkJSVE5ETEVkQlFYVkNMRU5CUVhaQ0xFMUJRWFZDT3pzN096czdPenM3T3pzN096czdPRVE3YzBNN05rUTdhVVU3T3pzN2QwVTdaMFU3T3pzN096czdPenM3VlRzN2QwSTdPenM3T3pzN1N6czdPenM3T3pzN096czdPenROTzNsRU96czdPenM3T3pzN096czdPenM3ZFVJN08wczdPenM3TWtJN096czdPenM3TzNGR096czdPenM3T3pzN096czdiVVU3TzJsRU96czdPenRKUVVWb1EwRXNkMEpCUVhkQ0xHbENRVUU1UWl4UlFVRlJPM2RFT3p0aFFVRkdRU3gzUWtGQmQwSTdkVVE3T3paRE8zVkVRVU16UTBNc1EwRkJhVUlzTmtORFVtNUNMRU5FVVN0RE96czdPenRaUVVVM1EwTXNSMEZCV1N4RlFVRmFRU3hEUVVGWk8yMUNRVUZhUVN4UlFVRlJMRU5CUVZKQkxGbEJRVmtzUTBGQlEwTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1owSkJRM1pDTEVkQlFVc3NRMEZCUTBZc2FVSkJRV2xDTEVkQlFVY3NTVUZCU1N4RFFVRkRSeXh2UWtGQmIwSXNTVUZETjBORExIRkNRVUZ4UWl4SFFVRkhMRWRCUVVjc1EwRkJRME1zYTBKQlFYRkNMRk5CUVVOTUxHbENRVUZwUWp0blFrRkZla1VzVFVGQlRTeERRVUZEU1N4eFFrRkJjVUk3V1VGRE9VSXNRMEZCUXpzN08xbEJSVVJFTEVkQlFXOUNMRVZCUVhCQ1FTeERRVUZ2UWp0dFFrRkJjRUpCTEZGQlFWRXNRMEZCVWtFc2IwSkJRVzlDTEVkQlFVY3NRMEZCUXp0blFrRkRkRUlzUjBGQlN5eERRVUZEUnl4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRFF5eGhRVUZoTEVsQlF5OUNReXhqUVVGakxFOUJRVWRETEUxQlFVc3NVVUZCUTBnc1ZVRkJWU3hIUVVOcVEwa3NXVUZCV1N4SFFVRkhSaXhqUVVGakxFVkJRemRDUnl4dFFrRkJiVUlzUjBGQlIwUXNXVUZCV1N4RFFVRkRSU3hWUVVGVkxFbEJRemREUXl4UFFVRlBMRWRCUVVkR0xHMUNRVUZ0UWl4RFFVRkRSeXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZEWkN4cFFrRkJhVUlzUjBGRE1VUmxMRmRCUVZjc1QwRkJSME1zVFVGQlRTeFRRVUZEU0N4UFFVRlBMRWRCUXpWQ1NTeFBRVUZQTEVkQlFVZEdMRmRCUVZjc1JVRkRja0ptTEdsQ1FVRnBRaXhIUVVGSExFZEJRVWNzUTBGQlEydENMRTFCUVUwc1EwRkJRMFFzVDBGQlR5eEhRVUZKTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWdVJDeE5RVUZOTEVOQlFVTnFRaXhwUWtGQmFVSTdXVUZETVVJc1EwRkJRenM3T3p0WlFVVk5iVUlzUjBGQmVVSXNSVUZCZWtKQkxFTkJRWGxDTzIxQ1FVRm9ReXhSUVVGUkxFTkJRVVJCTEhsQ1FVRjVRaXhEUVVGRFF5eFJRVUZSTEVWQlFVVmtMRlZCUVZVc1JVRkJSU3hEUVVGRE8yZENRVUZETEUxQlFVMHNRMEZCUTJVc1dVRkJaU3hUUVVGRFJpeDVRa0ZCZVVJc1EwRkJRM0JDTEhkQ1FVRjNRaXhGUVVGRmNVSXNVVUZCVVN4RlFVRkZaQ3hWUVVGVk8xbEJRVWNzUTBGQlF6czdUVHM3UlVGMlFuaEhaU3haUVVGbE8ydENRVUZvUkhSQ0xIZENRVUYzUWl4QkluMD0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSwgIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHRlcm1pbmFsU3ltYm9sQ29udGVudCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbFN5bWJvbENvbnRlbnQsICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBxdWVzdGlvbk1hcmssIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHBsdXMsIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ob25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gYXN0ZXJpc2ssIC8vL1xuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIikpO1xudmFyIF9zaWduaWZpY2FudFRva2VuVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5IGluIG9iaikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oTm9uVGVybWluYWxOb2RlKSB7XG4gICAgX2luaGVyaXRzKFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSwgTm9uVGVybWluYWxOb2RlKTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSk7XG4gICAgZnVuY3Rpb24gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlKCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlKTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVndWxhckV4cHJlc3Npb25cIiwgL15cXFsoW15cXF1dKyldJC8pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdlbmVyYXRlUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0aGlzLmdldFNpZ25pZmljYW50VG9rZW5UeXBlKCksIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBfc2lnbmlmaWNhbnRUb2tlblR5cGUuZGVmYXVsdChzaWduaWZpY2FudFRva2VuVHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFNpZ25pZmljYW50VG9rZW5UeXBlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSwgZmlyc3RDaGlsZE5vZGUgPSAoMCwgX2FycmF5KS5maXJzdChjaGlsZE5vZGVzKSwgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLCBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSwgc2Vjb25kTWF0Y2ggPSAoMCwgX2FycmF5KS5zZWNvbmQobWF0Y2hlcyksIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2Vjb25kTWF0Y2g7IC8vL1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0sIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ub25UZXJtaW5hbC5kZWZhdWx0LmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXViMlJsTDJKdVppOXphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaUzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElFNXZibFJsY20xcGJtRnNUbTlrWlNCbWNtOXRJRndpTGk0dkxpNHZibTlrWlM5dWIyNVVaWEp0YVc1aGJGd2lPMXh1YVcxd2IzSjBJRk5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsVUdGeWRDQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRDOTBaWEp0YVc1aGJDOXphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVndpTzF4dVhHNXBiWEJ2Y25RZ2V5Qm1hWEp6ZEN3Z2MyVmpiMjVrSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlRhV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVUpPUms1dlpHVWdaWGgwWlc1a2N5Qk9iMjVVWlhKdGFXNWhiRTV2WkdVZ2UxeHVJQ0J5WldkMWJHRnlSWGh3Y21WemMybHZiaUE5SUM5ZVhGeGJLRnRlWEZ4ZFhTc3BYU1F2TzF4dVhHNGdJR2RsYm1WeVlYUmxVR0Z5ZENoc2IyOXJRV2hsWVdRcElIdGNiaUFnSUNCamIyNXpkQ0J6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlNBOUlIUm9hWE11WjJWMFUybG5ibWxtYVdOaGJuUlViMnRsYmxSNWNHVW9LU3hjYmlBZ0lDQWdJQ0FnSUNCemFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWQmhjblFnUFNCdVpYY2dVMmxuYm1sbWFXTmhiblJVYjJ0bGJsUjVjR1ZRWVhKMEtITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVkJoY25RN1hHNGdJSDFjYmx4dUlDQm5aWFJUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlNncElIdGNiaUFnSUNCamIyNXpkQ0JqYUdsc1pFNXZaR1Z6SUQwZ2RHaHBjeTVuWlhSRGFHbHNaRTV2WkdWektDa3NYRzRnSUNBZ0lDQWdJQ0FnWm1seWMzUkRhR2xzWkU1dlpHVWdQU0JtYVhKemRDaGphR2xzWkU1dlpHVnpLU3hjYmlBZ0lDQWdJQ0FnSUNCMFpYSnRhVzVoYkU1dlpHVWdQU0JtYVhKemRFTm9hV3hrVG05a1pTd2dJQzh2TDF4dUlDQWdJQ0FnSUNBZ0lIUmxjbTFwYm1Gc1RtOWtaVU52Ym5SbGJuUWdQU0IwWlhKdGFXNWhiRTV2WkdVdVoyVjBRMjl1ZEdWdWRDZ3BMRnh1SUNBZ0lDQWdJQ0FnSUcxaGRHTm9aWE1nUFNCMFpYSnRhVzVoYkU1dlpHVkRiMjUwWlc1MExtMWhkR05vS0hSb2FYTXVjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNHBMRnh1SUNBZ0lDQWdJQ0FnSUhObFkyOXVaRTFoZEdOb0lEMGdjMlZqYjI1a0tHMWhkR05vWlhNcExGeHVJQ0FnSUNBZ0lDQWdJSE5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsSUQwZ2MyVmpiMjVrVFdGMFkyZzdJQzh2TDF4dVhHNGdJQ0FnY21WMGRYSnVJSE5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1vY25Wc1pVNWhiV1VzSUdOb2FXeGtUbTlrWlhNcElIc2djbVYwZFhKdUlFNXZibFJsY20xcGJtRnNUbTlrWlM1bWNtOXRVblZzWlU1aGJXVkJibVJEYUdsc1pFNXZaR1Z6S0ZOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbFFrNUdUbTlrWlN3Z2NuVnNaVTVoYldVc0lHTm9hV3hrVG05a1pYTXBPeUI5WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVMmxuYm1sbWFXTmhiblJVYjJ0bGJsUjVjR1ZDVGtaT2IyUmxPMXh1WEc1Y2JpSmRMQ0p1WVcxbGN5STZXeUpUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlVKT1JrNXZaR1VpTENKeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmlJc0ltZGxibVZ5WVhSbFVHRnlkQ0lzSW14dmIydEJhR1ZoWkNJc0luTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxJaXdpWjJWMFUybG5ibWxtYVdOaGJuUlViMnRsYmxSNWNHVWlMQ0p6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlZCaGNuUWlMQ0pUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlZCaGNuUWlMQ0pqYUdsc1pFNXZaR1Z6SWl3aVoyVjBRMmhwYkdST2IyUmxjeUlzSW1acGNuTjBRMmhwYkdST2IyUmxJaXdpWm1seWMzUWlMQ0owWlhKdGFXNWhiRTV2WkdVaUxDSjBaWEp0YVc1aGJFNXZaR1ZEYjI1MFpXNTBJaXdpWjJWMFEyOXVkR1Z1ZENJc0ltMWhkR05vWlhNaUxDSnRZWFJqYUNJc0luTmxZMjl1WkUxaGRHTm9JaXdpYzJWamIyNWtJaXdpWm5KdmJWSjFiR1ZPWVcxbFFXNWtRMmhwYkdST2IyUmxjeUlzSW5KMWJHVk9ZVzFsSWl3aVRtOXVWR1Z5YldsdVlXeE9iMlJsSWl3aWJXOWtkV3hsSWl3aVpYaHdiM0owY3lKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPMEZCUldVc1IwRkJkMElzUTBGQmVFSXNXVUZCZDBJN1FVRkRaaXhIUVVFd1F5eERRVUV4UXl4eFFrRkJNRU03UVVGRmFrUXNSMEZCZFVJc1EwRkJka0lzVFVGQmRVSTdPenM3T3pzN096czdPenM3T3pzNFJEdHpRenMyUkR0cFJUczdPenQzUlR0blJUczdPenM3T3pzN096dFZPenQzUWpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wbEJSV2hEUVN3eVFrRkJNa0lzYVVKQlFXcERMRkZCUVZFN01rUTdPMkZCUVVaQkxESkNRVUV5UWpzd1JEczdOa003ZFVSQlF6bERReXhEUVVGcFFpeHZRME5TYmtJc1EwUlJjME03T3pzN08xbEJSWEJEUXl4SFFVRlpMRVZCUVZwQkxFTkJRVms3YlVKQlFWcEJMRkZCUVZFc1EwRkJVa0VzV1VGQldTeERRVUZEUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRuUWtGRGRrSXNSMEZCU3l4RFFVRkRReXh2UWtGQmIwSXNSMEZCUnl4SlFVRkpMRU5CUVVORExIVkNRVUYxUWl4SlFVTnVSRU1zZDBKQlFYZENMRWRCUVVjc1IwRkJSeXhEUVVGRFF5eHhRa0ZCZDBJc1UwRkJRMGdzYjBKQlFXOUNPMmRDUVVWc1JpeE5RVUZOTEVOQlFVTkZMSGRDUVVGM1FqdFpRVU5xUXl4RFFVRkRPenM3V1VGRlJFUXNSMEZCZFVJc1JVRkJka0pCTEVOQlFYVkNPMjFDUVVGMlFrRXNVVUZCVVN4RFFVRlNRU3gxUWtGQmRVSXNSMEZCUnl4RFFVRkRPMmRDUVVONlFpeEhRVUZMTEVOQlFVTkhMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU5ETEdGQlFXRXNTVUZETDBKRExHTkJRV01zVDBGQlIwTXNUVUZCU3l4UlFVRkRTQ3hWUVVGVkxFZEJRMnBEU1N4WlFVRlpMRWRCUVVkR0xHTkJRV01zUlVGRE4wSkhMRzFDUVVGdFFpeEhRVUZIUkN4WlFVRlpMRU5CUVVORkxGVkJRVlVzU1VGRE4wTkRMRTlCUVU4c1IwRkJSMFlzYlVKQlFXMUNMRU5CUVVOSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTm1MR2xDUVVGcFFpeEhRVU14UkdkQ0xGZEJRVmNzVDBGQlIwTXNUVUZCVFN4VFFVRkRTQ3hQUVVGUExFZEJRelZDV0N4dlFrRkJiMElzUjBGQlIyRXNWMEZCVnl4RlFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVUzUXl4TlFVRk5MRU5CUVVOaUxHOUNRVUZ2UWp0WlFVTTNRaXhEUVVGRE96czdPMWxCUlUxbExFZEJRWGxDTEVWQlFYcENRU3hEUVVGNVFqdHRRa0ZCYUVNc1VVRkJVU3hEUVVGRVFTeDVRa0ZCZVVJc1EwRkJRME1zVVVGQlVTeEZRVUZGV2l4VlFVRlZMRVZCUVVVc1EwRkJRenRuUWtGQlF5eE5RVUZOTEVOQlFVTmhMRmxCUVdVc1UwRkJRMFlzZVVKQlFYbENMRU5CUVVOdVFpd3lRa0ZCTWtJc1JVRkJSVzlDTEZGQlFWRXNSVUZCUlZvc1ZVRkJWVHRaUVVGSExFTkJRVU03TzAwN08wVkJkRUo0UjJFc1dVRkJaVHRyUWtGQmJrUnlRaXd5UWtGQk1rSXNRVHRCUVhsQ2FFUnpRaXhOUVVGTkxFTkJRVU5ETEU5QlFVOHNSMEZCUjNaQ0xESkNRVUV5UWl4RFFVRkRJbjA9IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdHlwZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlID0gdHlwZVR5cGUsICAvLy9cbiAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbih0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHt9O1xuXG4gIHJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICBzdGFydFJ1bGUgPSBmaXJzdFJ1bGU7ICAvLy9cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcbmltcG9ydCBOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9uYW1lXCI7XG5pbXBvcnQgUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvcGFydFwiO1xuaW1wb3J0IFJ1bGVSdWxlIGZyb20gXCIuLi9ydWxlL3J1bGVcIjtcbmltcG9ydCBFcnJvclJ1bGUgZnJvbSBcIi4uL3J1bGUvZXJyb3JcIjtcbmltcG9ydCBEb2N1bWVudFJ1bGUgZnJvbSBcIi4uL3J1bGUvZG9jdW1lbnRcIjtcbmltcG9ydCBSdWxlTmFtZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZU5hbWVcIjtcbmltcG9ydCBXaWxkY2FyZFJ1bGUgZnJvbSBcIi4uL3J1bGUvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVSdWxlIGZyb20gXCIuLi9ydWxlL2VuZE9mTGluZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNSdWxlIGZyb20gXCIuLi9ydWxlL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xSdWxlIGZyb20gXCIuLi9ydWxlL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub25UZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNSdWxlIGZyb20gXCIuLi9ydWxlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBMb29rQWhlYWRNb2RpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvbG9va0FoZWFkTW9kaWZpZXJcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZnJvbSBcIi4uL3J1bGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29wdGlvbmFsUXVhbnRpZmllclwiO1xuaW1wb3J0IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZnJvbSBcIi4uL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgc3RhcnRSdWxlRnJvbVJ1bGVzLCBydWxlTWFwRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBTdGF0ZS5mcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHRoaXMucnVsZU1hcCksXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spLFxuICAgICAgICAgIG5vZGUgPSBydWxlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG5cdHJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpIHtcblx0ICBsZXQgcnVsZXM7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZSh0b2tlbnMpO1xuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gbm9kZS5gKTtcbiAgICB9XG5cbiAgICBydWxlcyA9IG5vZGUuZ2VuZXJhdGVSdWxlcyhSdWxlKTtcblxuICAgIGNvbnN0IHJ1bGVzTGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHJ1bGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBydWxlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lUnVsZSA9IG5ldyBOYW1lUnVsZSgpLFxuICAgICAgICAgIHBhcnRSdWxlID0gbmV3IFBhcnRSdWxlKCksXG4gICAgICAgICAgcnVsZVJ1bGUgPSBuZXcgUnVsZVJ1bGUoKSxcbiAgICAgICAgICBlcnJvclJ1bGUgPSBuZXcgRXJyb3JSdWxlKCksXG4gICAgICAgICAgZG9jdW1lbnRSdWxlID0gbmV3IERvY3VtZW50UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IG5ldyBSdWxlTmFtZVJ1bGUoKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGUgPSBuZXcgV2lsZGNhcmRSdWxlKCksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZSA9IG5ldyBFbmRPZkxpbmVSdWxlKCksXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGUgPSBuZXcgUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IG5ldyBEZWZpbml0aW9uUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZSA9IG5ldyBEZWZpbml0aW9uc1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlID0gbmV3IFRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZSA9IG5ldyBDaG9pY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSA9IG5ldyBUZXJtaW5hbFN5bWJvbFJ1bGUoKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0UnVsZSgpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUoKSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUgPSBuZXcgTG9va0FoZWFkTW9kaWZpZXJSdWxlKCksXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IG5ldyBPcHRpb25hbFF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSgpO1xuXG4gICAgbGV0IHJ1bGVzID0gW1xuICAgICAgZG9jdW1lbnRSdWxlLFxuICAgICAgcnVsZVJ1bGUsXG4gICAgICBuYW1lUnVsZSxcbiAgICAgIGRlZmluaXRpb25zUnVsZSxcbiAgICAgIGRlZmluaXRpb25SdWxlLFxuICAgICAgcGFydFJ1bGUsXG4gICAgICBub25UZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgdGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlLFxuICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSxcbiAgICAgIGNob2ljZU9mUGFydHNSdWxlLFxuICAgICAgcnVsZU5hbWVSdWxlLFxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlLFxuICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlLFxuICAgICAgdGVybWluYWxTeW1ib2xSdWxlLFxuICAgICAgZW5kT2ZMaW5lUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIHF1YW50aWZpZXJSdWxlLFxuICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlLFxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSxcbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgZXJyb3JSdWxlXG4gICAgXTtcblxuICAgIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICAgIGJuZlBhcnNlciA9IG5ldyBCTkZQYXJzZXIoc3RhcnRSdWxlLCBydWxlTWFwKTtcbiAgICBcbiAgICByZXR1cm4gYm5mUGFyc2VyO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICBleHByZXNzaW9uICA6Oj0gZXhwcmVzc2lvbl8gb3BlcmF0b3IgZXhwcmVzc2lvbiBleHByZXNzaW9ufipcblxuICAgICAgICAgICAgICAgIHwgZXhwcmVzc2lvbl9cblxuICAgICAgICAgICAgICAgIDtcblxuICBvcGVyYXRvciAgICA6Oj0gXCIrXCJcblxuICAgICAgICAgICAgICAgIHwgXCItXCJcblxuICAgICAgICAgICAgICAgIHwgXCIvXCJcblxuICAgICAgICAgICAgICAgIHwgXCIqXCJcblxuICAgICAgICAgICAgICAgIDtcblxuICB0ZXJtICAgICAgICA6Oj0gL1xcXFxkKy8gO1xuXG4gIGV4cHJlc3Npb25fIDo6PSBcIihcIiBleHByZXNzaW9uIFwiKVwiXG5cbiAgICAgICAgICAgICAgICB8IHRlcm1cblxuICAgICAgICAgICAgICAgIDtcblxuICBleHByZXNzaW9ufiA6Oj0gb3BlcmF0b3IgZXhwcmVzc2lvbiA7XG4gIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IEJORlBhcnNlciBmcm9tIFwiLi4vYm5mL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBzdGFydFJ1bGVGcm9tUnVsZXMsIHJ1bGVNYXBGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmNvbnN0IGJuZkxleGVyID0gQk5GTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGJuZlBhcnNlciA9IEJORlBhcnNlci5mcm9tTm90aGluZygpO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tQk5GKGJuZikge1xuICBjb25zdCB0b2tlbnMgPSBibmZMZXhlci50b2tlbnNGcm9tQk5GKGJuZiksXG4gICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3N0YXRlXCI7XG5cbmltcG9ydCB7IHJ1bGVzRnJvbUJORiwgcGFyc2VyRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IHN0YXRlID0gU3RhdGUuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbCxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBjb25zdCB7IGJuZiB9ID0gQ2xhc3MsXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJORihDbGFzcywgYm5mKSB7XG4gICAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEJhc2ljUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQmFzaWNQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBXaWxkY2FyZFBhcnQsXG4gIEVuZE9mTGluZVBhcnQsXG4gIFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgUmVndWxhckV4cHJlc3Npb25QYXJ0LFxuICBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQsXG4gIFJ1bGVOYW1lUGFydCxcbiAgT3B0aW9uYWxQYXJ0UGFydCxcbiAgWmVyb09yTW9yZVBhcnRzUGFydCxcbiAgT25lT3JNb3JlUGFydHNQYXJ0LFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICBDaG9pY2VPZlBhcnRzUGFydFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZQYXJzZXIgfSBmcm9tIFwiLi9ibmYvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljUGFyc2VyIH0gZnJvbSBcIi4vYmFzaWMvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vblBhcnNlciB9IGZyb20gXCIuL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFt1bmFyeS1vcGVyYXRvcl0/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtwZXJjZW50YWdlXSB8IFtmcmVxdWVuY3ldIHwgW2ZyYWN0aW9uXSB8IFtsZW5ndGhdIHwgW2FuZ2xlXSB8IFtyZW1zXSB8IFtlbXNdIHwgW3RpbWVdIHwgW251bWJlcl0gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZy1saXRlcmFsXStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICB1cmkgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwidXJsXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbc3RyaW5nLWxpdGVyYWxdIFwiKVwiIDtcblxuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl08Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiKVwiIDtcblxuXG5cblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ1NTUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQ1NTUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDU1NQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgbGV0IHN0YXJ0LFxuICAgICAgZGVsZXRlQ291bnQ7XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHN0YXJ0ID0gMDtcbiAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4O1xuXG4gIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIC4uLmVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBhcnJheS5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGNsZWFyLCB0cmltLCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuY29uc3QgeyBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ByZWFkIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSkge1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgIHRoaXMudW5pcXVlID0gdW5pcXVlO1xuICB9XG5cbiAgYWRqdXN0Tm9kZXMobm9kZXMpIHtcbiAgICBpZiAodGhpcy51bmlxdWUpIHtcbiAgICAgIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZXNMZW5ndGggPiAxKSB7XG4gICAgICAgIGNsZWFyKG5vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJpbShub2RlcywgdGhpcy5zdGFydEluZGV4LCB0aGlzLmVuZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikge1xuICAgIGxldCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgZW5kSW5kZXggPSBJbmZpbml0eSxcbiAgICAgICAgdW5pcXVlID0gZmFsc2U7XG5cbiAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gPT09IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSKSB7XG4gICAgICAgIHVuaXF1ZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWdFeHAgPSAvXFxbKFxcZCspPyhcXC5cXC5cXC4pPyhcXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcyk7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGFydEluZGV4ID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW5kSW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3VydGhNYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5kSW5kZXggPSBwYXJzZUludChmb3VydGhNYXRjaCk7XG5cbiAgICAgICAgICBpZiAodGhpcmRNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ByZWFkID0gbmV3IFNwcmVhZChzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKTtcblxuICAgIHJldHVybiBzcHJlYWQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNwcmVhZCBmcm9tIFwiLi9zcHJlYWRcIjtcblxuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgV0lMRENBUkRfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lcywgdHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksICBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgdGhpcy5zdWJRdWVyeSA9IHN1YlF1ZXJ5O1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy50eXBlcywgdHlwZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMucnVsZU5hbWVzLCBydWxlTmFtZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzaW9uLCB0eXBlcykge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBpZiAoc3ViRXhwcmVzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdWJFeHByZXNpb247ICAvLy9cblxuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChcInxcIiksXG4gICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSxcbiAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc3Npb24sIHR5cGVzKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IFwiL1wiKSwgIC8vL1xuICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW10sXG4gICAgICAgICAgcXVlcnkgPSBuZXcgUXVlcnkocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICBcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHsgcmV0dXJuIHNlbGVjdG9ycy5maWx0ZXIoaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSB7XG4gIGxldCBydWxlTmFtZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gIH1cblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbikge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3R5bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vaW5kZXhcIjsgLy8vXG5cbmNvbnN0IHsgZ2VuZXJhdGVTdHlsZSwgcmV0cmlldmVTdHlsZSwgcmVuZGVyU3R5bGVzIH0gPSBzdHlsZXNVdGlsaXRpZXM7XG5cbmNvbnN0IGZpcmFDb2RlRm9udE1peGluID0gYFxuXG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgZm9udC1mYW1pbHk6IFwiRmlyYSBDb2RlXCI7XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7IC8qIEZvcmNlIGxpZ2F0dXJlcyBmb3IgV2Via2l0LCBCbGluaywgR2Vja28gKi9cbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImNhbHRcIiAxOyAgLyogRW5hYmxlIGxpZ2F0dXJlcyBmb3IgSUUgMTArLCBFZGdlICovXG5cbmA7XG5cbmNvbnN0IG1vbm9zcGFjZUZvbnRNaXhpbiA9IGBcblxuICBmb250LXNpemU6IDEuM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICBcbmA7XG5cbmdlbmVyYXRlU3R5bGUoW1tgXG5cbiAgZGlzcGxheTogbm9uZTtcbiAgXG4gIC5hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbmBdXSwgXCJhYmNcIik7XG5cbmNvbnN0IHN1cGVyU3R5bGUgPSByZXRyaWV2ZVN0eWxlKFwiYWJjXCIpO1xuXG5nZW5lcmF0ZVN0eWxlKFtbYFxuXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBhdXRvO1xuICByZXNpemU6IG5vbmU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRhYi1zaXplOiAyO1xuICBib3JkZXItdG9wOiBub25lO1xuICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgY2FyZXQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICBvdmVyZmxvdy13cmFwOiBub3JtYWw7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIDo6c2VsZWN0aW9uIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgXG4gICR7bW9ub3NwYWNlRm9udE1peGlufVxuXG4gIC5maXJhLWNvZGUge1xuXG4gICAgJHtmaXJhQ29kZUZvbnRNaXhpbn1cbiAgICBcbiAgfVxuICBcbmBdXSwgXCJkZWZcIiwgc3VwZXJTdHlsZSk7XG5cbnJlbmRlclN0eWxlcygpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUFBOzs7Ozs7QUFFQSxRQUFNLFdBQVc7TUFDZjtNQUFLO01BQVE7TUFBVztNQUFTO01BQ2pDO01BQUs7TUFBUTtNQUFPO01BQU87TUFBYztNQUFRO01BQU07TUFDdkQ7TUFBVTtNQUFXO01BQVE7TUFBUTtNQUFPO01BQzVDO01BQVE7TUFBWTtNQUFNO01BQU87TUFBVztNQUFPO01BQVU7TUFBTztNQUFNO01BQU07TUFBTTtNQUFTO01BQVk7TUFBYztNQUFVO01BQVU7TUFDN0k7TUFBTTtNQUFNO01BQU07TUFBTTtN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
21773
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL3NpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ibmYvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9iYXNpYy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2luZGV4LmpzIiwgInNyYy9jc3MvZW50cmllcy5qcyIsICJzcmMvY3NzL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS92ZXJ0aWNhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvaG9yaXpvbnRhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2NoaWxkTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvbG9va0FoZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGVOYW1lcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsL2NvbGxlY3Rpb25PZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2VuZE9mTGluZU5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2xvb2tBaGVhZE1vZGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAic3JjL2Nzcy9ibmYuanMiLCAic3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAic3JjL2NvbnN0YW50cy5qcyIsICJzcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAic3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgInNyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAic3JjL3N0eWxlL3J1bGVTZXQuanMiLCAic3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgInNyYy9zdHlsZS9tZWRpYS5qcyIsICJzcmMvc3R5bGUvbWVkaWFzLmpzIiwgInNyYy9zdHlsZS5qcyIsICJzcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJzcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUUkFDRV9MRVZFTCA9IFwidHJhY2VcIjtcbmV4cG9ydCBjb25zdCBERUJVR19MRVZFTCA9IFwiZGVidWdcIjtcbmV4cG9ydCBjb25zdCBJTkZPX0xFVkVMID0gXCJpbmZvXCI7XG5leHBvcnQgY29uc3QgV0FSTklOR19MRVZFTCA9IFwid2FybmluZ1wiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xFVkVMID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEZBVEFMX0xFVkVMID0gXCJmYXRhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUwsXG4gIEZBVEFMX0xFVkVMXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBERUxFVEVfTUVUSE9ELFxuICBPUFRJT05TX01FVEhPRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFBSQUdNQV9IRUFERVIgPSBcInByYWdtYVwiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9IRUFERVIgPSBcImFjY2VwdFwiO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUiA9IFwibG9jYXRpb25cIjtcbmV4cG9ydCBjb25zdCBVU0VSX0FHRU5UX0hFQURFUiA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSBcImNvbnRlbnQtdHlwZVwiO1xuZXhwb3J0IGNvbnN0IEFVVEhPUklaQVRJT05fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ0FDSEVfQ09OVFJPTF9IRUFERVIgPSBcImNhY2hlLWNvbnRyb2xcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSID0gXCJ0cmFuc2Zlci1lbmNvZGluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSID0gXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIgPSBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19IRUFERVJTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBQUkFHTUFfSEVBREVSLFxuICBBQ0NFUFRfSEVBREVSLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIFVTRVJfQUdFTlRfSEVBREVSLFxuICBDT05URU5UX1RZUEVfSEVBREVSLFxuICBBVVRIT1JJWkFUSU9OX0hFQURFUixcbiAgQ0FDSEVfQ09OVFJPTF9IRUFERVIsXG4gIENPTlRFTlRfTEVOR1RIX0hFQURFUixcbiAgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSLFxuICBDT05URU5UX0RJU1BPU0lUSU9OX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9SRVFVRVNUX01FVEhPRF9IRUFERVJcbn07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU0hJRlRfS0VZX0NPREUgPSAxNjtcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZQ09ERSA9IDI3O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNISUZUX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZQ09ERVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVURjhfRU5DT0RJTkcgPSBcInV0ZjhcIjtcbmV4cG9ydCBjb25zdCBVVEZfOF9FTkNPRElORyA9IFwidXRmLThcIjtcbmV4cG9ydCBjb25zdCBCQVNFNjRfRU5DT0RJTkcgPSBcImJhc2U2NFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVURjhfRU5DT0RJTkcsXG4gIFVURl84X0VOQ09ESU5HLFxuICBCQVNFNjRfRU5DT0RJTkdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFVFhfQ0hBUkFDVEVSID0gXCJcXHUwMDAzXCI7XG5leHBvcnQgY29uc3QgQkFSX0NIQVJBQ1RFUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0hfQ0hBUkFDVEVSID0gXCItXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFVFhfQ0hBUkFDVEVSLFxuICBCQVJfQ0hBUkFDVEVSLFxuICBEQVNIX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUgPSA0Mjk7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERSA9IDUwMDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX0NPREUsXG4gIE9LXzIwMF9TVEFUVVNfQ09ERSxcbiAgRk9VTkRfMzAyX1NUQVRVU19DT0RFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfQ09ERSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfQ09ERSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfQ09ERSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX0NPREUsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19DT0RFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19DT0RFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfTUVTU0FHRSA9IFwiT0tcIjtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX01FU1NBR0UgPSBcIkZvdW5kXCI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX01FU1NBR0UgPSBcIkNyZWF0ZWRcIjtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFID0gXCJTZWUgb3RoZXJcIjtcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFID0gXCJGb3JiaWRkZW5cIjtcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFID0gXCJOb3QgZm91bmRcIjtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm8gY29udGVudFwiO1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIGdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCByZXF1ZXN0XCI7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfTUVTU0FHRSA9IFwiVW5hdXRob3Jpc2VkXCI7XG5leHBvcnQgY29uc3QgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFID0gXCJUb28gbWFueSByZXF1ZXN0c1wiO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0UgPSBcIkludGVybmFsIHNlcnZlciBlcnJvclwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0Vcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENPTE9OX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiB9IGZyb20gXCIuLi9jaGFyYWN0ZXJzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvdmVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSAhPT0gbnVsbCkge1xuICAgIGhlYWRlcnNbZXhpc3RpbmdOYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgPT09IG51bGwpIHtcbiAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcnRGcm9tSG9zdChob3N0KSB7XG4gIGxldCBwb3J0O1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaW5kZXggPSBzZWNvbmRNYXRjaC5pbmRleE9mKENPTE9OX0NIQVJBQ1RFUik7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGNvbnN0IHNlY3VyZSA9IHNlY3VyZUZyb21Ib3N0KGhvc3QpO1xuXG4gICAgcG9ydCA9IHNlY3VyZSA/IDQ0MyA6IDgwOyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdGFydCA9IGluZGV4ICsgMSxcbiAgICAgICAgICBwb3J0U3RyaW5nID0gc2Vjb25kTWF0Y2guc3Vic3RyaW5nKHN0YXJ0KTtcblxuICAgIHBvcnQgPSBOdW1iZXIocG9ydFN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gcG9ydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3VyZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3Qgc2VjdXJlID0gL15odHRwczpcXC9cXC8vLnRlc3QoaG9zdCk7XG5cbiAgcmV0dXJuIHNlY3VyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW146XFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBob3N0bmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gaG9zdG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSkge1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5KSxcbiAgICAgICAgbmFtZXNMZW5ndGggPSBuYW1lcy5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IG5hbWVzTGVuZ3RoIC0gMSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBuYW1lcy5yZWR1Y2UoKHF1ZXJ5U3RyaW5nLCBuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlbbmFtZV0sXG4gICAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSksXG4gICAgICAgICAgICAgICAgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBhbXBlcnNhbmRPck5vdGhpbmcgPSAoaW5kZXggIT09IGxhc3RJbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1QRVJTQU5EX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcbiAgXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfSR7YW1wZXJzYW5kT3JOb3RoaW5nfWA7XG4gIFxuICAgICAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpIHtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHVybCA9IChxdWVyeVN0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX1gIDpcbiAgICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9PyR7cXVlcnlTdHJpbmd9YDtcblxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG92ZXJ3cml0ZSxcbiAgdW5kZXJ3cml0ZSxcbiAgcG9ydEZyb21Ib3N0LFxuICBzZWN1cmVGcm9tSG9zdCxcbiAgaG9zdG5hbWVGcm9tSG9zdCxcbiAgcXVlcnlTdHJpbmdGcm9tUXVlcnksXG4gIHVybEZyb21Ib3N0VVJJQW5kUXVlcnlcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEdFVF9NRVRIT0QsIFBPU1RfTUVUSE9EIH0gZnJvbSBcIi4uL21ldGhvZHNcIjtcbmltcG9ydCB7IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnRlbnRUeXBlc1wiO1xuaW1wb3J0IHsgQUNDRVBUX0hFQURFUiwgQ09OVEVOVF9UWVBFX0hFQURFUiB9IGZyb20gXCIuLi9oZWFkZXJzXCI7XG5pbXBvcnQgeyB1bmRlcndyaXRlLCB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9odHRwXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IEdFVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50ID0gbnVsbDtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3QoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGNvbnRlbnQ7XG4gICAgY29udGVudCA9IGhlYWRlcnM7XG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gUE9TVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50VHlwZSA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFR5cGUpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgdXJsID0gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSxcbiAgICAgICAgYWNjZXB0ID0gaGVhZGVyc1tBQ0NFUFRfSEVBREVSXSB8fCBudWxsLFxuICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVF9IRUFERVIsIGFjY2VwdCk7XG4gIH1cblxuICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKENPTlRFTlRfVFlQRV9IRUFERVIsIGNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIChjb250ZW50ICE9PSBudWxsKSA/XG4gICAgeG1sSHR0cFJlcXVlc3Quc2VuZChjb250ZW50KSA6XG4gICAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0LFxuICBwb3N0LFxuICByZXF1ZXN0XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KSB7XG4gIGNvbnN0IG5hbWUgPSBBQ0NFUFRfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEVfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gY29udGVudFRZcGU7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV2ZWxzIH0gZnJvbSBcIi4vbGV2ZWxzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZHMgfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhlYWRlcnMgfSBmcm9tIFwiLi9oZWFkZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleUNvZGVzIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5jb2RpbmdzIH0gZnJvbSBcIi4vZW5jb2RpbmdzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYXJhY3RlcnMgfSBmcm9tIFwiLi9jaGFyYWN0ZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c0NvZGVzIH0gZnJvbSBcIi4vc3RhdHVzQ29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29udGVudFR5cGVzIH0gZnJvbSBcIi4vY29udGVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c01lc3NhZ2VzIH0gZnJvbSBcIi4vc3RhdHVzTWVzc2FnZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBhamF4VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FqYXhcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXRoVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHR0cFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9odHRwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5jb25zdCB7IExFU1NfVEhBTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIsIEdSRUFURVJfVEhBTl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcclxuICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvLCBBTVBFUlNBTkRfQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU5fQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSKTtcclxuXHJcbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZVR5cGUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBuYW1lVHlwZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IGNvbW1lbnRUeXBlID0gXCJjb21tZW50XCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lVHlwZSA9IFwiZW5kLW9mLWxpbmVcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlVHlwZSA9IFwid2hpdGVzcGFjZVwiO1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxUeXBlID0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZUNvbW1lbnRUeXBlID0gYCR7ZW5kT2ZMaW5lVHlwZX0gJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25UeXBlID0gXCJyZWd1bGFyLWV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYGVuZC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgc3RhcnQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBtaWRkbGUtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZVR5cGUsXG4gIG5hbWVUeXBlLFxuICBjb21tZW50VHlwZSxcbiAgZW5kT2ZMaW5lVHlwZSxcbiAgd2hpdGVzcGFjZVR5cGUsXG4gIHN0cmluZ0xpdGVyYWxUeXBlLFxuICBlbmRPZkxpbmVDb21tZW50VHlwZSxcbiAgc2luZ2xlTGluZUNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbmVjZXNzYXJ5ID0gcmVxdWlyZShcIm5lY2Vzc2FyeVwiKTtcbnZhciBfY29udGVudCA9IHJlcXVpcmUoXCIuL3V0aWxpdGllcy9jb250ZW50XCIpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBmaXJzdCA9IF9uZWNlc3NhcnkuYXJyYXlVdGlsaXRpZXMuZmlyc3Q7XG52YXIgVG9rZW4gPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFRva2VuKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRva2VuKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy5pbm5lckhUTUwgPSBpbm5lckhUTUw7XG4gICAgICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFRva2VuLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRUeXBlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0Q29udGVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbnRlbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldElubmVySFRNTFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldElubmVySFRNTCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRDb250ZW50TGVuZ3RoXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29udGVudExlbmd0aCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc1NpZ25pZmljYW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNTaWduaWZpY2FudCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzQ29tbWVudFRva2VuXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNDb21tZW50VG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKF90eXBlcy5jb21tZW50VHlwZSksIGNvbW1lbnRUb2tlbiA9IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlOyAvLy9cbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNFbmRPZkxpbmVUb2tlblwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW5kT2ZMaW5lVG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGVFbmRPZkxpbmVUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKF90eXBlcy5lbmRPZkxpbmVUeXBlKSwgZW5kT2ZMaW5lVG9rZW4gPSB0eXBlRW5kT2ZMaW5lVHlwZTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNXaGl0ZXNwYWNlVG9rZW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1doaXRlc3BhY2VUb2tlbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZVdoaXRlc3BhY2VUeXBlID0gdGhpcy50eXBlID09PSBfdHlwZXMud2hpdGVzcGFjZVR5cGUsIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdoaXRlc3BhY2VUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzRXF1YWxUb1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRXF1YWxUbyh0b2tlbikge1xuICAgICAgICAgICAgICAgIHZhciBlcXVhbFRvVG9rZW4gPSB0aGlzID09PSB0b2tlbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxUb1Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaCh0b2tlbikge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdG9rZW4uZ2V0VHlwZSgpLCBjb250ZW50ID0gdG9rZW4uZ2V0Q29udGVudCgpLCBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSwgbWF0Y2hlcyA9IHRoaXMudHlwZSA9PT0gdHlwZSAmJiB0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQgJiYgdGhpcy5zaWduaWZpY2FudCA9PT0gc2lnbmlmaWNhbnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc0hUTUxcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc0hUTUwoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMudHlwZSwgaHRtbCA9IFwiPHNwYW4gY2xhc3M9XFxcIlwiLmNvbmNhdChjbGFzc05hbWUsIFwiXFxcIj5cIikuY29uY2F0KHRoaXMuaW5uZXJIVE1MLCBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT09IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IC8vL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IF9jb25zdHJ1Y3QoQ2xhc3MsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRcbiAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ3VsYXJFeHByZXNzaW9uID0gQ2xhc3MucmVndWxhckV4cHJlc3Npb24sIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBtYXRjaGVzLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBDbGFzcy50eXBlLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gX2NvbnN0cnVjdChDbGFzcywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBDbGFzcy50eXBlLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIHRva2VuID0gX2NvbnN0cnVjdChDbGFzcywgW1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudEFuZFR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KSB7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVtYWluaW5nQXJndW1lbnRzID0gbmV3IEFycmF5KF9sZW4gPiA0ID8gX2xlbiAtIDQgOiAwKSwgX2tleSA9IDQ7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdBcmd1bWVudHNbX2tleSAtIDRdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2FuaXRpc2VkQ29udGVudCA9ICgwLCBfY29udGVudCkuc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLCBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCB0b2tlbiA9IF9jb25zdHJ1Y3QoQ2xhc3MsIFtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MLFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFRva2VuO1xufSgpO1xuZXhwb3J0cy5kZWZhdWx0ID0gVG9rZW47XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5MGIydGxiaTVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElIc2dZWEp5WVhsVmRHbHNhWFJwWlhNZ2ZTQm1jbTl0SUZ3aWJtVmpaWE56WVhKNVhDSTdYRzVjYm1sdGNHOXlkQ0I3SUhOaGJtbDBhWE5sUTI5dWRHVnVkQ0I5SUdaeWIyMGdYQ0l1TDNWMGFXeHBkR2xsY3k5amIyNTBaVzUwWENJN1hHNXBiWEJ2Y25RZ2V5QmpiMjF0Wlc1MFZIbHdaU3dnWlc1a1QyWk1hVzVsVkhsd1pTd2dkMmhwZEdWemNHRmpaVlI1Y0dVZ2ZTQm1jbTl0SUZ3aUxpOTBlWEJsYzF3aU8xeHVYRzVqYjI1emRDQjdJR1pwY25OMElIMGdQU0JoY25KaGVWVjBhV3hwZEdsbGN6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1ZHOXJaVzRnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaWgwZVhCbExDQmpiMjUwWlc1MExDQnBibTVsY2toVVRVd3NJSE5wWjI1cFptbGpZVzUwS1NCN1hHNGdJQ0FnZEdocGN5NTBlWEJsSUQwZ2RIbHdaVHRjYmlBZ0lDQjBhR2x6TG1OdmJuUmxiblFnUFNCamIyNTBaVzUwTzF4dUlDQWdJSFJvYVhNdWFXNXVaWEpJVkUxTUlEMGdhVzV1WlhKSVZFMU1PMXh1SUNBZ0lIUm9hWE11YzJsbmJtbG1hV05oYm5RZ1BTQnphV2R1YVdacFkyRnVkRHRjYmlBZ2ZWeHVYRzRnSUdkbGRGUjVjR1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWRIbHdaVHRjYmlBZ2ZWeHVYRzRnSUdkbGRFTnZiblJsYm5Rb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZMjl1ZEdWdWREdGNiaUFnZlZ4dUlDQmNiaUFnWjJWMFNXNXVaWEpJVkUxTUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx1Ym1WeVNGUk5URHRjYmlBZ2ZWeHVYRzRnSUdkbGRFTnZiblJsYm5STVpXNW5kR2dvS1NCN1hHNGdJQ0FnWTI5dWMzUWdZMjl1ZEdWdWRFeGxibWQwYUNBOUlIUm9hWE11WTI5dWRHVnVkQzVzWlc1bmRHZzdYRzVjYmlBZ0lDQnlaWFIxY200Z1kyOXVkR1Z1ZEV4bGJtZDBhRHRjYmlBZ2ZWeHVYRzRnSUdselUybG5ibWxtYVdOaGJuUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YzJsbmJtbG1hV05oYm5RN1hHNGdJSDFjYmlBZ1hHNGdJR2x6UTI5dGJXVnVkRlJ2YTJWdUtDa2dlMXh1SUNBZ0lHTnZibk4wSUhSNWNHVkpibU5zZFdSbGMwTnZiVzFsYm5SVWVYQmxJRDBnZEdocGN5NTBlWEJsTG1sdVkyeDFaR1Z6S0dOdmJXMWxiblJVZVhCbEtTeGNiaUFnSUNBZ0lDQWdJQ0JqYjIxdFpXNTBWRzlyWlc0Z1BTQjBlWEJsU1c1amJIVmtaWE5EYjIxdFpXNTBWSGx3WlRzZ0x5OHZYRzVjYmlBZ0lDQnlaWFIxY200Z1kyOXRiV1Z1ZEZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhORmJtUlBaa3hwYm1WVWIydGxiaWdwSUh0Y2JpQWdJQ0JqYjI1emRDQjBlWEJsUlc1a1QyWk1hVzVsVkhsd1pTQTlJQ2gwYUdsekxuUjVjR1V1YVc1amJIVmtaWE1vWlc1a1QyWk1hVzVsVkhsd1pTa3BMRnh1SUNBZ0lDQWdJQ0FnSUdWdVpFOW1UR2x1WlZSdmEyVnVJRDBnZEhsd1pVVnVaRTltVEdsdVpWUjVjR1U3SUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUdWdVpFOW1UR2x1WlZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhOWGFHbDBaWE53WVdObFZHOXJaVzRvS1NCN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlZkb2FYUmxjM0JoWTJWVWVYQmxJRDBnS0hSb2FYTXVkSGx3WlNBOVBUMGdkMmhwZEdWemNHRmpaVlI1Y0dVcExGeHVJQ0FnSUNBZ0lDQWdJSGRvYVhSbGMzQmhZMlZVYjJ0bGJpQTlJSFI1Y0dWWGFHbDBaWE53WVdObFZIbHdaVHNnTHk4dlhHNWNiaUFnSUNCeVpYUjFjbTRnZDJocGRHVnpjR0ZqWlZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhORmNYVmhiRlJ2S0hSdmEyVnVLU0I3WEc0Z0lDQWdZMjl1YzNRZ1pYRjFZV3hVYjFSdmEyVnVJRDBnS0hSb2FYTWdQVDA5SUhSdmEyVnVLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQmxjWFZoYkZSdlZHOXJaVzQ3WEc0Z0lIMWNibHh1SUNCdFlYUmphQ2gwYjJ0bGJpa2dlMXh1SUNBZ0lHTnZibk4wSUhSNWNHVWdQU0IwYjJ0bGJpNW5aWFJVZVhCbEtDa3NYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHVnVkQ0E5SUhSdmEyVnVMbWRsZEVOdmJuUmxiblFvS1N4Y2JpQWdJQ0FnSUNBZ0lDQnphV2R1YVdacFkyRnVkQ0E5SUhSdmEyVnVMbWx6VTJsbmJtbG1hV05oYm5Rb0tTeGNiaUFnSUNBZ0lDQWdJQ0J0WVhSamFHVnpJRDBnS0NoMGFHbHpMblI1Y0dVZ1BUMDlJSFI1Y0dVcElDWW1JQ2gwYUdsekxtTnZiblJsYm5RZ1BUMDlJR052Ym5SbGJuUXBJQ1ltSUNoMGFHbHpMbk5wWjI1cFptbGpZVzUwSUQwOVBTQnphV2R1YVdacFkyRnVkQ2twTzF4dVhHNGdJQ0FnY21WMGRYSnVJRzFoZEdOb1pYTTdYRzRnSUgxY2JseHVJQ0JoYzBoVVRVd29LU0I3WEc0Z0lDQWdZMjl1YzNRZ1kyeGhjM05PWVcxbElEMGdkR2hwY3k1MGVYQmxMQ0FnTHk4dlhHNGdJQ0FnSUNBZ0lDQWdhSFJ0YkNBOUlHQThjM0JoYmlCamJHRnpjejFjSWlSN1kyeGhjM05PWVcxbGZWd2lQaVI3ZEdocGN5NXBibTVsY2toVVRVeDlQQzl6Y0dGdVBtQTdYRzVjYmlBZ0lDQnlaWFIxY200Z2FIUnRiRHRjYmlBZ2ZWeHVYRzRnSUdOc2IyNWxLRU5zWVhOekxDQnpkR0Z5ZEZCdmMybDBhVzl1TENCbGJtUlFiM05wZEdsdmJpd2djMmxuYm1sbWFXTmhiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHeGxkQ0IwYjJ0bGJpQTlJRzUxYkd3N1hHNWNiaUFnSUNCcFppQW9jM1JoY25SUWIzTnBkR2x2YmlBaFBUMGdaVzVrVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0FnSUd4bGRDQmpiMjUwWlc1MElEMGdkR2hwY3k1blpYUkRiMjUwWlc1MEtDazdYRzVjYmlBZ0lDQWdJR052Ym5SbGJuUWdQU0JqYjI1MFpXNTBMbk4xWW5OMGNtbHVaeWh6ZEdGeWRGQnZjMmwwYVc5dUxDQmxibVJRYjNOcGRHbHZiaWs3SUNBdkx5OWNibHh1SUNBZ0lDQWdZMjl1YzNRZ2RIbHdaU0E5SUhSb2FYTXVaMlYwVkhsd1pTZ3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MyRnVhWFJwYzJWa1EyOXVkR1Z1ZENBOUlITmhibWwwYVhObFEyOXVkR1Z1ZENoamIyNTBaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJR2x1Ym1WeVNGUk5UQ0E5SUhOaGJtbDBhWE5sWkVOdmJuUmxiblE3SUM4dkwxeHVYRzRnSUNBZ0lDQjBiMnRsYmlBOUlHNWxkeUJEYkdGemN5aDBlWEJsTENCamIyNTBaVzUwTENCcGJtNWxja2hVVFV3c0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUIwYjJ0bGJqdGNiaUFnZlZ4dVhHNGdJSE4wWVhScFl5QnRZWFJqYUNoRGJHRnpjeXdnWTI5dWRHVnVkQ3dnYzJsbmJtbG1hV05oYm5Rc0lDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWtnZTF4dUlDQWdJR3hsZENCMGIydGxiaUE5SUc1MWJHdzdYRzVjYmlBZ0lDQmpiMjV6ZENCN0lISmxaM1ZzWVhKRmVIQnlaWE56YVc5dUlIMGdQU0JEYkdGemN5eGNiaUFnSUNBZ0lDQWdJQ0J0WVhSamFHVnpJRDBnWTI5dWRHVnVkQzV0WVhSamFDaHlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpazdYRzVjYmlBZ0lDQnBaaUFvYldGMFkyaGxjeUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdleUJwYm1SbGVDQjlJRDBnYldGMFkyaGxjenRjYmx4dUlDQWdJQ0FnYVdZZ0tHbHVaR1Y0SUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1pwY25OMFRXRjBZMmdnUFNCbWFYSnpkQ2h0WVhSamFHVnpLVHRjYmx4dUlDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1ptbHljM1JOWVhSamFEc2dMeTh2WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTI5dWRHVnVkRXhsYm1kMGFDQTlJR052Ym5SbGJuUXViR1Z1WjNSb08xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNTBaVzUwVEdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIc2dkSGx3WlNCOUlEMGdRMnhoYzNNc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyRnVhWFJwYzJWa1EyOXVkR1Z1ZENBOUlITmhibWwwYVhObFEyOXVkR1Z1ZENoamIyNTBaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJtNWxja2hVVFV3Z1BTQnpZVzVwZEdselpXUkRiMjUwWlc1ME95QXZMeTljYmx4dUlDQWdJQ0FnSUNBZ0lIUnZhMlZ1SUQwZ2JtVjNJRU5zWVhOektIUjVjR1VzSUdOdmJuUmxiblFzSUdsdWJtVnlTRlJOVEN3Z2MybG5ibWxtYVdOaGJuUXNJQzR1TG5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZEc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdabkp2YlVOdmJuUmxiblFvUTJ4aGMzTXNJR052Ym5SbGJuUXNJSE5wWjI1cFptbGpZVzUwTENBdUxpNXlaVzFoYVc1cGJtZEJjbWQxYldWdWRITXBJSHRjYmlBZ0lDQmpiMjV6ZENCN0lIUjVjR1VnZlNBOUlFTnNZWE56TEZ4dUlDQWdJQ0FnSUNBZ0lITmhibWwwYVhObFpFTnZiblJsYm5RZ1BTQnpZVzVwZEdselpVTnZiblJsYm5Rb1kyOXVkR1Z1ZENrc1hHNGdJQ0FnSUNBZ0lDQWdhVzV1WlhKSVZFMU1JRDBnYzJGdWFYUnBjMlZrUTI5dWRHVnVkQ3dnTHk4dlhHNGdJQ0FnSUNBZ0lDQWdkRzlyWlc0Z1BTQnVaWGNnUTJ4aGMzTW9kSGx3WlN3Z1kyOXVkR1Z1ZEN3Z2FXNXVaWEpJVkUxTUxDQnphV2R1YVdacFkyRnVkQ3dnTGk0dWNtVnRZV2x1YVc1blFYSm5kVzFsYm5SektUdGNibHh1SUNBZ0lISmxkSFZ5YmlCMGIydGxianRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJtY205dFEyOXVkR1Z1ZEVGdVpGUjVjR1VvUTJ4aGMzTXNJR052Ym5SbGJuUXNJSFI1Y0dVc0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIdGNiaUFnSUNCamIyNXpkQ0J6WVc1cGRHbHpaV1JEYjI1MFpXNTBJRDBnYzJGdWFYUnBjMlZEYjI1MFpXNTBLR052Ym5SbGJuUXBMRnh1SUNBZ0lDQWdJQ0FnSUdsdWJtVnlTRlJOVENBOUlITmhibWwwYVhObFpFTnZiblJsYm5Rc0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSdmEyVnVJRDBnYm1WM0lFTnNZWE56S0hSNWNHVXNJR052Ym5SbGJuUXNJR2x1Ym1WeVNGUk5UQ3dnYzJsbmJtbG1hV05oYm5Rc0lDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkRzlyWlc0N1hHNGdJSDFjYm4xY2JpSmRMQ0p1WVcxbGN5STZXeUptYVhKemRDSXNJbUZ5Y21GNVZYUnBiR2wwYVdWeklpd2lWRzlyWlc0aUxDSjBlWEJsSWl3aVkyOXVkR1Z1ZENJc0ltbHVibVZ5U0ZSTlRDSXNJbk5wWjI1cFptbGpZVzUwSWl3aVoyVjBWSGx3WlNJc0ltZGxkRU52Ym5SbGJuUWlMQ0puWlhSSmJtNWxja2hVVFV3aUxDSm5aWFJEYjI1MFpXNTBUR1Z1WjNSb0lpd2lZMjl1ZEdWdWRFeGxibWQwYUNJc0lteGxibWQwYUNJc0ltbHpVMmxuYm1sbWFXTmhiblFpTENKcGMwTnZiVzFsYm5SVWIydGxiaUlzSW5SNWNHVkpibU5zZFdSbGMwTnZiVzFsYm5SVWVYQmxJaXdpYVc1amJIVmtaWE1pTENKamIyMXRaVzUwVkhsd1pTSXNJbU52YlcxbGJuUlViMnRsYmlJc0ltbHpSVzVrVDJaTWFXNWxWRzlyWlc0aUxDSjBlWEJsUlc1a1QyWk1hVzVsVkhsd1pTSXNJbVZ1WkU5bVRHbHVaVlI1Y0dVaUxDSmxibVJQWmt4cGJtVlViMnRsYmlJc0ltbHpWMmhwZEdWemNHRmpaVlJ2YTJWdUlpd2lkSGx3WlZkb2FYUmxjM0JoWTJWVWVYQmxJaXdpZDJocGRHVnpjR0ZqWlZSNWNHVWlMQ0ozYUdsMFpYTndZV05sVkc5clpXNGlMQ0pwYzBWeGRXRnNWRzhpTENKMGIydGxiaUlzSW1WeGRXRnNWRzlVYjJ0bGJpSXNJbTFoZEdOb0lpd2liV0YwWTJobGN5SXNJbUZ6U0ZSTlRDSXNJbU5zWVhOelRtRnRaU0lzSW1oMGJXd2lMQ0pqYkc5dVpTSXNJa05zWVhOeklpd2ljM1JoY25SUWIzTnBkR2x2YmlJc0ltVnVaRkJ2YzJsMGFXOXVJaXdpY21WdFlXbHVhVzVuUVhKbmRXMWxiblJ6SWl3aWMzVmljM1J5YVc1bklpd2ljMkZ1YVhScGMyVmtRMjl1ZEdWdWRDSXNJbk5oYm1sMGFYTmxRMjl1ZEdWdWRDSXNJbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJaXdpYVc1a1pYZ2lMQ0ptYVhKemRFMWhkR05vSWl3aVpuSnZiVU52Ym5SbGJuUWlMQ0ptY205dFEyOXVkR1Z1ZEVGdVpGUjVjR1VpWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEVOQlFWa3NWMEZCUVN4RFFVRkRPenM3UlR0M1FqdEJRVVZyUWl4SFFVRlhMRU5CUVZnc1ZVRkJWenRCUVVWV0xFZEJRWEZDTEVOQlFYSkNMRkZCUVhGQ08wRkJRMDBzUjBGQlV5eERRVUZVTEUxQlFWTTdPM2xFTzNWRk96czdPenM3T3pzN096czdPenM3TzJkR096czdPenM3T3p0elF6czdPenM3TzJsRE96czdhVVU3TzFNN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPenM3T3pzN08zVkNPenRMT3pzN096czdPenM3T3l0RU96czdPMEZCUlhCRkxFZEJRVXNzUTBGQlIwRXNTMEZCU3l4SFFVRkxReXhWUVVGakxHZENRVUY0UWtRc1MwRkJTenRKUVVWUlJTeExRVUZMTEdsQ1FVRllMRkZCUVZFN1lVRkJSa0VzUzBGQlN5eERRVU5hUXl4SlFVRkpMRVZCUVVWRExFOUJRVThzUlVGQlJVTXNVMEZCVXl4RlFVRkZReXhYUVVGWE8yOURPMUZCUXk5RExFbEJRVWtzUTBGQlEwZ3NTVUZCU1N4SFFVRkhRU3hKUVVGSkxFTkJRVU03VVVGRGFrSXNTVUZCU1N4RFFVRkRReXhQUVVGUExFZEJRVWRCTEU5QlFVOHNRMEZCUXp0UlFVTjJRaXhKUVVGSkxFTkJRVU5ETEZOQlFWTXNSMEZCUjBFc1UwRkJVeXhEUVVGRE8xRkJRek5DTEVsQlFVa3NRMEZCUTBNc1YwRkJWeXhIUVVGSFFTeFhRVUZYTEVOQlFVTTdPenM3V1VGSGFrTkRMRWRCUVU4c1JVRkJVRUVzUTBGQlR6dHRRa0ZCVUVFc1VVRkJVU3hEUVVGU1FTeFBRVUZQTEVkQlFVY3NRMEZCUXp0blFrRkRWQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZEU2l4SlFVRkpPMWxCUTJ4Q0xFTkJRVU03T3p0WlFVVkVTeXhIUVVGVkxFVkJRVlpCTEVOQlFWVTdiVUpCUVZaQkxGRkJRVkVzUTBGQlVrRXNWVUZCVlN4SFFVRkhMRU5CUVVNN1owSkJRMW9zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUTBvc1QwRkJUenRaUVVOeVFpeERRVUZET3pzN1dVRkZSRXNzUjBGQldTeEZRVUZhUVN4RFFVRlpPMjFDUVVGYVFTeFJRVUZSTEVOQlFWSkJMRmxCUVZrc1IwRkJSeXhEUVVGRE8yZENRVU5rTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOS0xGTkJRVk03V1VGRGRrSXNRMEZCUXpzN08xbEJSVVJMTEVkQlFXZENMRVZCUVdoQ1FTeERRVUZuUWp0dFFrRkJhRUpCTEZGQlFWRXNRMEZCVWtFc1owSkJRV2RDTEVkQlFVY3NRMEZCUXp0blFrRkRiRUlzUjBGQlN5eERRVUZEUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRFVDeFBRVUZQTEVOQlFVTlJMRTFCUVUwN1owSkJSWHBETEUxQlFVMHNRMEZCUTBRc1lVRkJZVHRaUVVOMFFpeERRVUZET3pzN1dVRkZSRVVzUjBGQllTeEZRVUZpUVN4RFFVRmhPMjFDUVVGaVFTeFJRVUZSTEVOQlFWSkJMR0ZCUVdFc1IwRkJSeXhEUVVGRE8yZENRVU5tTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOUUxGZEJRVmM3V1VGRGVrSXNRMEZCUXpzN08xbEJSVVJSTEVkQlFXTXNSVUZCWkVFc1EwRkJZenR0UWtGQlpFRXNVVUZCVVN4RFFVRlNRU3hqUVVGakxFZEJRVWNzUTBGQlF6dG5Ra0ZEYUVJc1IwRkJTeXhEUVVGRFF5eDFRa0ZCZFVJc1IwRkJSeXhKUVVGSkxFTkJRVU5hTEVsQlFVa3NRMEZCUTJFc1VVRkJVU3hEUVVGRFF5eE5RVUZYTEdWQlEzaEVReXhaUVVGWkxFZEJRVWRJTEhWQ1FVRjFRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVnFSQ3hOUVVGTkxFTkJRVU5ITEZsQlFWazdXVUZEY2tJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVdkQ0xFVkJRV2hDUVN4RFFVRm5RanR0UWtGQmFFSkJMRkZCUVZFc1EwRkJVa0VzWjBKQlFXZENMRWRCUVVjc1EwRkJRenRuUWtGRGJFSXNSMEZCU3l4RFFVRkRReXhwUWtGQmFVSXNSMEZCU1N4SlFVRkpMRU5CUVVOcVFpeEpRVUZKTEVOQlFVTmhMRkZCUVZFc1EwRkJRMHNzVFVGQllTeHBRa0ZEY2tSRExHTkJRV01zUjBGQlIwWXNhVUpCUVdsQ0xFVkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdaMEpCUlRkRExFMUJRVTBzUTBGQlEwVXNZMEZCWXp0WlFVTjJRaXhEUVVGRE96czdXVUZGUkVNc1IwRkJhVUlzUlVGQmFrSkJMRU5CUVdsQ08yMUNRVUZxUWtFc1VVRkJVU3hEUVVGU1FTeHBRa0ZCYVVJc1IwRkJSeXhEUVVGRE8yZENRVU51UWl4SFFVRkxMRU5CUVVORExHdENRVUZyUWl4SFFVRkpMRWxCUVVrc1EwRkJRM0pDTEVsQlFVa3NTMEZCUzNOQ0xFMUJRV01zYVVKQlEyeEVReXhsUVVGbExFZEJRVWRHTEd0Q1FVRnJRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVXZReXhOUVVGTkxFTkJRVU5GTEdWQlFXVTdXVUZEZUVJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVZNc1JVRkJWRUVzUTBGQlV6dHRRa0ZCVkVFc1VVRkJVU3hEUVVGU1FTeFRRVUZUTEVOQlFVTkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU5vUWl4SFFVRkxMRU5CUVVORExGbEJRVmtzUjBGQlNTeEpRVUZKTEV0QlFVdEVMRXRCUVVzN1owSkJSWEJETEUxQlFVMHNRMEZCUTBNc1dVRkJXVHRaUVVOeVFpeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRMFlzUzBGQlN5eEZRVUZGTEVOQlFVTTdaMEpCUTFvc1IwRkJTeXhEUVVGRGVrSXNTVUZCU1N4SFFVRkhlVUlzUzBGQlN5eERRVUZEY2tJc1QwRkJUeXhKUVVOd1FrZ3NUMEZCVHl4SFFVRkhkMElzUzBGQlN5eERRVUZEY0VJc1ZVRkJWU3hKUVVNeFFrWXNWMEZCVnl4SFFVRkhjMElzUzBGQlN5eERRVUZEWml4aFFVRmhMRWxCUTJwRGEwSXNUMEZCVHl4SFFVRkxMRWxCUVVrc1EwRkJRelZDTEVsQlFVa3NTMEZCUzBFc1NVRkJTU3hKUVVGTkxFbEJRVWtzUTBGQlEwTXNUMEZCVHl4TFFVRkxRU3hQUVVGUExFbEJRVTBzU1VGQlNTeERRVUZEUlN4WFFVRlhMRXRCUVV0QkxGZEJRVmM3WjBKQlJYaEhMRTFCUVUwc1EwRkJRM2xDTEU5QlFVODdXVUZEYUVJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVUwc1JVRkJUa0VzUTBGQlRUdHRRa0ZCVGtFc1VVRkJVU3hEUVVGU1FTeE5RVUZOTEVkQlFVY3NRMEZCUXp0blFrRkRVaXhIUVVGTExFTkJRVU5ETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNNVFpeEpRVUZKTEVWQlEzSkNLMElzU1VGQlNTeEhRVUZKTEVOQlFXRXNaMEpCUVdkQ0xFMUJRV01zUTBGQk5VSkVMRk5CUVZNc1JVRkJReXhEUVVGRkxFMUJRV2xDTEUxQlFVOHNRMEZCZEVJc1NVRkJTU3hEUVVGRE5VSXNVMEZCVXl4RlFVRkRMRU5CUVU4N1owSkJSV3BGTEUxQlFVMHNRMEZCUXpaQ0xFbEJRVWs3V1VGRFlpeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4aFFVRmhMRVZCUVVWRExGZEJRVmNzUlVGQlJXaERMRmRCUVZjc1JVRkJlVUlzUTBGQlF6dG5Ra0ZCZUVJc1IwRkJSMmxETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnNSamRGTEVORWEwWTJSVHRuUWtGQlJDeERRVUZETzJkQ1FVTjZSU3hIUVVGSExFTkJRVU5ZTEV0QlFVc3NSMEZCUnl4SlFVRkpPMmRDUVVWb1FpeEZRVUZGTEVWQlFVVlRMR0ZCUVdFc1MwRkJTME1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdiMEpCUTJ4RExFZEJRVWNzUTBGQlEyeERMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU5KTEZWQlFWVTdiMEpCUlRkQ1NpeFBRVUZQTEVkQlFVZEJMRTlCUVU4c1EwRkJRMjlETEZOQlFWTXNRMEZCUTBnc1lVRkJZU3hGUVVGRlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yOUNRVVUzUkN4SFFVRkxMRU5CUVVOdVF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRTU3hQUVVGUExFbEJRMjVDYTBNc1owSkJRV2RDTEU5QlFVZERMRkZCUVdVc2EwSkJRVU4wUXl4UFFVRlBMRWRCUXpGRFF5eFRRVUZUTEVkQlFVZHZReXhuUWtGQlowSXNSVUZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRmRrTmlMRXRCUVVzc1kwRkJUMUVzUzBGQlN5eEZRVUZVTEVOQlFVTTdkMEpCUVZOcVF5eEpRVUZKTzNkQ1FVRkZReXhQUVVGUE8zZENRVUZGUXl4VFFVRlRPM2RDUVVGRlF5eFhRVUZYTzI5Q1FVRjFRaXhEUVVGRExFTkJRWFpGTEUxQlFYVkZMRzlDUVVGdVFtbERMR3RDUVVGclFpeEhRVUZETEVOQlFVTTdaMEpCUTJ4R0xFTkJRVU03WjBKQlJVUXNUVUZCVFN4RFFVRkRXQ3hMUVVGTE8xbEJRMlFzUTBGQlF6czdPenRaUVVWTlJTeEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVm9zVVVGQlVTeERRVUZFUVN4TFFVRkxMRU5CUVVOTkxFdEJRVXNzUlVGQlJXaERMRTlCUVU4c1JVRkJSVVVzVjBGQlZ5eEZRVUY1UWl4RFFVRkRPMmRDUVVGNFFpeEhRVUZIYVVNc1EwRkJTQ3hIUVVGeFFpeERRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeFRRVUZ4UWl4RFFVRnlRaXhOUVVGeFFpeEZRVUZzUWtFc2EwSkJRV3RDTEVkQlFYSkNMRWRCUVhGQ0xFOUJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRWEZDTEVkQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRTlCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFVkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFbEJRWEZDTEVWQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFVTTdiMEpCUVVWQkxHdENRVUZyUWl4RFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhKUVVGeVFpeFRRVUZ4UWl4RFFVRnlRaXhKUVVGeFFpeERRM0JIYWtVc1EwUnZSMmxGTzJkQ1FVRkVMRU5CUVVNN1owSkJRemRFTEVkQlFVY3NRMEZCUTFnc1MwRkJTeXhIUVVGSExFbEJRVWs3WjBKQlJXaENMRWRCUVVzc1EwRkJSMlVzYVVKQlFXbENMRWRCUVV0UUxFdEJRVXNzUTBGQk0wSlBMR2xDUVVGcFFpeEZRVU51UWxvc1QwRkJUeXhIUVVGSE0wSXNUMEZCVHl4RFFVRkRNRUlzUzBGQlN5eERRVUZEWVN4cFFrRkJhVUk3WjBKQlJTOURMRVZCUVVVc1JVRkJSVm9zVDBGQlR5eExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPMjlDUVVOeVFpeEhRVUZMTEVOQlFVZGhMRXRCUVVzc1IwRkJTMklzVDBGQlR5eERRVUZxUW1Fc1MwRkJTenR2UWtGRllpeEZRVUZGTEVWQlFVVkJMRXRCUVVzc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF6dDNRa0ZEYUVJc1IwRkJTeXhEUVVGRFF5eFZRVUZWTEVkQlFVYzNReXhMUVVGTExFTkJRVU1yUWl4UFFVRlBPM2RDUVVWb1F6TkNMRTlCUVU4c1IwRkJSM2xETEZWQlFWVXNRMEZCUXl4RFFVRkRMRVZCUVVjc1FVRkJTQ3hEUVVGSE8zZENRVVY2UWl4SFFVRkxMRU5CUVVOc1F5eGhRVUZoTEVkQlFVZFFMRTlCUVU4c1EwRkJRMUVzVFVGQlRUdDNRa0ZGY0VNc1JVRkJSU3hGUVVGRlJDeGhRVUZoTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNN05FSkJRM1JDTEVkQlFVc3NRMEZCUjFJc1NVRkJTU3hIUVVGTGFVTXNTMEZCU3l4RFFVRmtha01zU1VGQlNTeEZRVU5PYzBNc1owSkJRV2RDTEU5QlFVZERMRkZCUVdVc2EwSkJRVU4wUXl4UFFVRlBMRWRCUXpGRFF5eFRRVUZUTEVkQlFVZHZReXhuUWtGQlowSXNSVUZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenMwUWtGRmRrTmlMRXRCUVVzc1kwRkJUMUVzUzBGQlN5eEZRVUZVTEVOQlFVTTdaME5CUVZOcVF5eEpRVUZKTzJkRFFVRkZReXhQUVVGUE8yZERRVUZGUXl4VFFVRlRPMmREUVVGRlF5eFhRVUZYT3pSQ1FVRjFRaXhEUVVGRExFTkJRWFpGTEUxQlFYVkZMRzlDUVVGdVFtbERMR3RDUVVGclFpeEhRVUZETEVOQlFVTTdkMEpCUTJ4R0xFTkJRVU03YjBKQlEwZ3NRMEZCUXp0blFrRkRTQ3hEUVVGRE8yZENRVVZFTEUxQlFVMHNRMEZCUTFnc1MwRkJTenRaUVVOa0xFTkJRVU03T3p0WlFVVk5hMElzUjBGQlZ5eEZRVUZZUVN4RFFVRlhPMjFDUVVGc1FpeFJRVUZSTEVOQlFVUkJMRmRCUVZjc1EwRkJRMVlzUzBGQlN5eEZRVUZGYUVNc1QwRkJUeXhGUVVGRlJTeFhRVUZYTEVWQlFYbENMRU5CUVVNN1owSkJRWGhDTEVkQlFVZHBReXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORGFrbDJSU3hEUkdsSmRVVTdaMEpCUVVRc1EwRkJRenRuUWtGRGJrVXNSMEZCU3l4RFFVRkhjRU1zU1VGQlNTeEhRVUZMYVVNc1MwRkJTeXhEUVVGa2FrTXNTVUZCU1N4RlFVTk9jME1zWjBKQlFXZENMRTlCUVVkRExGRkJRV1VzYTBKQlFVTjBReXhQUVVGUExFZEJRekZEUXl4VFFVRlRMRWRCUVVkdlF5eG5Ra0ZCWjBJc1JVRkROVUppTEV0QlFVc3NZMEZCVDFFc1MwRkJTeXhGUVVGVUxFTkJRVU03YjBKQlFWTnFReXhKUVVGSk8yOUNRVUZGUXl4UFFVRlBPMjlDUVVGRlF5eFRRVUZUTzI5Q1FVRkZReXhYUVVGWE8yZENRVUYxUWl4RFFVRkRMRU5CUVhaRkxFMUJRWFZGTEc5Q1FVRnVRbWxETEd0Q1FVRnJRanRuUWtGRmNFWXNUVUZCVFN4RFFVRkRXQ3hMUVVGTE8xbEJRMlFzUTBGQlF6czdPMWxCUlUxdFFpeEhRVUZyUWl4RlFVRnNRa0VzUTBGQmEwSTdiVUpCUVhwQ0xGRkJRVkVzUTBGQlJFRXNhMEpCUVd0Q0xFTkJRVU5ZTEV0QlFVc3NSVUZCUldoRExFOUJRVThzUlVGQlJVUXNTVUZCU1N4RlFVRkZSeXhYUVVGWExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRwUXl4RFFVRklMRWRCUVhGQ0xFTkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xGTkJRWEZDTEVOQlFYSkNMRTFCUVhGQ0xFVkJRV3hDUVN4clFrRkJhMElzUjBGQmNrSXNSMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUjBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNUMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1JVRkJja0lzU1VGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQlF6dHZRa0ZCUlVFc2EwSkJRV3RDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRWxCUVhKQ0xGTkJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFTkRNVWx3Uml4RFJEQkpiMFk3WjBKQlFVUXNRMEZCUXp0blFrRkRhRVlzUjBGQlN5eERRVUZEUlN4blFrRkJaMElzVDBGQlIwTXNVVUZCWlN4clFrRkJRM1JETEU5QlFVOHNSMEZETVVORExGTkJRVk1zUjBGQlIyOURMR2RDUVVGblFpeEZRVU0xUW1Jc1MwRkJTeXhqUVVGUFVTeExRVUZMTEVWQlFWUXNRMEZCUXp0dlFrRkJVMnBETEVsQlFVazdiMEpCUVVWRExFOUJRVTg3YjBKQlFVVkRMRk5CUVZNN2IwSkJRVVZETEZkQlFWYzdaMEpCUVhWQ0xFTkJRVU1zUTBGQmRrVXNUVUZCZFVVc2IwSkJRVzVDYVVNc2EwSkJRV3RDTzJkQ1FVVndSaXhOUVVGTkxFTkJRVU5ZTEV0QlFVczdXVUZEWkN4RFFVRkRPenROT3pzN2EwSkJka2xyUWpGQ0xFdEJRVXNzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfdG9rZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi90b2tlblwiKSk7XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGZvcih2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKWFycjJbaV0gPSBhcnJbaV07XG4gICAgcmV0dXJuIGFycjI7XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICAgIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obik7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBzaWduaWZpY2FudCA9IHRydWU7XG52YXIgU2lnbmlmaWNhbnRUb2tlbiA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oVG9rZW4pIHtcbiAgICBfaW5oZXJpdHMoU2lnbmlmaWNhbnRUb2tlbiwgVG9rZW4pO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2lnbmlmaWNhbnRUb2tlbik7XG4gICAgZnVuY3Rpb24gU2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhTaWduaWZpY2FudFRva2VuLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIF9pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247IC8vL1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlbiA9IChfaW5zdGFuY2UgPSBfZ2V0KF9nZXRQcm90b3R5cGVPZihTaWduaWZpY2FudFRva2VuLnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykpLmNhbGwuYXBwbHkoX2luc3RhbmNlLCBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRcbiAgICAgICAgICAgICAgICBdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocmVtYWluaW5nQXJndW1lbnRzKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaChDbGFzcywgY29udGVudCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIF9Ub2tlbjtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBDbGFzczsgLy8vXG4gICAgICAgICAgICAgICAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBzaWduaWZpY2FudFRva2VuID0gKF9Ub2tlbiA9IF90b2tlbi5kZWZhdWx0KS5tYXRjaC5hcHBseShfVG9rZW4sIFtcbiAgICAgICAgICAgICAgICAgICAgQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21Db250ZW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBfVG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlbiA9IChfVG9rZW4gPSBfdG9rZW4uZGVmYXVsdCkuZnJvbUNvbnRlbnQuYXBwbHkoX1Rva2VuLCBbXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudEFuZFR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBfVG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29udGVudDsgLy8vXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBDbGFzczsgLy8vXG4gICAgICAgICAgICAgICAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBzaWduaWZpY2FudFRva2VuID0gKF9Ub2tlbiA9IF90b2tlbi5kZWZhdWx0KS5mcm9tQ29udGVudEFuZFR5cGUuYXBwbHkoX1Rva2VuLCBbXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbjtcbn0oX3Rva2VuLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gU2lnbmlmaWNhbnRUb2tlbjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MGIydGxiaTl6YVdkdWFXWnBZMkZ1ZEM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1YVcxd2IzSjBJRlJ2YTJWdUlHWnliMjBnWENJdUxpOTBiMnRsYmx3aU8xeHVYRzVqYjI1emRDQnphV2R1YVdacFkyRnVkQ0E5SUhSeWRXVTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTnBaMjVwWm1sallXNTBWRzlyWlc0Z1pYaDBaVzVrY3lCVWIydGxiaUI3WEc0Z0lHTnNiMjVsS0VOc1lYTnpMQ0J6ZEdGeWRGQnZjMmwwYVc5dUxDQmxibVJRYjNOcGRHbHZiaXdnTGk0dWNtVnRZV2x1YVc1blFYSm5kVzFsYm5SektTQjdYRzRnSUNBZ2FXWWdLR1Z1WkZCdmMybDBhVzl1SUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJR1Z1WkZCdmMybDBhVzl1SUQwZ2MzUmhjblJRYjNOcGRHbHZianNnSUM4dkwxeHVJQ0FnSUNBZ2MzUmhjblJRYjNOcGRHbHZiaUE5SUVOc1lYTnpPeUFnTHk4dlhHNGdJQ0FnSUNCRGJHRnpjeUE5SUZOcFoyNXBabWxqWVc1MFZHOXJaVzQ3SUM4dkwxeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJSE5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J6ZFhCbGNpNWpiRzl1WlNoRGJHRnpjeXdnYzNSaGNuUlFiM05wZEdsdmJpd2daVzVrVUc5emFYUnBiMjRzSUhOcFoyNXBabWxqWVc1MExDQXVMaTV5WlcxaGFXNXBibWRCY21kMWJXVnVkSE1wTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE5wWjI1cFptbGpZVzUwVkc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdiV0YwWTJnb1EyeGhjM01zSUdOdmJuUmxiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHbG1JQ2hqYjI1MFpXNTBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHTnZiblJsYm5RZ1BTQkRiR0Z6Y3pzZ0lDOHZMMXh1SUNBZ0lDQWdRMnhoYzNNZ1BTQlRhV2R1YVdacFkyRnVkRlJ2YTJWdU95QXZMeTljYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCemFXZHVhV1pwWTJGdWRGUnZhMlZ1SUQwZ1ZHOXJaVzR1YldGMFkyZ29RMnhoYzNNc0lHTnZiblJsYm5Rc0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhOcFoyNXBabWxqWVc1MFZHOXJaVzQ3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVTnZiblJsYm5Rb1EyeGhjM01zSUdOdmJuUmxiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHbG1JQ2hqYjI1MFpXNTBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHTnZiblJsYm5RZ1BTQkRiR0Z6Y3pzZ0lDOHZMMXh1SUNBZ0lDQWdRMnhoYzNNZ1BTQlRhV2R1YVdacFkyRnVkRlJ2YTJWdU95QXZMeTljYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCemFXZHVhV1pwWTJGdWRGUnZhMlZ1SUQwZ1ZHOXJaVzR1Wm5KdmJVTnZiblJsYm5Rb1EyeGhjM01zSUdOdmJuUmxiblFzSUhOcFoyNXBabWxqWVc1MExDQXVMaTV5WlcxaGFXNXBibWRCY21kMWJXVnVkSE1wTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE5wWjI1cFptbGpZVzUwVkc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdabkp2YlVOdmJuUmxiblJCYm1SVWVYQmxLRU5zWVhOekxDQmpiMjUwWlc1MExDQjBlWEJsTENBdUxpNXlaVzFoYVc1cGJtZEJjbWQxYldWdWRITXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pTQTlQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnSUNCMGVYQmxJRDBnWTI5dWRHVnVkRHNnTHk4dlhHNGdJQ0FnSUNCamIyNTBaVzUwSUQwZ1EyeGhjM003SUNBdkx5OWNiaUFnSUNBZ0lFTnNZWE56SUQwZ1UybG5ibWxtYVdOaGJuUlViMnRsYmpzZ0x5OHZYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnYzJsbmJtbG1hV05oYm5SVWIydGxiaUE5SUZSdmEyVnVMbVp5YjIxRGIyNTBaVzUwUVc1a1ZIbHdaU2hEYkdGemN5d2dZMjl1ZEdWdWRDd2dkSGx3WlN3Z2MybG5ibWxtYVdOaGJuUXNJQzR1TG5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lrN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzJsbmJtbG1hV05oYm5SVWIydGxianRjYmlBZ2ZWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYkluTnBaMjVwWm1sallXNTBJaXdpVTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1Oc2IyNWxJaXdpUTJ4aGMzTWlMQ0p6ZEdGeWRGQnZjMmwwYVc5dUlpd2laVzVrVUc5emFYUnBiMjRpTENKeVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNaUxDSjFibVJsWm1sdVpXUWlMQ0p6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpYldGMFkyZ2lMQ0pqYjI1MFpXNTBJaXdpVkc5clpXNGlMQ0ptY205dFEyOXVkR1Z1ZENJc0ltWnliMjFEYjI1MFpXNTBRVzVrVkhsd1pTSXNJblI1Y0dVaVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFTkJRVmtzVjBGQlFTeERRVUZET3pzN1JUdDNRanRCUVVWTExFZEJRVlVzUTBGQlZpeE5RVUZWT3p0NVJEdDFSVHM3T3pzN096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdPenM3T3pzN2RVSTdPMHM3T3pzN08zZERPenM3T3pzN096czdNa0k3T3pzN096czdLMFE3T3pzN096czdPenR4UmpzN096czdPenM3T3pzN08yMUZPenRwUkRzN096czdRVUZGTlVJc1IwRkJTeXhEUVVGRFFTeFhRVUZYTEVkQlFVY3NTVUZCU1R0SlFVVklReXhuUWtGQlowSXNhVUpCUVhSQ0xGRkJRVkU3YzBNN08yRkJRVVpCTEdkQ1FVRm5RanNyUXpzN096czdXVUZEYmtORExFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNZVUZCWVN4RlFVRkZReXhYUVVGWExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTlFhRVVzUTBSUFowVTdaMEpCUVVRc1EwRkJRenR2UWtGUGJrTXNVMEZCU3p0blFrRk9PVUlzUlVGQlJTeEZRVUZGUkN4WFFVRlhMRXRCUVV0RkxGTkJRVk1zUlVGQlJTeERRVUZETzI5Q1FVTTVRa1lzVjBGQlZ5eEhRVUZIUkN4aFFVRmhMRU5CUVVNc1EwRkJSU3hGUVVGSExFRkJRVWdzUTBGQlJ6dHZRa0ZEYWtOQkxHRkJRV0VzUjBGQlIwUXNTMEZCU3l4RFFVRkRMRU5CUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3YjBKQlF6TkNRU3hMUVVGTExFZEJRVWRHTEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJ5eEJRVUZJTEVOQlFVYzdaMEpCUXk5Q0xFTkJRVU03WjBKQlJVUXNSMEZCU3l4RFFVRkRUeXhuUWtGQlowSXNTVUZCUnl4VFFVRkxMSGRDUVZKaVVDeG5Ra0ZCWjBJc1lVRlJSa01zUTBGQlN5eFJRVUZZTEVsQlFVc3NZMEZCVEN4VFFVRkxPenR2UWtGQlQwTXNTMEZCU3p0dlFrRkJSVU1zWVVGQllUdHZRa0ZCUlVNc1YwRkJWenR2UWtGQlJVd3NWMEZCVnpzMFEwRkJTMDBzYTBKQlFXdENPMmRDUVVVeFJ5eE5RVUZOTEVOQlFVTkZMR2RDUVVGblFqdFpRVU42UWl4RFFVRkRPenM3TzFsQlJVMURMRWRCUVVzc1JVRkJURUVzUTBGQlN6dHRRa0ZCV2l4UlFVRlJMRU5CUVVSQkxFdEJRVXNzUTBGQlEwNHNTMEZCU3l4RlFVRkZUeXhQUVVGUExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRLTEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnVRbkJFTEVORWJVSnZSRHRuUWtGQlJDeERRVUZETzI5Q1FVMTJRa3NzVFVGQlN6dG5Ra0ZNT1VJc1JVRkJSU3hGUVVGRlJDeFBRVUZQTEV0QlFVdElMRk5CUVZNc1JVRkJSU3hEUVVGRE8yOUNRVU14UWtjc1QwRkJUeXhIUVVGSFVDeExRVUZMTEVOQlFVTXNRMEZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRGNrSkJMRXRCUVVzc1IwRkJSMFlzWjBKQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZETDBJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTlBMR2RDUVVGblFpeEpRVUZIUnl4TlFVRkxMRWRCUVV4QkxFMUJRVXNzVlVGQlEwWXNTMEZCU3l4RFFVRllSU3hMUVVFclJDeERRVUV2UkVFc1RVRkJTeXhGUVVGTVFTeERRVUZETzI5Q1FVRlhVaXhMUVVGTE8yOUNRVUZGVHl4UFFVRlBPMjlDUVVGRlZpeFhRVUZYTzJkQ1FVRjFRaXhEUVVGRExFTkJRUzlFVnl4TlFVRXJSQ3h2UWtGQmJrSk1MR3RDUVVGclFqdG5Ra0ZGZGtZc1RVRkJUU3hEUVVGRFJTeG5Ra0ZCWjBJN1dVRkRla0lzUTBGQlF6czdPMWxCUlUxSkxFZEJRVmNzUlVGQldFRXNRMEZCVnp0dFFrRkJiRUlzVVVGQlVTeERRVUZFUVN4WFFVRlhMRU5CUVVOVUxFdEJRVXNzUlVGQlJVOHNUMEZCVHl4RlFVRjVRaXhEUVVGRE8yZENRVUY0UWl4SFFVRkhTaXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORE9VSXhSQ3hEUkRoQ01FUTdaMEpCUVVRc1EwRkJRenR2UWtGTk4wSkxMRTFCUVVzN1owSkJURGxDTEVWQlFVVXNSVUZCUlVRc1QwRkJUeXhMUVVGTFNDeFRRVUZUTEVWQlFVVXNRMEZCUXp0dlFrRkRNVUpITEU5QlFVOHNSMEZCUjFBc1MwRkJTeXhEUVVGRExFTkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdiMEpCUTNKQ1FTeExRVUZMTEVkQlFVZEdMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJReTlDTEVOQlFVTTdaMEpCUlVRc1IwRkJTeXhEUVVGRFR5eG5Ra0ZCWjBJc1NVRkJSMGNzVFVGQlN5eEhRVUZNUVN4TlFVRkxMRlZCUVVORExGZEJRVmNzUTBGQmFrSkVMRXRCUVhGRkxFTkJRWEpGUVN4TlFVRkxMRVZCUVV4QkxFTkJRVU03YjBKQlFXbENVaXhMUVVGTE8yOUNRVUZGVHl4UFFVRlBPMjlDUVVGRlZpeFhRVUZYTzJkQ1FVRjFRaXhEUVVGRExFTkJRWEpGVnl4TlFVRnhSU3h2UWtGQmJrSk1MR3RDUVVGclFqdG5Ra0ZGTjBZc1RVRkJUU3hEUVVGRFJTeG5Ra0ZCWjBJN1dVRkRla0lzUTBGQlF6czdPMWxCUlUxTExFZEJRV3RDTEVWQlFXeENRU3hEUVVGclFqdHRRa0ZCZWtJc1VVRkJVU3hEUVVGRVFTeHJRa0ZCYTBJc1EwRkJRMVlzUzBGQlN5eEZRVUZGVHl4UFFVRlBMRVZCUVVWSkxFbEJRVWtzUlVGQmVVSXNRMEZCUXp0blFrRkJlRUlzUjBGQlIxSXNRMEZCU0N4SFFVRnhRaXhEUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhUUVVGeFFpeERRVUZ5UWl4TlFVRnhRaXhGUVVGc1FrRXNhMEpCUVd0Q0xFZEJRWEpDTEVkQlFYRkNMRTlCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFZEJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRWEZDTEU5QlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRVZCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRWxCUVhGQ0xFVkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRVU03YjBKQlFVVkJMR3RDUVVGclFpeERRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4SlFVRnlRaXhUUVVGeFFpeERRVUZ5UWl4SlFVRnhRaXhEUTNwRGRrVXNRMFI1UTNWRk8yZENRVUZFTEVOQlFVTTdiMEpCVHpGRFN5eE5RVUZMTzJkQ1FVNDVRaXhGUVVGRkxFVkJRVVZITEVsQlFVa3NTMEZCUzFBc1UwRkJVeXhGUVVGRkxFTkJRVU03YjBKQlEzWkNUeXhKUVVGSkxFZEJRVWRLTEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yOUNRVU51UWtFc1QwRkJUeXhIUVVGSFVDeExRVUZMTEVOQlFVTXNRMEZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRGNrSkJMRXRCUVVzc1IwRkJSMFlzWjBKQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZETDBJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTlBMR2RDUVVGblFpeEpRVUZIUnl4TlFVRkxMRWRCUVV4QkxFMUJRVXNzVlVGQlEwVXNhMEpCUVd0Q0xFTkJRWGhDUml4TFFVRnJSaXhEUVVGc1JrRXNUVUZCU3l4RlFVRk1RU3hEUVVGRE8yOUNRVUYzUWxJc1MwRkJTenR2UWtGQlJVOHNUMEZCVHp0dlFrRkJSVWtzU1VGQlNUdHZRa0ZCUldRc1YwRkJWenRuUWtGQmRVSXNRMEZCUXl4RFFVRnNSbGNzVFVGQmEwWXNiMEpCUVc1Q1RDeHJRa0ZCYTBJN1owSkJSVEZITEUxQlFVMHNRMEZCUTBVc1owSkJRV2RDTzFsQlEzcENMRU5CUVVNN08wMDdPMFZCTjBNeVEwY3NUVUZCU3p0clFrRkJPVUpXTEdkQ1FVRm5RaXhCSW4wPSIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcmVndWxhckV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuICBcbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG4gIFxuICBnZXRSZWd1bGFyRXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIG1hdGNoKGNvbnRlbnQpIHtcbiAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKGNvbnRlbnQsIHRoaXMudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgYXNFbnRyeSgpIHtcbiAgICBjb25zdCBlbnRyeSA9IHt9LFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGAke3RoaXMucmVndWxhckV4cHJlc3Npb259YDtcblxuICAgIGVudHJ5W3RoaXMudHlwZV0gPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm47XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRva2VuKFRva2VuKSB7XG4gICAgY29uc3QgeyB0eXBlLCByZWd1bGFyRXhwcmVzc2lvbiB9ID0gVG9rZW4sXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21FbnRyeShlbnRyeSkge1xuICAgIGNvbnN0IGVudHJ5S2V5cyA9IE9iamVjdC5rZXlzKGVudHJ5KSxcbiAgICAgICAgICBmaXJzdEVudHJ5S2V5ID0gZmlyc3QoZW50cnlLZXlzKSxcbiAgICAgICAgICB0eXBlID0gZmlyc3RFbnRyeUtleSwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gZW50cnlbdHlwZV0sXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKTtcbiAgICAgICAgXG4gICAgcmV0dXJuIHJ1bGU7IFxuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICAgIGNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGUocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSxcbiAgICAgICAgICBmbGFncyA9IHVuaWNvZGUgP1xuICAgICAgICAgICAgICAgICAgICBVIDpcbiAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cChyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4sIGZsYWdzKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ0V4cCwgLy8vXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgY29uc3QgdW5pY29kZVJlZ3VsYXJFeHByZXNzaW9uID0gL3V7LywgLy8vXG4gICAgICAgIGluZGV4ID0gcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLnNlYXJjaCh1bmljb2RlUmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICB1bmljb2RlID0gKGluZGV4ICE9PSAtMSk7XG5cbiAgcmV0dXJuIHVuaWNvZGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgcGx1cyA9IFwiK1wiO1xyXG5leHBvcnQgY29uc3QgZXBzaWxvbiA9IFwiXHUwM0I1XCI7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdG9yID0gXCI7XCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbEJhciA9IFwifFwiO1xyXG5leHBvcnQgY29uc3Qgb3BlbkJyYWNrZXQgPSBcIihcIjtcclxuZXhwb3J0IGNvbnN0IGNsb3NlQnJhY2tldCA9IFwiKVwiO1xyXG5leHBvcnQgY29uc3QgcXVlc3Rpb25NYXJrID0gXCI/XCI7XHJcbmV4cG9ydCBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSBcIiFcIjtcclxuZXhwb3J0IGNvbnN0IE5PX1dISVRFU1BBQ0UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3QgRU5EX09GX0xJTkUgPSBcIjxFTkRfT0ZfTElORT5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwbHVzLFxyXG4gIGVwc2lsb24sXHJcbiAgd2lsZGNhcmQsXHJcbiAgYXN0ZXJpc2ssXHJcbiAgc2VwYXJhdG9yLFxyXG4gIHRlcm1pbmF0b3IsXHJcbiAgdmVydGljYWxCYXIsXHJcbiAgb3BlbkJyYWNrZXQsXHJcbiAgY2xvc2VCcmFja2V0LFxyXG4gIHF1ZXN0aW9uTWFyayxcclxuICBleGNsYW1hdGlvbk1hcmssXHJcbiAgTk9fV0hJVEVTUEFDRSxcclxuICBFTkRfT0ZfTElORVxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzo6Oj18XFxcXHx8XFxcXCh8XFxcXCl8XFxcXD98XFxcXCF8XFxcXCp8XFxcXCt8XFxcXC58XHUwM0I1fDt8PE5PX1dISVRFU1BBQ0U+fDxFTkRfT0ZfTElORT4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidHlwZVwiOiBcIl5cXFxcW1teXFxcXF1dK1xcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bXFxcXHd+XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpIHtcbiAgY29uc3QgdG9rZW5Db21tZW50VG9rZW4gPSB0b2tlbi5pc0NvbW1lbnRUb2tlbigpO1xuXG4gIGlmICh0b2tlbkNvbW1lbnRUb2tlbikge1xuICAgIGNvbnN0IGNvbW1lbnRUb2tlbiA9IHRva2VuLCAvLy9cbiAgICAgICAgICBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gY29tbWVudFRva2VuLmlzSW5Db21tZW50UHJlc2VydmluZygpO1xuXG4gICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGluQ29tbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vbkxleGVyIHtcclxuICBjb25zdHJ1Y3RvcihydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcykge1xyXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xyXG4gICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3NlcztcclxuICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG4gIFxyXG4gIGdldFJ1bGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucnVsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldE5vdEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2UoY29udGVudCwgaW5Db21tZW50ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChjb250ZW50ICE9PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IENsYXNzZXMgPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuXHJcbiAgICAgIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcclxuICAgICAgICBpZiAoQ2xhc3MgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRva2VuID0gQ2xhc3MubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucnVsZXMuc29tZSgocnVsZSkgPT4ge1xyXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHJ1bGUubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZW50ICcke2NvbnRlbnR9JyBjYW5ub3QgYmUgdG9rZW5pc2VkLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcblxyXG4gICAgICBpbkNvbW1lbnQgPSBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCk7XHJcblxyXG4gICAgICBjb25zdCB0b2tlbkNvbnRlbnRMZW5ndGggPSB0b2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5Db250ZW50TGVuZ3RoOyAvLy9cclxuXHJcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xyXG4gICAgY29uc3QgeyBlbnRyaWVzIH0gPSBDbGFzcyxcclxuICAgICAgICAgIEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XHJcbiAgICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBOb3RJbkNvbW1lbnRDbGFzc2VzID0gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKENsYXNzLCBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBydWxlcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gUnVsZS5mcm9tRW50cnkoZW50cnkpKSxcclxuICAgICAgICAgIEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XHJcbiAgY29uc3QgeyBFbmRPZkxpbmVDb21tZW50VG9rZW4sIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9ID0gQ2xhc3MsXHJcbiAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IFtcclxuICAgICAgICAgIEVuZE9mTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW5cclxuICAgICAgICBdO1xyXG5cclxuICByZXR1cm4gSW5Db21tZW50Q2xhc3NlcztcclxufVxyXG5cclxuZnVuY3Rpb24gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xyXG4gIGNvbnN0IHsgRW5kT2ZMaW5lVG9rZW4sXHJcbiAgICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcclxuICAgICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSA9IENsYXNzLFxyXG4gICAgICBOb3RJbkNvbW1lbnRDbGFzc2VzID0gW1xyXG4gICAgICAgIEVuZE9mTGluZVRva2VuLFxyXG4gICAgICAgIFdoaXRlc3BhY2VUb2tlbixcclxuICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcclxuICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuXHJcbiAgICAgIF07XHJcblxyXG4gIHJldHVybiBOb3RJbkNvbW1lbnRDbGFzc2VzO1xyXG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlKSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdoaXRlc3BhY2VUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSB3aGl0ZXNwYWNlVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXltcXHQgXSsvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oPzpcXFxcW15cXHNdfFteXFwvXFxyXFxuXSkqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzdHJpbmdMaXRlcmFsVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGgsXG4gICAgICAgICAgc3RhcnQgPSAxLFxuICAgICAgICAgIGVuZCA9IGNvbnRlbnRMZW5ndGggLSAxLFxuICAgICAgICAgIHN0cmluZyA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RyaW5nTGl0ZXJhbFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKD86XFxcXFteXFxzXXxbXlwiXFxcXFxcclxcbl0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuaW1wb3J0IFdoaXRlc3BhY2VUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgdG9rZW5zRnJvbUJORihibmYpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBibmYsICAvLy9cclxuICAgICAgICAgIHRva2VucyA9IHN1cGVyLnRva2VuaXNlKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJORkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQk5GTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQk5GTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcImRpZ2l0XCI6IFwiXlxcXFxkK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImJyYWNrZXRcIjogXCJeKD86XFxcXCh8XFxcXCkpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwib3BlcmF0b3JcIjogXCJeKD86XFxcXCt8XFxcXC18XFxcXCp8XFxcXC8pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXicoPzpcXFxcW15cXHNdfFteJ1xcXFxcXHJcXG5dKSonLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc2luZ2xlTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eI1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89IyMjKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcclxuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcclxuaW1wb3J0IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gUmVndWxhckV4cHJlc3Npb25Ub2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQmFzaWNMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEJhc2ljTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQmFzaWNMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89XFwqXFwvKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIi4vc3BlY2lhbFN5bWJvbHNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuXHJcbiAgeyBcImNvbG91clwiOiBcIl4jKD86WzAtOWEtZkEtRl17Nn18WzAtOWEtZkEtRl17M30pXCIgfSxcclxuXHJcbiAgeyBcImtleXdvcmRcIjogXCJeKD86IWltcG9ydGFudHxAbWVkaWEpXCIgfSxcclxuXHJcbiAgeyBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKVxcXFwlXCIgfSxcclxuXHJcbiAgeyBcImZyZXF1ZW5jeVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86aHp8a2h6KVwiIH0sXHJcblxyXG4gIHsgXCJmcmFjdGlvblwiOiBcIl5bMS05XVswLTldKj9mclwiIH0sXHJcblxyXG4gIHsgXCJsZW5ndGhcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnB4fGNtfG1tfGlufHB0fHBjKVwiIH0sXHJcblxyXG4gIHsgXCJhbmdsZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86ZGVnfHJhZHxncmFkKVwiIH0sXHJcblxyXG4gIHsgXCJ0aW1lXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpzfG1zKVwiIH0sXHJcblxyXG4gIHsgXCJyZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKylyZW1cIiB9LFxyXG5cclxuICB7IFwiZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKyllbVwiIH0sXHJcblxyXG4gIHsgXCJudW1iZXJcIjogXCJeWzAtOV0rfFswLTldKlxcXFwuWzAtOV0rXCIgfSxcclxuXHJcbiAgeyBcInNwZWNpYWxcIjogXCJeO3w6Onw6fFxcXFwufCx8L3xcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCIgfSxcclxuXHJcbiAgeyBcIm9wZXJhdG9yXCI6IFwiXl4oPzphbmR8bm90fG9ubHkpJFwiIH0sXHJcblxyXG4gIHsgXCJpZGVudGlmaWVyXCI6IFwiXltfYS16QS1aMC05LV0rXCIgfSxcclxuXHJcbiAgeyBcInVuYXJ5LW9wZXJhdG9yXCI6IFwiXlxcXFwrfFxcXFwtXCIgfSxcclxuXHJcbiAgeyBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCIgfVxyXG5cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhDU1NMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKENTU0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKENTU0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gICAgICBkb2N1bWVudCAgICAgICAgICAgICAgOjo9ICAoIHJ1bGUgfCBlcnJvciApKyA7XG5cbiAgICAgIHJ1bGUgICAgICAgICAgICAgICAgICA6Oj0gIG5hbWUgXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgIDo6PSAgcGFydCsgO1xuXG4gICAgICBwYXJ0ICAgICAgICAgICAgICAgICAgOjo9ICBub25UZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVBhcnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBub25UZXJtaW5hbFBhcnQgICAgICAgOjo9ICBjaG9pY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHNlcXVlbmNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBydWxlTmFtZSBsb29rQWhlYWRNb2RpZmllcj9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtaW5hbFBhcnQgICAgICAgICAgOjo9ICBzaWduaWZpY2FudFRva2VuVHlwZVxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmVndWxhckV4cHJlc3Npb25cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVuZE9mTGluZVxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgd2lsZGNhcmRcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydCAgICAgIDo6PSAgXCI8Tk9fV0hJVEVTUEFDRT5cIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgIGNob2ljZU9mUGFydHMgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgKCBcInxcIiBwYXJ0ICkrIFwiKVwiIDtcblxuICAgICAgc2VxdWVuY2VPZlBhcnRzICAgICAgIDo6PSAgXCIoXCIgcGFydCBwYXJ0KyBcIilcIiA7XG5cbiAgICAgIHJ1bGVOYW1lICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlICA6Oj0gIFt0eXBlXSA7XG5cbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uICAgICA6Oj0gIFtyZWd1bGFyLWV4cHJlc3Npb25dIDtcblxuICAgICAgdGVybWluYWxTeW1ib2wgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cbiAgICAgIGVuZE9mTGluZSAgICAgICAgICAgICA6Oj0gIFwiPEVORF9PRl9MSU5FPlwiIDtcblxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgb25lT3JNb3JlUXVhbnRpZmllclxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbG9va0FoZWFkTW9kaWZpZXIgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIhXCIgO1xuXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXIgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIj9cIiA7XG5cbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXIgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiK1wiIDtcblxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXIgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIqXCIgO1xuXG4gICAgICBlcnJvciAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKSB7XG4gIGxldCBwYWRkaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBwYWRkaW5nTGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgcGFkZGluZyArPSBTUEFDRV9DSEFSQUNURVI7XG4gIH1cblxuICByZXR1cm4gcGFkZGluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGggfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzZXROb25UZXJtaW5hbE5vZGUoTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgICAgICBwb3NpdGlvbiA9IGRlZmluaXRpb25zTGVuZ3RoOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbiwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBzdGFydCA9IGRlZmluaXRpb25JbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VEZWZpbml0aW9uKG9sZERlZmluaXRpb24sIG5ld0RlZmluaXRpb24pIHtcbiAgICBjb25zdCBvbGREZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2Yob2xkRGVmaW5pdGlvbik7XG5cbiAgICBpZiAob2xkRGVmaW5pdGlvbkluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gb2xkRGVmaW5pdGlvbkluZGV4LCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBuZXdEZWZpbml0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlKHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBydWxlTm9kZSA9IG51bGw7XG5cbiAgICBzdGF0ZS5pbmNyZWFzZURlcHRoKCk7XG5cbiAgICBjb25zdCB0b29EZWVwID0gc3RhdGUuaXNUb29EZWVwKCk7XG5cbiAgICBpZiAodG9vRGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFyc2UgdHJlZSBpcyB0b28gZGVlcCBhdCBydWxlIFwiJHt0aGlzLm5hbWV9XCIuYCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZCxcbiAgICAgICAgZGVmaW5pdGlvbk5vZGVzO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zb21lKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBkZWZpbml0aW9uTm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgZGVmaW5pdGlvbk5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgICAgY2hpbGROb2RlcyA9IGRlZmluaXRpb25Ob2RlcywgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gdGhpcy5Ob25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICAgIHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBzdGF0ZS5kZWNyZWFzZURlcHRoKCk7XG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBwYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUoQ2xhc3MsIHJ1bGUpIHtcbiAgICBpZiAocnVsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlID0gQ2xhc3M7XG4gICAgICBDbGFzcyA9IFJ1bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBydWxlLmdldE5vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgcnVsZSA9IG5ldyBDbGFzcyhuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWElNVU1fREVQVEggPSA5OTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgREVGQVVMVF9NQVhJTVVNX0RFUFRIIH0gZnJvbSBcIi4vZGVmYXVsdHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge1xuICBjb25zdHJ1Y3RvcihydWxlTWFwLCB0b2tlbnMsIGluZGV4LCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgICB0aGlzLnRva2VucyA9IHRva2Vucztcblx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG5cdFx0dGhpcy5kZXB0aCA9IGRlcHRoO1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG5cdGdldEluZGV4KCkge1xuXHRcdHJldHVybiB0aGlzLmluZGV4O1xuXHR9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVwdGg7XG4gIH1cblxuXHRnZXRNYXhpbXVtRGVwdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4aW11bURlcHRoO1xuXHR9XG5cblx0Z2V0U2F2ZWRJbmRleCgpIHtcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gdGhpcy5pbmRleDsgLy8vXG4gIFxuICAgIHJldHVybiBzYXZlZEluZGV4O1xuICB9XG5cbiAgZ2V0TmV4dFRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgdG9rZW5zTGVuZ3RoID0gdGhpcy50b2tlbnMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuaW5kZXggPCB0b2tlbnNMZW5ndGgpIHtcbiAgICAgIG5leHRUb2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK107XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgfVxuXG4gIGdldE5leHRTaWduaWZpY2FudFRva2VuKCkge1xuXHRcdGxldCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgXHRjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgXHR3aGlsZSAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICBcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4KytdLFxuXHRcdFx0XHRcdFx0dG9rZW5TaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKTtcblxuICBcdFx0aWYgKHRva2VuU2lnbmlmaWNhbnQpIHtcbiAgXHRcdCAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRva2VuOyAvLy9cblxuXHRcdFx0XHRuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XHQvLy9cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cbiAgXHR9XG5cblx0XHRyZXR1cm4gbmV4dFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpIHtcbiAgICBsZXQgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gZmFsc2U7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cbiAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IG5leHRUb2tlbi5pc1doaXRlc3BhY2VUb2tlbigpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuICBpc1Rvb0RlZXAoKSB7XG4gICAgY29uc3QgdG9vRGVlcCA9ICh0aGlzLmRlcHRoID4gdGhpcy5tYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIHRvb0RlZXA7XG4gIH1cblxuXHRiYWNrdHJhY2soc2F2ZWRJbmRleCkge1xuXHRcdHRoaXMuaW5kZXggPSBzYXZlZEluZGV4OyAgLy8vXG5cdH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIGluY3JlYXNlRGVwdGgoKSB7XG4gICAgdGhpcy5kZXB0aCsrO1xuICB9XG5cbiAgZGVjcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoLS07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCBydWxlTWFwKSB7XG4gICAgY29uc3QgaW5kZXggPSAwLFxuXHRcdFx0XHRcdGRlcHRoID0gMCxcblx0XHRcdFx0XHRtYXhpbXVtRGVwdGggPSBERUZBVUxUX01BWElNVU1fREVQVEgsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUocnVsZU1hcCwgdG9rZW5zLCBpbmRleCwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBsYXN0LCBwdXNoLCBmaWx0ZXIsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVuKGFycmF5KSB7IHJldHVybiBhcnJheS5maWx0ZXIoKGVudHJ5LCBpbmRleCkgPT4gaXNFdmVuKGluZGV4KSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0KGFycmF5KSB7XG4gIGFycmF5ID0gYXJyYXkuc2xpY2UoKTsgIC8vL1xuXG4gIGFycmF5LnNoaWZ0KCk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsQnV0Rmlyc3RBbmRMYXN0KGFycmF5KSB7XG4gIGFycmF5ID0gYXJyYXkuc2xpY2UoKTsgIC8vL1xuXG4gIGFycmF5LnNoaWZ0KCk7XG5cbiAgYXJyYXkucG9wKCk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBpc0V2ZW4oaW5kZXgpIHtcbiAgY29uc3QgZXZlbiA9IChNYXRoLmZsb29yKGluZGV4LzIpID09PSBpbmRleC8yKTtcblxuICByZXR1cm4gZXZlbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgbGFzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBORVdfTElORV9DSEFSQUNURVIsIFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubGluZXMuc2xpY2UoKSwgIC8vL1xuICAgICAgICAgIHBhcnNlVHJlZSA9IG5ldyBQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGxldCB3aWR0aDtcblxuICAgIGxldCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxpbmVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RMaW5lID0gbGFzdCh0aGlzLmxpbmVzKSxcbiAgICAgICAgICAgIGxhc3RMaW5lTGVuZ3RoID0gbGFzdExpbmUubGVuZ3RoO1xuXG4gICAgICB3aWR0aCA9IGxhc3RMaW5lTGVuZ3RoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoLFxuICAgICAgICAgIGRlcHRoID0gbGluZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBkZXB0aDtcbiAgfVxuXG4gIGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFwcGVuZFRvVG9wKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9MZWZ0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGluZSArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9SaWdodChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgbGluZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvQm90dG9tKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkVG9wTWFyZ2luKHRvcE1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgdG9wTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIHRvcE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aCh0b3BNYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9wTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdCh0b3BNYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgbGVmdE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChsZWZ0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGVmdE1hcmdpblN0cmluZyArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCByaWdodE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChyaWdodE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgcmlnaHRNYXJnaW5TdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgYm90dG9tTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIGJvdHRvbU1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChib3R0b21NYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYm90dG9tTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMucHVzaChib3R0b21NYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuICBcbiAgcG9wTGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMucG9wKCk7IH1cbiAgXG4gIHNoaWZ0TGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMuc2hpZnQoKTsgfVxuICBcbiAgcHVzaExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnB1c2gobGluZSk7IH1cbiAgXG4gIHVuc2hpZnRMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpOyB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5saW5lcy5yZWR1Y2UoKHN0cmluZywgbGluZSkgPT4ge1xuICAgICAgc3RyaW5nICs9IGxpbmUgKyBORVdfTElORV9DSEFSQUNURVI7XG5cbiAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKG1hcmdpbldpZHRoLCBzcGFjZUNoYXJhY3Rlcikge1xuICBzcGFjZUNoYXJhY3RlciA9IHNwYWNlQ2hhcmFjdGVyIHx8IFNQQUNFX0NIQVJBQ1RFUjtcblxuICBsZXQgbWFyZ2luU3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXJnaW5XaWR0aDsgaW5kZXgrKykge1xuICAgIG1hcmdpblN0cmluZyArPSBzcGFjZUNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBtYXJnaW5TdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25lY2Vzc2FyeSA9IHJlcXVpcmUoXCJuZWNlc3NhcnlcIik7XG52YXIgX3BhcnNlVHJlZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3BhcnNlVHJlZVwiKSk7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBCQVJfQ0hBUkFDVEVSID0gX25lY2Vzc2FyeS5jaGFyYWN0ZXJzLkJBUl9DSEFSQUNURVI7XG52YXIgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKFBhcnNlVHJlZSkge1xuICAgIF9pbmhlcml0cyhWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSwgUGFyc2VUcmVlKTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICBmdW5jdGlvbiBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZShsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbGluZXMpO1xuICAgICAgICBfdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhZGRMZWZ0TWFyZ2luXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBfZ2V0KF9nZXRQcm90b3R5cGVPZihWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5wcm90b3R5cGUpLCBcImFkZExlZnRNYXJnaW5cIiwgdGhpcykuY2FsbCh0aGlzLCBsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsZWZ0TWFyZ2luV2lkdGg7IC8vL1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVdpZHRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0cmluZyA9IEJBUl9DSEFSQUNURVIsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLCB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pLCBsZWZ0TWFyZ2luV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoIC8gMiksIHJpZ2h0TWFyZ2luV2lkdGggPSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aCAtIDE7XG4gICAgICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBkZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGxpbmVzRnJvbURlcHRoKGRlcHRoKSwgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25cbiAgICAgICAgICAgICAgICBdLCB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gc3RyaW5nOyAvLy9cbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IF9wYXJzZVRyZWUuZGVmYXVsdDsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc3RyaW5nLCBsaW5lcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIF0sIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uXG4gICAgICAgICAgICAgICAgXSwgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7IC8vL1xuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbn0oX3BhcnNlVHJlZS5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuZnVuY3Rpb24gbGluZXNGcm9tRGVwdGgoZGVwdGgpIHtcbiAgICB2YXIgbGluZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlKGluZGV4IDwgZGVwdGgpe1xuICAgICAgICBsaW5lc1tpbmRleCsrXSA9IF9jb25zdGFudHMuRU1QVFlfU1RSSU5HO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXM7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWEp6WlZSeVpXVXZkbVZ5ZEdsallXeENjbUZ1WTJndWFuTWlYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWENKMWMyVWdjM1J5YVdOMFhDSTdYRzVjYm1sdGNHOXlkQ0I3SUdOb1lYSmhZM1JsY25NZ2ZTQm1jbTl0SUZ3aWJtVmpaWE56WVhKNVhDSTdYRzVjYm1sdGNHOXlkQ0JRWVhKelpWUnlaV1VnWm5KdmJTQmNJaTR1TDNCaGNuTmxWSEpsWlZ3aU8xeHVYRzVwYlhCdmNuUWdleUJGVFZCVVdWOVRWRkpKVGtjZ2ZTQm1jbTl0SUZ3aUxpNHZZMjl1YzNSaGJuUnpYQ0k3WEc1Y2JtTnZibk4wSUhzZ1FrRlNYME5JUVZKQlExUkZVaUI5SUQwZ1kyaGhjbUZqZEdWeWN6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1ZtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1VnWlhoMFpXNWtjeUJRWVhKelpWUnlaV1VnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaWhzYVc1bGN5d2dkbVZ5ZEdsallXeENjbUZ1WTJoUWIzTnBkR2x2YmlrZ2UxeHVJQ0FnSUhOMWNHVnlLR3hwYm1WektUdGNiaUFnSUNCY2JpQWdJQ0IwYUdsekxuWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRnUFNCMlpYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVPMXh1SUNCOVhHNGdJRnh1SUNCblpYUldaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjQ3WEc0Z0lIMWNibHh1SUNCaFpHUk1aV1owVFdGeVoybHVLR3hsWm5STllYSm5hVzVYYVdSMGFDa2dlMXh1SUNBZ0lITjFjR1Z5TG1Ga1pFeGxablJOWVhKbmFXNG9iR1ZtZEUxaGNtZHBibGRwWkhSb0tUdGNibHh1SUNBZ0lIUm9hWE11ZG1WeWRHbGpZV3hDY21GdVkyaFFiM05wZEdsdmJpQXJQU0JzWldaMFRXRnlaMmx1VjJsa2RHZzdJQzh2TDF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVhhV1IwYUNoM2FXUjBhQ2tnZTF4dUlDQWdJR052Ym5OMElITjBjbWx1WnlBOUlFSkJVbDlEU0VGU1FVTlVSVklzWEc0Z0lDQWdJQ0FnSUNBZ2RtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUE5SURBc1hHNGdJQ0FnSUNBZ0lDQWdkbVZ5ZEdsallXeENjbUZ1WTJoUVlYSnpaVlJ5WldVZ1BTQldaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlM1bWNtOXRVM1J5YVc1blFXNWtWbVZ5ZEdsallXeENjbUZ1WTJoUWIzTnBkR2x2YmloV1pYSjBhV05oYkVKeVlXNWphRkJoY25ObFZISmxaU3dnYzNSeWFXNW5MQ0IyWlhKMGFXTmhiRUp5WVc1amFGQnZjMmwwYVc5dUtTeGNiaUFnSUNBZ0lDQWdJQ0JzWldaMFRXRnlaMmx1VjJsa2RHZ2dQU0JOWVhSb0xtWnNiMjl5S0hkcFpIUm9MeklwTEZ4dUlDQWdJQ0FnSUNBZ0lISnBaMmgwVFdGeVoybHVWMmxrZEdnZ1BTQjNhV1IwYUNBdElHeGxablJOWVhKbmFXNVhhV1IwYUNBdElERTdYRzVjYmlBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlM1aFpHUk1aV1owVFdGeVoybHVLR3hsWm5STllYSm5hVzVYYVdSMGFDazdYRzRnSUNBZ2RtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1V1WVdSa1VtbG5hSFJOWVhKbmFXNG9jbWxuYUhSTllYSm5hVzVYYVdSMGFDazdYRzVjYmlBZ0lDQnlaWFIxY200Z2RtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1U3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVUmxjSFJvUVc1a1ZtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaWhEYkdGemN5d2daR1Z3ZEdnc0lIWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0JqYjI1emRDQnNhVzVsY3lBOUlHeHBibVZ6Um5KdmJVUmxjSFJvS0dSbGNIUm9LU3hjYmlBZ0lDQWdJQ0FnSUNCaGNtZHpJRDBnVzI1MWJHd3NJR3hwYm1WekxDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1WFN4Y2JpQWdJQ0FnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlNBOUlHNWxkeUFvUm5WdVkzUnBiMjR1Y0hKdmRHOTBlWEJsTG1KcGJtUXVZWEJ3Ykhrb1EyeGhjM01zSUdGeVozTXBLVHNnSUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhabGNuUnBZMkZzUW5KaGJtTm9VR0Z5YzJWVWNtVmxPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxVGRISnBibWRCYm1SV1pYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVLRU5zWVhOekxDQnpkSEpwYm1jc0lIWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0JwWmlBb2RtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUE5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1SUQwZ2MzUnlhVzVuT3lBZ0x5OHZYRzRnSUNBZ0lDQnpkSEpwYm1jZ1BTQkRiR0Z6Y3pzZ0x5OHZYRzRnSUNBZ0lDQkRiR0Z6Y3lBOUlGQmhjbk5sVkhKbFpUc2dJQzh2TDF4dUlDQWdJSDFjYmlBZ0lDQmNiaUFnSUNCamIyNXpkQ0JzYVc1bElEMGdjM1J5YVc1bkxDQXZMeTljYmlBZ0lDQWdJQ0FnSUNCc2FXNWxjeUE5SUZ0c2FXNWxYU3hjYmlBZ0lDQWdJQ0FnSUNCaGNtZHpJRDBnVzI1MWJHd3NJR3hwYm1WekxDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1WFN4Y2JpQWdJQ0FnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlNBOUlHNWxkeUFvUm5WdVkzUnBiMjR1Y0hKdmRHOTBlWEJsTG1KcGJtUXVZWEJ3Ykhrb1EyeGhjM01zSUdGeVozTXBLVHNnSUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhabGNuUnBZMkZzUW5KaGJtTm9VR0Z5YzJWVWNtVmxPMXh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4cGJtVnpSbkp2YlVSbGNIUm9LR1JsY0hSb0tTQjdYRzRnSUdOdmJuTjBJR3hwYm1WeklEMGdXMTA3WEc1Y2JpQWdiR1YwSUdsdVpHVjRJRDBnTUR0Y2JseHVJQ0IzYUdsc1pTQW9hVzVrWlhnZ1BDQmtaWEIwYUNrZ2UxeHVJQ0FnSUd4cGJtVnpXMmx1WkdWNEt5dGRJRDBnUlUxUVZGbGZVMVJTU1U1SE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHeHBibVZ6TzF4dWZWeHVJbDBzSW01aGJXVnpJanBiSWtKQlVsOURTRUZTUVVOVVJWSWlMQ0pqYUdGeVlXTjBaWEp6SWl3aVZtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1VpTENKc2FXNWxjeUlzSW5abGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNGlMQ0puWlhSV1pYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVJaXdpWVdSa1RHVm1kRTFoY21kcGJpSXNJbXhsWm5STllYSm5hVzVYYVdSMGFDSXNJbVp5YjIxWGFXUjBhQ0lzSW5kcFpIUm9JaXdpYzNSeWFXNW5JaXdpZG1WeWRHbGpZV3hDY21GdVkyaFFZWEp6WlZSeVpXVWlMQ0ptY205dFUzUnlhVzVuUVc1a1ZtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUlzSWsxaGRHZ2lMQ0ptYkc5dmNpSXNJbkpwWjJoMFRXRnlaMmx1VjJsa2RHZ2lMQ0poWkdSU2FXZG9kRTFoY21kcGJpSXNJbVp5YjIxRVpYQjBhRUZ1WkZabGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNGlMQ0pEYkdGemN5SXNJbVJsY0hSb0lpd2liR2x1WlhOR2NtOXRSR1Z3ZEdnaUxDSmhjbWR6SWl3aVJuVnVZM1JwYjI0aUxDSndjbTkwYjNSNWNHVWlMQ0ppYVc1a0lpd2lZWEJ3YkhraUxDSjFibVJsWm1sdVpXUWlMQ0pRWVhKelpWUnlaV1VpTENKc2FXNWxJaXdpYVc1a1pYZ2lMQ0pGVFZCVVdWOVRWRkpKVGtjaVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFTkJRVmtzVjBGQlFTeERRVUZET3pzN1JUdDNRanRCUVVWakxFZEJRVmNzUTBGQldDeFZRVUZYTzBGQlJXaENMRWRCUVdNc1EwRkJaQ3hWUVVGak8wRkJSVkFzUjBGQll5eERRVUZrTEZWQlFXTTdPenM3T3pzN096czdPenM3T3pzNFJEdHpRenMyUkR0cFJUczdPenQzUlR0blJUczdPenM3TUVJN096czdPenM3T3pzN1V6czdPenM3T3p0TE96czdPenM3T3pzN096czdPMDA3ZVVRN096czdPenM3T3pzN096czdPenQxUWpzN1N6czdPenM3ZDBNN096czdPenN5UWpzN096czdPenM3Y1VZN096czdPenM3T3pzN096dHRSVHM3YVVRN096czdPMEZCUlRORExFZEJRVXNzUTBGQlIwRXNZVUZCWVN4SFFVRkxReXhWUVVGVkxGbEJRVFZDUkN4aFFVRmhPMGxCUlVGRkxIVkNRVUYxUWl4cFFrRkJOMElzVVVGQlVUdHBSRHM3WVVGQlJrRXNkVUpCUVhWQ0xFTkJRemxDUXl4TFFVRkxMRVZCUVVWRExITkNRVUZ6UWp0elJEczdhME5CUTJwRFJDeExRVUZMTEVORFdtWXNRMFJaYVVJN1kwRkZVa01zYzBKQlFYTkNMRWRCUVVkQkxITkNRVUZ6UWl4RFFVRkRPenM3T3p0WlFVZDJSRU1zUjBGQmVVSXNSVUZCZWtKQkxFTkJRWGxDTzIxQ1FVRjZRa0VzVVVGQlVTeERRVUZTUVN4NVFrRkJlVUlzUjBGQlJ5eERRVUZETzJkQ1FVTXpRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZEUkN4elFrRkJjMEk3V1VGRGNFTXNRMEZCUXpzN08xbEJSVVJGTEVkQlFXRXNSVUZCWWtFc1EwRkJZVHR0UWtGQllrRXNVVUZCVVN4RFFVRlNRU3hoUVVGaExFTkJRVU5ETEdWQlFXVXNSVUZCUlN4RFFVRkRPM0ZEUVZoaVRDeDFRa0ZCZFVJc1lVRlpiRU5KTEVOQlFXRXNaMEpCUVc1Q0xFbEJRVXNzWVVGQlpVTXNaVUZCWlN4RFEzUkNka01zUTBSelFubERPMmRDUVVWeVF5eEpRVUZKTEVOQlFVTklMSE5DUVVGelFpeEpRVUZKUnl4bFFVRmxMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dFpRVU55UkN4RFFVRkRPenM3TzFsQlJVMURMRWRCUVZNc1JVRkJWRUVzUTBGQlV6dHRRa0ZCYUVJc1VVRkJVU3hEUVVGRVFTeFRRVUZUTEVOQlFVTkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU4yUWl4SFFVRkxMRU5CUVVORExFMUJRVTBzUjBGQlIxWXNZVUZCWVN4RlFVTjBRa2tzYzBKQlFYTkNMRWRCUVVjc1EwRkJReXhGUVVNeFFrOHNkVUpCUVhWQ0xFZEJRVWRVTEhWQ1FVRjFRaXhEUVVGRFZTeHRRMEZCYlVNc1EwRkJRMVlzZFVKQlFYVkNMRVZCUVVWUkxFMUJRVTBzUlVGQlJVNHNjMEpCUVhOQ0xFZEJRemRKUnl4bFFVRmxMRWRCUVVkTkxFbEJRVWtzUTBGQlEwTXNTMEZCU3l4RFFVRkRUQ3hMUVVGTExFZEJRVU1zUTBGQlF5eEhRVU53UTAwc1owSkJRV2RDTEVkQlFVZE9MRXRCUVVzc1IwRkJSMFlzWlVGQlpTeEhRVUZITEVOQlFVTTdaMEpCUlhCRVNTeDFRa0ZCZFVJc1EwRkJRMHdzWVVGQllTeERRVUZEUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRuUWtGRGRrUkpMSFZDUVVGMVFpeERRVUZEU3l4alFVRmpMRU5CUVVORUxHZENRVUZuUWl4RFFVRkRMRU5CUVVNN1owSkJSWHBFTEUxQlFVMHNRMEZCUTBvc2RVSkJRWFZDTzFsQlEyaERMRU5CUVVNN096dFpRVVZOVFN4SFFVRnJReXhGUVVGc1EwRXNRMEZCYTBNN2JVSkJRWHBETEZGQlFWRXNRMEZCUkVFc2EwTkJRV3RETEVOQlFVTkRMRXRCUVVzc1JVRkJSVU1zUzBGQlN5eEZRVUZGWml4elFrRkJjMElzUlVGQlJTeERRVUZETzJkQ1FVTXZSU3hIUVVGTExFTkJRVU5FTEV0QlFVc3NSMEZCUjJsQ0xHTkJRV01zUTBGQlEwUXNTMEZCU3l4SFFVTTFRa1VzU1VGQlNTeEhRVUZITEVOQlFVTTdiMEpCUVVFc1NVRkJTVHR2UWtGQlJXeENMRXRCUVVzN2IwSkJRVVZETEhOQ1FVRnpRanRuUWtGQlFTeERRVUZETEVWQlF6VkRUeXgxUWtGQmRVSXNSMEZCUnl4SFFVRkhMRVZCUVVWWExGRkJRVkVzUTBGQlEwTXNVMEZCVXl4RFFVRkRReXhKUVVGSkxFTkJRVU5ETEV0QlFVc3NRMEZCUTFBc1MwRkJTeXhGUVVGRlJ5eEpRVUZKTEVsQlFVc3NSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJSWFJHTEUxQlFVMHNRMEZCUTFZc2RVSkJRWFZDTzFsQlEyaERMRU5CUVVNN096dFpRVVZOUXl4SFFVRnRReXhGUVVGdVEwRXNRMEZCYlVNN2JVSkJRVEZETEZGQlFWRXNRMEZCUkVFc2JVTkJRVzFETEVOQlFVTk5MRXRCUVVzc1JVRkJSVklzVFVGQlRTeEZRVUZGVGl4elFrRkJjMElzUlVGQlJTeERRVUZETzJkQ1FVTnFSaXhGUVVGRkxFVkJRVVZCTEhOQ1FVRnpRaXhMUVVGTGMwSXNVMEZCVXl4RlFVRkZMRU5CUVVNN2IwSkJRM3BEZEVJc2MwSkJRWE5DTEVkQlFVZE5MRTFCUVUwc1EwRkJReXhEUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzI5Q1FVTnlRMEVzVFVGQlRTeEhRVUZIVVN4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dHZRa0ZEYmtKQkxFdEJRVXNzUjBGQlIxTXNWVUZCVXl4UlFVRkJMRU5CUVVNc1EwRkJSU3hGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZEZWtJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTkRMRWxCUVVrc1IwRkJSMnhDTEUxQlFVMHNSVUZEWWxBc1MwRkJTeXhIUVVGSExFTkJRVU41UWp0dlFrRkJRVUVzU1VGQlNUdG5Ra0ZCUVN4RFFVRkRMRVZCUTJSUUxFbEJRVWtzUjBGQlJ5eERRVUZETzI5Q1FVRkJMRWxCUVVrN2IwSkJRVVZzUWl4TFFVRkxPMjlDUVVGRlF5eHpRa0ZCYzBJN1owSkJRVUVzUTBGQlF5eEZRVU0xUTA4c2RVSkJRWFZDTEVkQlFVY3NSMEZCUnl4RlFVRkZWeXhSUVVGUkxFTkJRVU5ETEZOQlFWTXNRMEZCUTBNc1NVRkJTU3hEUVVGRFF5eExRVUZMTEVOQlFVTlFMRXRCUVVzc1JVRkJSVWNzU1VGQlNTeEpRVUZMTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWMFJpeE5RVUZOTEVOQlFVTldMSFZDUVVGMVFqdFpRVU5vUXl4RFFVRkRPenROT3p0RlFXNUVhMFJuUWl4VlFVRlRPMnRDUVVGNlEzcENMSFZDUVVGMVFpeEJPMU5CYzBSdVEydENMR05CUVdNc1EwRkJRMFFzUzBGQlN5eEZRVUZGTEVOQlFVTTdTVUZET1VJc1IwRkJTeXhEUVVGRGFFSXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVWb1FpeEhRVUZITEVOQlFVTXdRaXhMUVVGTExFZEJRVWNzUTBGQlF6dFZRVVZPUVN4TFFVRkxMRWRCUVVkV0xFdEJRVXNzUTBGQlJTeERRVUZETzFGQlEzSkNhRUlzUzBGQlN5eERRVUZETUVJc1MwRkJTeXhOUVVGTlF5eFZRVUZaTEdGQlFVRXNRMEZCUXp0SlFVTm9ReXhEUVVGRE8wbEJSVVFzVFVGQlRTeERRVUZETTBJc1MwRkJTenRCUVVOa0xFTkJRVU1pZlE9PSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgdG9rZW5JbmRleGVzID0gdG9rZW5JbmRleGVzRnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cnVsZU5hbWV9JHt0b2tlbkluZGV4ZXN9YCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluZGV4ZXNGcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleH0tJHtsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCgke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgO1xuXG4gIHJldHVybiB0b2tlbkluZGV4ZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgREFTSF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSF9DSEFSQUNURVIpLFxuICAgICAgICAgIGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW2xpbmVdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcbmltcG9ydCBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL2hvcml6b250YWxCcmFuY2hcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoaWxkTm9kZXNQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tQ2hpbGROb2Rlc0FuZFRva2VucyhjaGlsZE5vZGVzLCB0b2tlbnMpIHtcbiAgICBsZXQgY2hpbGROb2Rlc1BhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlUGFyc2VUcmVlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zKTtcblxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5wdXNoKGNoaWxkTm9kZVBhcnNlVHJlZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVQYXJzZVRyZWVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID0gY2hpbGROb2RlUGFyc2VUcmVlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB1bmRlZmluZWQsXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSAxO1xuXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IE1hdGgubWF4KGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKyAxLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbixcbiAgICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggLSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aDtcblxuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENoaWxkTm9kZXNQYXJzZVRyZWUsIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUuY2xvbmUoKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0TWFyZ2luV2lkdGggPSAxO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoIDwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoKSB7XG4gICAgICAgICAgY29uc3QgYm90dG9tTWFyZ2luRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggLSBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aDtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1JpZ2h0KGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcChob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBSdWxlTmFtZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gQ2hpbGROb2Rlc1BhcnNlVHJlZS5mcm9tQ2hpbGROb2Rlc0FuZFRva2VucyhjaGlsZE5vZGVzLCB0b2tlbnMpO1xuICAgIFxuICAgIGxldCBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG4gICAgXG4gICAgY29uc3QgY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBjaGlsZE5vZGVzUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICBcbiAgICBsZXQgbGVmdE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA8IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IC12ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9ICt2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlV2lkdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB3aWR0aHNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCAtIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aDtcbiAgICBcbiAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IC13aWR0aHNEaWZmZXJlbmNlO1xuICAgICAgXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gK3dpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL25vblRlcm1pbmFsTm9kZVwiO1xuXG5pbXBvcnQgeyBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXRQYXJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGJhY2t3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAobGFzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKSB7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIHNldENoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICAgIHRoaXMuY2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7XG4gIH1cbiAgXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG4gICAgICBydWxlTmFtZSA9IENsYXNzOyAvLy9cbiAgICAgIENsYXNzID0gTm9uVGVybWluYWxOb2RlOyAgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIGNoaWxkIG5vZGVzIGF0IHJ1bGUgJyR7cnVsZU5hbWV9Jy5gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHVuZGVmaW5lZCwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgfSBmcm9tIFwiLi9wYXJ0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSAoY2FsbGJhY2sgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4XTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgY29uc3QgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKHBhcnQpO1xuXG4gICAgaWYgKHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXTtcblxuICAgICAgaW5kZXgrKztcblxuICAgICAgcGFyc2VkID0gcnVsZU5hbWVQYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbG9va0FoZWFkXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGZpcnN0LCBhbGxCdXRGaXJzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldEZpcnN0UGFydCgpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdCh0aGlzLnBhcnRzKTtcblxuICAgIHJldHVybiBmaXJzdFBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0c0xlbmd0aCgpIHtcbiAgICBjb25zdCBwYXJ0c0xlbmd0aCA9IHRoaXMucGFydHMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHBhcnRzTGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsQnV0Rmlyc3RQYXJ0cygpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdFBhcnRzID0gYWxsQnV0Rmlyc3QodGhpcy5wYXJ0cyk7XG5cbiAgICByZXR1cm4gYWxsQnV0Rmlyc3RQYXJ0cztcbiAgfVxuXG4gIGFkZFBhcnQocGFydCkge1xuICAgIHRoaXMucGFydHMucHVzaChwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZzsgLy8vXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgc3RyaW5nID0gcGFydHNTdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBUZXJtaW5hbFBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFRlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRlcm1pbmFsUGFydCk7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhUZXJtaW5hbFBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzTm9uVGVybWluYWxQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vblRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc1Rlcm1pbmFsUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzVGVybWluYWxQYXJ0KCkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc05vV2hpdGVzcGFjZVBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoUGFydCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoUGFydCwgX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFRlcm1pbmFsUGFydDtcbn0oKTtcbmV4cG9ydHMuZGVmYXVsdCA9IFRlcm1pbmFsUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYSjBMM1JsY20xcGJtRnNMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJVWlhKdGFXNWhiRkJoY25RZ2UxeHVJQ0JwYzA1dmJsUmxjbTFwYm1Gc1VHRnlkQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQnViMjVVWlhKdGFXNWhiRkJoY25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ1YjI1VVpYSnRhVzVoYkZCaGNuUTdYRzRnSUgxY2JseHVJQ0JwYzFSbGNtMXBibUZzVUdGeWRDZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCMFpYSnRhVzVoYkZCaGNuUWdQU0IwY25WbE8xeHVJQ0FnSUZ4dUlDQWdJSEpsZEhWeWJpQjBaWEp0YVc1aGJGQmhjblE3WEc0Z0lIMWNibHh1SUNCcGMwNXZWMmhwZEdWemNHRmpaVkJoY25Rb0tTQjdYRzRnSUNBZ1kyOXVjM1FnYm05WGFHbDBaWE53WVdObFVHRnlkQ0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHNXZWMmhwZEdWemNHRmpaVkJoY25RN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNoUVlYSjBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIc2djbVYwZFhKdUlHNWxkeUJRWVhKMEtDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKVVpYSnRhVzVoYkZCaGNuUWlMQ0pwYzA1dmJsUmxjbTFwYm1Gc1VHRnlkQ0lzSW01dmJsUmxjbTFwYm1Gc1VHRnlkQ0lzSW1selZHVnliV2x1WVd4UVlYSjBJaXdpZEdWeWJXbHVZV3hRWVhKMElpd2lhWE5PYjFkb2FYUmxjM0JoWTJWUVlYSjBJaXdpYm05WGFHbDBaWE53WVdObFVHRnlkQ0lzSW1Oc2IyNWxJaXdpVUdGeWRDSXNJbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeUpkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ096dDVSRHQxUlRzN096czdPenM3T3pzN096czdPenRuUmpzN096czdPenM3YzBNN096czdPenRwUXpzN08ybEZPenRUT3pzN096czdPemhFTzNORE96WkVPMmxGT3pzN08zZEZPMmRGT3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN096czdPenNyUkRzN096dEpRVVZSUVN4WlFVRlpMR2xDUVVGc1FpeFJRVUZSTzJGQlFVWkJMRmxCUVZrN01rTTdPenM3V1VGREwwSkRMRWRCUVdsQ0xFVkJRV3BDUVN4RFFVRnBRanR0UWtGQmFrSkJMRkZCUVZFc1EwRkJVa0VzYVVKQlFXbENMRWRCUVVjc1EwRkJRenRuUWtGRGJrSXNSMEZCU3l4RFFVRkRReXhsUVVGbExFZEJRVWNzUzBGQlN6dG5Ra0ZGTjBJc1RVRkJUU3hEUVVGRFFTeGxRVUZsTzFsQlEzaENMRU5CUVVNN096dFpRVVZFUXl4SFFVRmpMRVZCUVdSQkxFTkJRV003YlVKQlFXUkJMRkZCUVZFc1EwRkJVa0VzWTBGQll5eEhRVUZITEVOQlFVTTdaMEpCUTJoQ0xFZEJRVXNzUTBGQlEwTXNXVUZCV1N4SFFVRkhMRWxCUVVrN1owSkJSWHBDTEUxQlFVMHNRMEZCUTBFc1dVRkJXVHRaUVVOeVFpeERRVUZET3pzN1dVRkZSRU1zUjBGQmEwSXNSVUZCYkVKQkxFTkJRV3RDTzIxQ1FVRnNRa0VzVVVGQlVTeERRVUZTUVN4clFrRkJhMElzUjBGQlJ5eERRVUZETzJkQ1FVTndRaXhIUVVGTExFTkJRVU5ETEdkQ1FVRm5RaXhIUVVGSExFdEJRVXM3WjBKQlJUbENMRTFCUVUwc1EwRkJRMEVzWjBKQlFXZENPMWxCUTNwQ0xFTkJRVU03T3p0WlFVVkVReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4RFFVRkRReXhKUVVGSkxFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnlRbTVETEVORWNVSnRRenRuUWtGQlJDeERRVUZETzJkQ1FVRkpMRTFCUVUwc1dVRkJTMFFzU1VGQlNTeHhRa0ZCU1VNc2EwSkJRV3RDTzFsQlFVY3NRMEZCUXpzN1RUczdPMnRDUVc1Q00wUlVMRmxCUVZrc1FTSjkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtjb250ZW50fVske3R5cGV9XSgke3Rva2VuSW5kZXh9KWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbiwgcGFyZW50Tm9kZSkge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7IH1cblxuICBnZXRDb250ZW50KCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTsgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB1bmRlZmluZWQsIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuLCBwYXJlbnROb2RlKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3Rlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiKSk7XG52YXIgX3Rlcm1pbmFsMSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvdGVybWluYWxcIikpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCBUZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KTtcbiAgICBmdW5jdGlvbiBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgX3RoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuVHlwZSA9PT0gdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWxOb2RlID0gX3Rlcm1pbmFsMS5kZWZhdWx0LmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHRlcm1pbmFsTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBzdHJpbmcgPSBcIltcIi5jb25jYXQodGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSwgXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihTaWduaWZpY2FudFRva2VuVHlwZVBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCwgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xufShfdGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwzUmxjbTFwYm1Gc0wzTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4UVlYSjBJR1p5YjIwZ1hDSXVMaTh1TGk5d1lYSjBMM1JsY20xcGJtRnNYQ0k3WEc1cGJYQnZjblFnVkdWeWJXbHVZV3hPYjJSbElHWnliMjBnWENJdUxpOHVMaTl1YjJSbEwzUmxjbTFwYm1Gc1hDSTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxVR0Z5ZENCbGVIUmxibVJ6SUZSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxLU0I3WEc0Z0lDQWdjM1Z3WlhJb0tUdGNiaUFnSUNCY2JpQWdJQ0IwYUdsekxuTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxJRDBnYzJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVN1hHNGdJSDFjYmx4dUlDQndZWEp6WlNodWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdiR1YwSUhCaGNuTmxaRHRjYmx4dUlDQWdJR3hsZENCMFpYSnRhVzVoYkU1dlpHVWdQU0J1ZFd4c08xeHVJQ0FnSUZ4dUlDQWdJR052Ym5OMElITmhkbVZrU1c1a1pYZ2dQU0J6ZEdGMFpTNW5aWFJUWVhabFpFbHVaR1Y0S0Nrc1hHNWNkRngwSUNBZ0lDQWdibVY0ZEZOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCemRHRjBaUzVuWlhST1pYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJpZ3BMRnh1WEhSY2RGeDBYSFJjZEhOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCdVpYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJqc2dMeTh2WEc1Y2JpQWdJQ0JwWmlBb2MybG5ibWxtYVdOaGJuUlViMnRsYmlBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVZ1BTQnphV2R1YVdacFkyRnVkRlJ2YTJWdUxtZGxkRlI1Y0dVb0tUdGNibHh1SUNBZ0lDQWdhV1lnS0hOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbElEMDlQU0IwYUdsekxuTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pTQTlJRlJsY20xcGJtRnNUbTlrWlM1bWNtOXRVMmxuYm1sbWFXTmhiblJVYjJ0bGJpaHphV2R1YVdacFkyRnVkRlJ2YTJWdUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCd1lYSnpaV1FnUFNBb2RHVnliV2x1WVd4T2IyUmxJQ0U5UFNCdWRXeHNLVHRjYmx4dUlDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUc1dlpHVnpMbkIxYzJnb2RHVnliV2x1WVd4T2IyUmxLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHTmhiR3hpWVdOcklDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEJoY25ObFpDQTlJR05oYkd4aVlXTnJLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0Z3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdWIyUmxjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doY0dGeWMyVmtLU0I3WEc0Z0lDQWdJQ0J6ZEdGMFpTNWlZV05yZEhKaFkyc29jMkYyWldSSmJtUmxlQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlIQmhjbk5sWkR0Y2JpQWdmVnh1WEc0Z0lHRnpVM1J5YVc1bktDa2dlMXh1SUNBZ0lHTnZibk4wSUhOMGNtbHVaeUE5SUdCYkpIdDBhR2x6TG5OcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbGZWMWdPMXh1SUNBZ0lGeHVJQ0FnSUhKbGRIVnliaUJ6ZEhKcGJtYzdYRzRnSUgxY2JseHVJQ0JqYkc5dVpTZ3BJSHNnY21WMGRYSnVJSE4xY0dWeUxtTnNiMjVsS0ZOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbFVHRnlkQ3dnZEdocGN5NXphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaU2s3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKVGFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWQmhjblFpTENKemFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pTSXNJbkJoY25ObElpd2libTlrWlhNaUxDSnpkR0YwWlNJc0ltTmhiR3hpWVdOcklpd2ljR0Z5YzJWa0lpd2lkR1Z5YldsdVlXeE9iMlJsSWl3aWMyRjJaV1JKYm1SbGVDSXNJbWRsZEZOaGRtVmtTVzVrWlhnaUxDSnVaWGgwVTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1kbGRFNWxlSFJUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpYzJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1kbGRGUjVjR1VpTENKVVpYSnRhVzVoYkU1dlpHVWlMQ0ptY205dFUybG5ibWxtYVdOaGJuUlViMnRsYmlJc0luQjFjMmdpTENKd2IzQWlMQ0ppWVdOcmRISmhZMnNpTENKaGMxTjBjbWx1WnlJc0luTjBjbWx1WnlJc0ltTnNiMjVsSWl3aVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZXU3hIUVVGeFFpeERRVUZ5UWl4VFFVRnhRanRCUVVOeVFpeEhRVUZ4UWl4RFFVRnlRaXhWUVVGeFFqczdPenM3T3pzN096czdPenM3T3poRU8zTkRPelpFTzJsRk96czdPM2RGTzJkRk96czdPenN3UWpzN096czdPenM3T3p0VE96czdPenM3TzBzN096czdPenM3T3pzN096czdUVHQ1UkRzN096czdPenM3T3pzN096czdPM1ZDT3p0TE96czdPenQzUXpzN096czdPekpDT3pzN096czdPenR4UmpzN096czdPenM3T3pzN08yMUZPenRwUkRzN096czdTVUZGZWtKQkxIZENRVUYzUWl4cFFrRkJPVUlzVVVGQlVUdHhSRHM3WVVGQlJrRXNkMEpCUVhkQ0xFTkJReTlDUXl4dlFrRkJiMEk3ZFVRN08ybERRMDVzUXl4RFJFOVpPMk5CUlVoQkxHOUNRVUZ2UWl4SFFVRkhRU3h2UWtGQmIwSXNRMEZCUXpzN096czdXVUZIYmtSRExFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNTMEZCU3l4RlFVRkZReXhSUVVGUkxFVkJRVVVzUTBGQlF6dG5Ra0ZETjBJc1IwRkJSeXhEUVVGRFF5eE5RVUZOTzJkQ1FVVldMRWRCUVVjc1EwRkJRME1zV1VGQldTeEhRVUZITEVsQlFVazdaMEpCUlhaQ0xFZEJRVXNzUTBGQlEwTXNWVUZCVlN4SFFVRkhTaXhMUVVGTExFTkJRVU5MTEdGQlFXRXNTVUZEYkVORExHOUNRVUZ2UWl4SFFVRkhUaXhMUVVGTExFTkJRVU5QTEhWQ1FVRjFRaXhKUVVOMlJFTXNaMEpCUVdkQ0xFZEJRVWRHTEc5Q1FVRnZRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVTNReXhGUVVGRkxFVkJRVVZGTEdkQ1FVRm5RaXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzI5Q1FVTTVRaXhIUVVGTExFTkJRVU5ZTEc5Q1FVRnZRaXhIUVVGSFZ5eG5Ra0ZCWjBJc1EwRkJRME1zVDBGQlR6dHZRa0ZGY2tRc1JVRkJSU3hGUVVGRldpeHZRa0ZCYjBJc1MwRkJTeXhKUVVGSkxFTkJRVU5CTEc5Q1FVRnZRaXhGUVVGRkxFTkJRVU03ZDBKQlEzWkVUU3haUVVGWkxFZEJRVWRQTEZWQlFWa3NVMEZCUTBNc2IwSkJRVzlDTEVOQlFVTklMR2RDUVVGblFpeERRVUZETEVOQlFVTTdiMEpCUTNKRkxFTkJRVU03WjBKQlEwZ3NRMEZCUXp0blFrRkZSRTRzVFVGQlRTeEhRVUZKUXl4WlFVRlpMRXRCUVVzc1NVRkJTU3hCUVVGRExFTkJRVU03WjBKQlJXcERMRVZCUVVVc1JVRkJSVVFzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFoSUxFdEJRVXNzUTBGQlEyRXNTVUZCU1N4RFFVRkRWQ3haUVVGWkxFTkJRVU1zUTBGQlF6dHZRa0ZGZWtJc1JVRkJSU3hGUVVGRlJpeFJRVUZSTEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN2QwSkJRM1JDUXl4TlFVRk5MRWRCUVVkRUxGRkJRVkVzUlVGQlJTeERRVUZETzNkQ1FVVndRaXhGUVVGRkxFZEJRVWRETEUxQlFVMHNSVUZCUlN4RFFVRkRPelJDUVVOYVNDeExRVUZMTEVOQlFVTmpMRWRCUVVjc1JVRkJSU3hEUVVGRE8zZENRVU5rTEVOQlFVTTdiMEpCUTBnc1EwRkJRenRuUWtGRFNDeERRVUZETzJkQ1FVVkVMRVZCUVVVc1IwRkJSMWdzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFwR0xFdEJRVXNzUTBGQlEyTXNVMEZCVXl4RFFVRkRWaXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VJc1EwRkJRenRuUWtGRlJDeE5RVUZOTEVOQlFVTkdMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkdFc1IwRkJVU3hGUVVGU1FTeERRVUZSTzIxQ1FVRlNRU3hSUVVGUkxFTkJRVkpCTEZGQlFWRXNSMEZCUnl4RFFVRkRPMmRDUVVOV0xFZEJRVXNzUTBGQlEwTXNUVUZCVFN4SFFVRkpMRU5CUVVNc1IwRkJORUlzVFVGQlF5eERRVUV6UWl4SlFVRkpMRU5CUVVOdVFpeHZRa0ZCYjBJc1JVRkJReXhEUVVGRE8yZENRVVU1UXl4TlFVRk5MRU5CUVVOdFFpeE5RVUZOTzFsQlEyWXNRMEZCUXpzN08xbEJSVVJETEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFZEJRVWNzUTBGQlF6dG5Ra0ZCUXl4TlFVRk5MSE5DUVc1RVIzSkNMSGRDUVVGM1FpeGhRVzFFY0VKeFFpeERRVUZMTEZGQlFWZ3NTVUZCU3l4aFFVRlBja0lzZDBKQlFYZENMRVZCUVVVc1NVRkJTU3hEUVVGRFF5eHZRa0ZCYjBJN1dVRkJSeXhEUVVGRE96dE5PenRGUVc1RWFFTnhRaXhUUVVGWk8ydENRVUUzUTNSQ0xIZENRVUYzUWl4QkluMD0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5jb25zdCB7IG5hbWVUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlID0gbmFtZVR5cGUsICAvLy9cbiAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTmFtZVJ1bGVOYW1lID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgUGFydFJ1bGVOYW1lID0gXCJwYXJ0XCI7XG5leHBvcnQgY29uc3QgUnVsZVJ1bGVOYW1lID0gXCJydWxlXCI7XG5leHBvcnQgY29uc3QgRXJyb3JSdWxlTmFtZSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBSdWxlTmFtZVJ1bGVOYW1lID0gXCJydWxlTmFtZVwiO1xuZXhwb3J0IGNvbnN0IERvY3VtZW50UnVsZU5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgY29uc3QgV2lsZGNhcmRSdWxlTmFtZSA9IFwid2lsZGNhcmRcIjtcbmV4cG9ydCBjb25zdCBFbmRPZkxpbmVSdWxlTmFtZSA9IFwiZW5kT2ZMaW5lXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvblJ1bGVOYW1lID0gXCJkZWZpbml0aW9uXCI7XG5leHBvcnQgY29uc3QgUXVhbnRpZmllclJ1bGVOYW1lID0gXCJxdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvbnNSdWxlTmFtZSA9IFwiZGVmaW5pdGlvbnNcIjtcbmV4cG9ydCBjb25zdCBUZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwidGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgVGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFwidGVybWluYWxTeW1ib2xcIjtcbmV4cG9ydCBjb25zdCBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwibm9uVGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSA9IFwibm9XaGl0ZXNwYWNlUGFydFwiO1xuZXhwb3J0IGNvbnN0IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSBcImxvb2tBaGVhZE1vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFwicmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IFwib3B0aW9uYWxRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvbmVPck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwiemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gXCJzaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IE5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOYW1lQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBOb25UZXJtaW5hbFBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIE5vblRlcm1pbmFsUGFydCh0eXBlKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb25UZXJtaW5hbFBhcnQpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoTm9uVGVybWluYWxQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRUeXBlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNOb25UZXJtaW5hbFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9uVGVybWluYWxQYXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNUZXJtaW5hbFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGVybWluYWxQYXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzUnVsZU5hbWVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lUGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKFBhcnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBfY29uc3RydWN0KFBhcnQsIF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBOb25UZXJtaW5hbFBhcnQ7XG59KCk7XG5leHBvcnRzLmRlZmF1bHQgPSBOb25UZXJtaW5hbFBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWEowTDI1dmJsUmxjbTFwYm1Gc0xtcHpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5Qk9iMjVVWlhKdGFXNWhiRkJoY25RZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loMGVYQmxLU0I3WEc0Z0lDQWdkR2hwY3k1MGVYQmxJRDBnZEhsd1pUc2dJRnh1SUNCOVhHNGdJRnh1SUNCblpYUlVlWEJsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuUjVjR1U3WEc0Z0lIMWNibHh1SUNCcGMwNXZibFJsY20xcGJtRnNVR0Z5ZENncElIdGNiaUFnSUNCamIyNXpkQ0J1YjI1VVpYSnRhVzVoYkZCaGNuUWdQU0IwY25WbE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc1dmJsUmxjbTFwYm1Gc1VHRnlkRHRjYmlBZ2ZWeHVYRzRnSUdselZHVnliV2x1WVd4UVlYSjBLQ2tnZTF4dUlDQWdJR052Ym5OMElIUmxjbTFwYm1Gc1VHRnlkQ0E5SUdaaGJITmxPMXh1SUNBZ0lGeHVJQ0FnSUhKbGRIVnliaUIwWlhKdGFXNWhiRkJoY25RN1hHNGdJSDFjYmx4dUlDQnBjMUoxYkdWT1lXMWxVR0Z5ZENncElIdGNiaUFnSUNCamIyNXpkQ0J5ZFd4bFRtRnRaVkJoY25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5ZFd4bFRtRnRaVkJoY25RN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNoUVlYSjBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIc2djbVYwZFhKdUlHNWxkeUJRWVhKMEtDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKT2IyNVVaWEp0YVc1aGJGQmhjblFpTENKMGVYQmxJaXdpWjJWMFZIbHdaU0lzSW1selRtOXVWR1Z5YldsdVlXeFFZWEowSWl3aWJtOXVWR1Z5YldsdVlXeFFZWEowSWl3aWFYTlVaWEp0YVc1aGJGQmhjblFpTENKMFpYSnRhVzVoYkZCaGNuUWlMQ0pwYzFKMWJHVk9ZVzFsVUdGeWRDSXNJbkoxYkdWT1lXMWxVR0Z5ZENJc0ltTnNiMjVsSWl3aVVHRnlkQ0lzSW5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPenQ1UkR0MVJUczdPenM3T3pzN096czdPenM3T3p0blJqczdPenM3T3pzN2MwTTdPenM3T3p0cFF6czdPMmxGT3p0VE96czdPenM3T3poRU8zTkRPelpFTzJsRk96czdPM2RGTzJkRk96czdPenM3T3pzN096dDFRanM3U3pzN096czdPenM3T3pzclJEczdPenRKUVVWUlFTeGxRVUZsTEdsQ1FVRnlRaXhSUVVGUk8yRkJRVVpCTEdWQlFXVXNRMEZEZEVKRExFbEJRVWs3T0VNN1VVRkRaQ3hKUVVGSkxFTkJRVU5CTEVsQlFVa3NSMEZCUjBFc1NVRkJTU3hEUVVGRE96czdPMWxCUjI1Q1F5eEhRVUZQTEVWQlFWQkJMRU5CUVU4N2JVSkJRVkJCTEZGQlFWRXNRMEZCVWtFc1QwRkJUeXhIUVVGSExFTkJRVU03WjBKQlExUXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRMFFzU1VGQlNUdFpRVU5zUWl4RFFVRkRPenM3V1VGRlJFVXNSMEZCYVVJc1JVRkJha0pCTEVOQlFXbENPMjFDUVVGcVFrRXNVVUZCVVN4RFFVRlNRU3hwUWtGQmFVSXNSMEZCUnl4RFFVRkRPMmRDUVVOdVFpeEhRVUZMTEVOQlFVTkRMR1ZCUVdVc1IwRkJSeXhKUVVGSk8yZENRVVUxUWl4TlFVRk5MRU5CUVVOQkxHVkJRV1U3V1VGRGVFSXNRMEZCUXpzN08xbEJSVVJETEVkQlFXTXNSVUZCWkVFc1EwRkJZenR0UWtGQlpFRXNVVUZCVVN4RFFVRlNRU3hqUVVGakxFZEJRVWNzUTBGQlF6dG5Ra0ZEYUVJc1IwRkJTeXhEUVVGRFF5eFpRVUZaTEVkQlFVY3NTMEZCU3p0blFrRkZNVUlzVFVGQlRTeERRVUZEUVN4WlFVRlpPMWxCUTNKQ0xFTkJRVU03T3p0WlFVVkVReXhIUVVGakxFVkJRV1JCTEVOQlFXTTdiVUpCUVdSQkxGRkJRVkVzUTBGQlVrRXNZMEZCWXl4SFFVRkhMRU5CUVVNN1owSkJRMmhDTEVkQlFVc3NRMEZCUTBNc1dVRkJXU3hIUVVGSExFdEJRVXM3WjBKQlJURkNMRTFCUVUwc1EwRkJRMEVzV1VGQldUdFpRVU55UWl4RFFVRkRPenM3V1VGRlJFTXNSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUTBGQlEwTXNTVUZCU1N4RlFVRjVRaXhEUVVGRE8yZENRVUY0UWl4SFFVRkhReXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORE4wSnVReXhEUkRaQ2JVTTdaMEpCUVVRc1EwRkJRenRuUWtGQlNTeE5RVUZOTEZsQlFVdEVMRWxCUVVrc2NVSkJRVWxETEd0Q1FVRnJRanRaUVVGSExFTkJRVU03TzAwN096dHJRa0V6UWpORVdDeGxRVUZsTEVFaWZRPT0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBSdWxlTmFtZVBhcnRUeXBlID0gXCJydWxlTmFtZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBPcHRpb25hbFBhcnRQYXJ0VHlwZSA9IFwib3B0aW9uYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwib25lT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwiemVyb09yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFJ1bGVOYW1lUGFydFR5cGUsXG4gIE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICBDaG9pY2VPZlBhcnRzUGFydFR5cGUsXG4gIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfb2NjYW1MZXhlcnMgPSByZXF1aXJlKFwib2NjYW0tbGV4ZXJzXCIpO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG52YXIgX3BhcnRUeXBlcyA9IHJlcXVpcmUoXCIuLi8uLi9wYXJ0VHlwZXNcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBxdWVzdGlvbk1hcmsgPSBfb2NjYW1MZXhlcnMuc3BlY2lhbFN5bWJvbHMucXVlc3Rpb25NYXJrO1xudmFyIE9wdGlvbmFsUGFydFBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsUGFydCkge1xuICAgIF9pbmhlcml0cyhPcHRpb25hbFBhcnRQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoT3B0aW9uYWxQYXJ0UGFydCk7XG4gICAgZnVuY3Rpb24gT3B0aW9uYWxQYXJ0UGFydChwYXJ0KSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPcHRpb25hbFBhcnRQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICB2YXIgdHlwZSA9IF9wYXJ0VHlwZXMuT3B0aW9uYWxQYXJ0UGFydFR5cGU7IC8vL1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0ID0gcGFydDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoT3B0aW9uYWxQYXJ0UGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0UGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhcnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnQgPSB0aGlzLmdldFBhcnQoKSwgcGFydE5vZGVzID0gW10sIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfYXJyYXkpLnB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImFzU3RyaW5nXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYXNTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yU3RyaW5nID0gcXVlc3Rpb25NYXJrLCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksIHN0cmluZyA9IFwiXCIuY29uY2F0KHBhcnRTdHJpbmcpLmNvbmNhdChvcGVyYXRvclN0cmluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKE9wdGlvbmFsUGFydFBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIE9wdGlvbmFsUGFydFBhcnQsIHRoaXMucGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gT3B0aW9uYWxQYXJ0UGFydDtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gT3B0aW9uYWxQYXJ0UGFydDtcbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHBhcnNlZDtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICBwYXJzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5d1lYSjBMMjV2YmxSbGNtMXBibUZzTDI5d2RHbHZibUZzVUdGeWRDNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKY0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dWFXMXdiM0owSUhzZ2MzQmxZMmxoYkZONWJXSnZiSE1nZlNCbWNtOXRJRndpYjJOallXMHRiR1Y0WlhKelhDSTdYRzVjYm1sdGNHOXlkQ0JPYjI1VVpYSnRhVzVoYkZCaGNuUWdabkp2YlNCY0lpNHVMeTR1TDNCaGNuUXZibTl1VkdWeWJXbHVZV3hjSWp0Y2JseHVhVzF3YjNKMElIc2djSFZ6YUNCOUlHWnliMjBnWENJdUxpOHVMaTkxZEdsc2FYUnBaWE12WVhKeVlYbGNJanRjYm1sdGNHOXlkQ0I3SUU5d2RHbHZibUZzVUdGeWRGQmhjblJVZVhCbElIMGdabkp2YlNCY0lpNHVMeTR1TDNCaGNuUlVlWEJsYzF3aU8xeHVYRzVqYjI1emRDQjdJSEYxWlhOMGFXOXVUV0Z5YXlCOUlEMGdjM0JsWTJsaGJGTjViV0p2YkhNN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUU5d2RHbHZibUZzVUdGeWRGQmhjblFnWlhoMFpXNWtjeUJPYjI1VVpYSnRhVzVoYkZCaGNuUWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpaHdZWEowS1NCN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlNBOUlFOXdkR2x2Ym1Gc1VHRnlkRkJoY25SVWVYQmxPeUF2THk5Y2JseHVJQ0FnSUhOMWNHVnlLSFI1Y0dVcE8xeHVYRzRnSUNBZ2RHaHBjeTV3WVhKMElEMGdjR0Z5ZER0Y2JpQWdmVnh1WEc0Z0lHZGxkRkJoY25Rb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjR0Z5ZER0Y2JpQWdmVnh1WEc0Z0lIQmhjbk5sS0c1dlpHVnpMQ0J6ZEdGMFpTd2dZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQnNaWFFnY0dGeWMyVmtPMXh1WEc0Z0lDQWdZMjl1YzNRZ2NHRnlkQ0E5SUhSb2FYTXVaMlYwVUdGeWRDZ3BMRnh1SUNBZ0lDQWdJQ0FnSUhCaGNuUk9iMlJsY3lBOUlGdGRMRnh1SUNBZ0lDQWdJQ0FnSUhOaGRtVmtTVzVrWlhnZ1BTQnpkR0YwWlM1blpYUlRZWFpsWkVsdVpHVjRLQ2s3WEc1Y2JpQWdJQ0J3WVhKelpXUWdQU0J3WVhKelpWQmhjblFvY0dGeWRDd2djR0Z5ZEU1dlpHVnpMQ0J6ZEdGMFpTd2dZMkZzYkdKaFkyc3BPMXh1WEc0Z0lDQWdhV1lnS0hCaGNuTmxaQ2tnZTF4dUlDQWdJQ0FnY0hWemFDaHViMlJsY3l3Z2NHRnlkRTV2WkdWektUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JWEJoY25ObFpDa2dlMXh1SUNBZ0lDQWdjM1JoZEdVdVltRmphM1J5WVdOcktITmhkbVZrU1c1a1pYZ3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCd1lYSnpaV1E3WEc0Z0lIMWNibHh1SUNCaGMxTjBjbWx1WnlncElIdGNiaUFnSUNCamIyNXpkQ0J2Y0dWeVlYUnZjbE4wY21sdVp5QTlJSEYxWlhOMGFXOXVUV0Z5YXl3Z0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhCaGNuUlRkSEpwYm1jZ1BTQjBhR2x6TG5CaGNuUXVZWE5UZEhKcGJtY29LU3hjYmlBZ0lDQWdJQ0FnSUNCemRISnBibWNnUFNCZ0pIdHdZWEowVTNSeWFXNW5mU1I3YjNCbGNtRjBiM0pUZEhKcGJtZDlZRHRjYmx4dUlDQWdJSEpsZEhWeWJpQnpkSEpwYm1jN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNncElIc2djbVYwZFhKdUlITjFjR1Z5TG1Oc2IyNWxLRTl3ZEdsdmJtRnNVR0Z5ZEZCaGNuUXNJSFJvYVhNdWNHRnlkQ2s3SUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnY0dGeWMyVlFZWEowS0hCaGNuUXNJRzV2WkdWekxDQnpkR0YwWlN3Z1kyRnNiR0poWTJzcElIdGNiaUFnYkdWMElIQmhjbk5sWkR0Y2JseHVJQ0JwWmlBb1kyRnNiR0poWTJzZ0lUMDlJRzUxYkd3cElIdGNiaUFnSUNCd1lYSnpaV1FnUFNCallXeHNZbUZqYXlncE8xeHVYRzRnSUNBZ2FXWWdLQ0Z3WVhKelpXUXBJSHRjYmlBZ0lDQWdJSEJoY25ObFpDQTlJSEJoY25RdWNHRnljMlVvYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5azdYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lIQmhjblF1Y0dGeWMyVW9ibTlrWlhNc0lITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNWNiaUFnSUNCd1lYSnpaV1FnUFNCMGNuVmxPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSEJoY25ObFpEdGNibjFjYmlKZExDSnVZVzFsY3lJNld5SnhkV1Z6ZEdsdmJrMWhjbXNpTENKemNHVmphV0ZzVTNsdFltOXNjeUlzSWs5d2RHbHZibUZzVUdGeWRGQmhjblFpTENKd1lYSjBJaXdpZEhsd1pTSXNJazl3ZEdsdmJtRnNVR0Z5ZEZCaGNuUlVlWEJsSWl3aVoyVjBVR0Z5ZENJc0luQmhjbk5sSWl3aWJtOWtaWE1pTENKemRHRjBaU0lzSW1OaGJHeGlZV05ySWl3aWNHRnljMlZrSWl3aWNHRnlkRTV2WkdWeklpd2ljMkYyWldSSmJtUmxlQ0lzSW1kbGRGTmhkbVZrU1c1a1pYZ2lMQ0p3WVhKelpWQmhjblFpTENKd2RYTm9JaXdpWW1GamEzUnlZV05ySWl3aVlYTlRkSEpwYm1jaUxDSnZjR1Z5WVhSdmNsTjBjbWx1WnlJc0luQmhjblJUZEhKcGJtY2lMQ0p6ZEhKcGJtY2lMQ0pqYkc5dVpTSXNJazV2YmxSbGNtMXBibUZzVUdGeWRDSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDTzBGQlJXdENMRWRCUVdNc1EwRkJaQ3haUVVGak8wRkJSV3BDTEVkQlFYZENMRU5CUVhoQ0xGbEJRWGRDTzBGQlJTOUNMRWRCUVhWQ0xFTkJRWFpDTEUxQlFYVkNPMEZCUTFBc1IwRkJhVUlzUTBGQmFrSXNWVUZCYVVJN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdNRUk3T3pzN096czdPenM3VXpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096czdkME03T3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wRkJSWFJFTEVkQlFVc3NRMEZCUjBFc1dVRkJXU3hIUVVGTFF5eFpRVUZqTEdkQ1FVRXZRa1FzV1VGQldUdEpRVVZEUlN4blFrRkJaMElzYVVKQlFYUkNMRkZCUVZFN1owUTdPMkZCUVVaQkxHZENRVUZuUWl4RFFVTjJRa01zU1VGQlNUc3JRenM3VVVGRFpDeEhRVUZMTEVOQlFVTkRMRWxCUVVrc1IwRkJSME1zVlVGQmIwSXNkVUpCUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3YTBOQlJXaERSQ3hKUVVGSkxFTkRabVFzUTBSbFowSTdZMEZGVUVRc1NVRkJTU3hIUVVGSFFTeEpRVUZKTEVOQlFVTTdPenM3TzFsQlIyNUNSeXhIUVVGUExFVkJRVkJCTEVOQlFVODdiVUpCUVZCQkxGRkJRVkVzUTBGQlVrRXNUMEZCVHl4SFFVRkhMRU5CUVVNN1owSkJRMVFzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUTBnc1NVRkJTVHRaUVVOc1FpeERRVUZET3pzN1dVRkZSRWtzUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUlVGQlJTeERRVUZETzJkQ1FVTTNRaXhIUVVGSExFTkJRVU5ETEUxQlFVMDdaMEpCUlZZc1IwRkJTeXhEUVVGRFVpeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRSeXhQUVVGUExFbEJRMjVDVFN4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRMlJETEZWQlFWVXNSMEZCUjBvc1MwRkJTeXhEUVVGRFN5eGhRVUZoTzJkQ1FVVjBRMGdzVFVGQlRTeEhRVUZIU1N4VFFVRlRMRU5CUVVOYUxFbEJRVWtzUlVGQlJWTXNVMEZCVXl4RlFVRkZTQ3hMUVVGTExFVkJRVVZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMmRDUVVWeVJDeEZRVUZGTEVWQlFVVkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8zZENRVU5ZU3l4TlFVRkpMRTlCUVVOU0xFdEJRVXNzUlVGQlJVa3NVMEZCVXl4RFFVRkRMRU5CUVVNN1owSkJRM3BDTEVOQlFVTTdaMEpCUlVRc1JVRkJSU3hIUVVGSFJDeE5RVUZOTEVWQlFVVXNRMEZCUXp0dlFrRkRXa1lzUzBGQlN5eERRVUZEVVN4VFFVRlRMRU5CUVVOS0xGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTTVRaXhEUVVGRE8yZENRVVZFTEUxQlFVMHNRMEZCUTBZc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVUeXhIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzUjBGQlN5eERRVUZEUXl4alFVRmpMRWRCUVVkdVFpeFpRVUZaTEVWQlF6ZENiMElzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUTJwQ0xFbEJRVWtzUTBGQlEyVXNVVUZCVVN4SlFVTXZRa2NzVFVGQlRTeEhRVUZKTEVOQlFVRXNSVUZCWlVZc1RVRkJZeXhEUVVFelFrTXNWVUZCVlN4RlFVRnJRaXhOUVVGQkxFTkJRV1pFTEdOQlFXTTdaMEpCUlRkRExFMUJRVTBzUTBGQlEwVXNUVUZCVFR0WlFVTm1MRU5CUVVNN096dFpRVVZFUXl4SFFVRkxMRVZCUVV4QkxFTkJRVXM3YlVKQlFVeEJMRkZCUVZFc1EwRkJVa0VzUzBGQlN5eEhRVUZITEVOQlFVTTdaMEpCUVVNc1RVRkJUU3h6UWtGNlEwZHdRaXhuUWtGQlowSXNZVUY1UTFwdlFpeERRVUZMTEZGQlFWZ3NTVUZCU3l4aFFVRlBjRUlzWjBKQlFXZENMRVZCUVVVc1NVRkJTU3hEUVVGRFF5eEpRVUZKTzFsQlFVY3NRMEZCUXpzN1RUczdSVUY2UTJoQ2IwSXNXVUZCWlR0clFrRkJlRU55UWl4blFrRkJaMElzUVR0VFFUUkROVUpoTEZOQlFWTXNRMEZCUTFvc1NVRkJTU3hGUVVGRlN5eExRVUZMTEVWQlFVVkRMRXRCUVVzc1JVRkJSVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTVUZEYUVRc1IwRkJSeXhEUVVGRFF5eE5RVUZOTzBsQlJWWXNSVUZCUlN4RlFVRkZSQ3hSUVVGUkxFdEJRVXNzU1VGQlNTeEZRVUZGTEVOQlFVTTdVVUZEZEVKRExFMUJRVTBzUjBGQlIwUXNVVUZCVVN4RlFVRkZMRU5CUVVNN1VVRkZjRUlzUlVGQlJTeEhRVUZIUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRaUVVOYVFTeE5RVUZOTEVkQlFVZFNMRWxCUVVrc1EwRkJRMGtzUzBGQlN5eERRVUZEUXl4TFFVRkxMRVZCUVVWRExFdEJRVXNzUlVGQlJVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRPVU1zUTBGQlF6dEpRVU5JTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTA1UUxFbEJRVWtzUTBGQlEwa3NTMEZCU3l4RFFVRkRReXhMUVVGTExFVkJRVVZETEV0QlFVc3NSVUZCUlVNc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRmJrTkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU03U1VGRGFFSXNRMEZCUXp0SlFVVkVMRTFCUVUwc1EwRkJRMEVzVFVGQlRUdEJRVU5tTEVOQlFVTWlmUT09IiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgQ29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoQ29sbGVjdGlvbk9mUGFydHNQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ29sbGVjdGlvbk9mUGFydHNQYXJ0KTtcbiAgICBmdW5jdGlvbiBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQodHlwZSwgcGFydCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sbGVjdGlvbk9mUGFydHNQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0ID0gcGFydDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoQ29sbGVjdGlvbk9mUGFydHNQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFydCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZyhvcGVyYXRvclN0cmluZykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksIHN0cmluZyA9IFwiXCIuY29uY2F0KHBhcnRTdHJpbmcpLmNvbmNhdChvcGVyYXRvclN0cmluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoUGFydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFBhcnQsIHRoaXMucGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gQ29sbGVjdGlvbk9mUGFydHNQYXJ0O1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwyNXZibFJsY20xcGJtRnNMMk52Ykd4bFkzUnBiMjVQWmxCaGNuUnpMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ1RtOXVWR1Z5YldsdVlXeFFZWEowSUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowTDI1dmJsUmxjbTFwYm1Gc1hDSTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklFTnZiR3hsWTNScGIyNVBabEJoY25SelVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIUjVjR1VzSUhCaGNuUXBJSHRjYmlBZ0lDQnpkWEJsY2loMGVYQmxLVHRjYmx4dUlDQWdJSFJvYVhNdWNHRnlkQ0E5SUhCaGNuUTdYRzRnSUgxY2JseHVJQ0JuWlhSUVlYSjBLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5CaGNuUTdYRzRnSUgxY2JpQWdYRzRnSUdGelUzUnlhVzVuS0c5d1pYSmhkRzl5VTNSeWFXNW5LU0I3WEc0Z0lDQWdZMjl1YzNRZ2NHRnlkRk4wY21sdVp5QTlJSFJvYVhNdWNHRnlkQzVoYzFOMGNtbHVaeWdwTEZ4dUlDQWdJQ0FnSUNBZ0lITjBjbWx1WnlBOUlHQWtlM0JoY25SVGRISnBibWQ5Skh0dmNHVnlZWFJ2Y2xOMGNtbHVaMzFnTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE4wY21sdVp6dGNiaUFnZlZ4dVhHNGdJR05zYjI1bEtGQmhjblFwSUhzZ2NtVjBkWEp1SUhOMWNHVnlMbU5zYjI1bEtGQmhjblFzSUhSb2FYTXVjR0Z5ZENrN0lIMWNibjFjYmlKZExDSnVZVzFsY3lJNld5SkRiMnhzWldOMGFXOXVUMlpRWVhKMGMxQmhjblFpTENKMGVYQmxJaXdpY0dGeWRDSXNJbWRsZEZCaGNuUWlMQ0poYzFOMGNtbHVaeUlzSW05d1pYSmhkRzl5VTNSeWFXNW5JaXdpY0dGeWRGTjBjbWx1WnlJc0luTjBjbWx1WnlJc0ltTnNiMjVsSWl3aVVHRnlkQ0lzSWs1dmJsUmxjbTFwYm1Gc1VHRnlkQ0pkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ08wRkJSV1VzUjBGQmQwSXNRMEZCZUVJc1dVRkJkMEk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN01FSTdPenM3T3pzN096czdVenM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN2QwTTdPenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJTOUNRU3h4UWtGQmNVSXNhVUpCUVROQ0xGRkJRVkU3Y1VRN08yRkJRVVpCTEhGQ1FVRnhRaXhEUVVNMVFrTXNTVUZCU1N4RlFVRkZReXhKUVVGSk8yOUVPenRyUTBGRFpFUXNTVUZCU1N4RFEwNWtMRU5FVFdkQ08yTkJSVkJETEVsQlFVa3NSMEZCUjBFc1NVRkJTU3hEUVVGRE96czdPenRaUVVkdVFrTXNSMEZCVHl4RlFVRlFRU3hEUVVGUE8yMUNRVUZRUVN4UlFVRlJMRU5CUVZKQkxFOUJRVThzUjBGQlJ5eERRVUZETzJkQ1FVTlVMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU5FTEVsQlFVazdXVUZEYkVJc1EwRkJRenM3TzFsQlJVUkZMRWRCUVZFc1JVRkJVa0VzUTBGQlVUdHRRa0ZCVWtFc1VVRkJVU3hEUVVGU1FTeFJRVUZSTEVOQlFVTkRMR05CUVdNc1JVRkJSU3hEUVVGRE8yZENRVU40UWl4SFFVRkxMRU5CUVVORExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTktMRWxCUVVrc1EwRkJRMFVzVVVGQlVTeEpRVU12UWtjc1RVRkJUU3hIUVVGSkxFTkJRVUVzUlVGQlpVWXNUVUZCWXl4RFFVRXpRa01zVlVGQlZTeEZRVUZyUWl4TlFVRkJMRU5CUVdaRUxHTkJRV003WjBKQlJUZERMRTFCUVUwc1EwRkJRMFVzVFVGQlRUdFpRVU5tTEVOQlFVTTdPenRaUVVWRVF5eEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVXhCTEZGQlFWRXNRMEZCVWtFc1MwRkJTeXhEUVVGRFF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0blFrRkJReXhOUVVGTkxITkNRV3hDUkZRc2NVSkJRWEZDTEdGQmEwSmlVU3hEUVVGTExGRkJRVmdzU1VGQlN5eGhRVUZQUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRFVDeEpRVUZKTzFsQlFVY3NRMEZCUXpzN1RUczdSVUZzUWtoUkxGbEJRV1U3YTBKQlFUZERWaXh4UWtGQmNVSXNRU0o5IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUsIHBhcnQpO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5nZXRQYXJ0KCksXG4gICAgICAgICAgcGFydE5vZGVzID0gW10sXG4gICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBwYXJ0Tm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0Tm9kZXMpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IG9wZXJhdG9yU3RyaW5nID0gcGx1cywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKE9uZU9yTW9yZVBhcnRzUGFydCk7IH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4ge1xuICAgICAgbGV0IHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlLCBwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IFtdLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgcGFydE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydE5vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBvcGVyYXRvclN0cmluZyA9IGFzdGVyaXNrLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gc3VwZXIuYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoWmVyb09yTW9yZVBhcnRzUGFydCk7IH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIFF1YW50aWZpZXJSdWxlTmFtZSwgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gUnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBRdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMb29rQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgbGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzTm9kZVF1YW50aWZpZXJOb2RlLCBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYm5mXCI7XG5pbXBvcnQgeyBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2U7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKTtcblxuICAgIGlmIChsYXN0Tm9kZVF1YW50aWZpZXJOb2RlKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgICBxdWFudGlmaWVyTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpO1xuXG4gICAgICBwYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0OyAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMuc2hpZnQoKTtcblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuXG5mdW5jdGlvbiBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpIHtcbiAgY29uc3QgbGFzdE5vZGUgPSBsYXN0KG5vZGVzKSxcbiAgICAgICAgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTm9kZVF1YW50aWZpZXJOb2RlKGxhc3ROb2RlKTtcblxuICByZXR1cm4gbGFzdE5vZGVRdWFudGlmaWVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSkge1xuICBsZXQgY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xuXG4gIHN3aXRjaCAocnVsZU5hbWUpIHtcbiAgICBjYXNlIE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQ7ICAvLy9cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfb2NjYW1MZXhlcnMgPSByZXF1aXJlKFwib2NjYW0tbGV4ZXJzXCIpO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vLi4vY29uc3RhbnRzXCIpO1xudmFyIF9wYXJ0VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcGFydFR5cGVzXCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgZXhjbGFtYXRpb25NYXJrID0gX29jY2FtTGV4ZXJzLnNwZWNpYWxTeW1ib2xzLmV4Y2xhbWF0aW9uTWFyaztcbnZhciBSdWxlTmFtZVBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsUGFydCkge1xuICAgIF9pbmhlcml0cyhSdWxlTmFtZVBhcnQsIE5vblRlcm1pbmFsUGFydCk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihSdWxlTmFtZVBhcnQpO1xuICAgIGZ1bmN0aW9uIFJ1bGVOYW1lUGFydChydWxlTmFtZSkge1xuICAgICAgICB2YXIgbG9va0FoZWFkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJ1bGVOYW1lUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgdmFyIHR5cGUgPSBfcGFydFR5cGVzLlJ1bGVOYW1lUGFydFR5cGU7IC8vL1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgICAgICBfdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFJ1bGVOYW1lUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0UnVsZU5hbWVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSdWxlTmFtZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzTG9va0FoZWFkXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNMb29rQWhlYWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9va0FoZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNSdWxlTmFtZVBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVsZU5hbWVQYXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwic2V0TG9va0FoZWFkXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0TG9va0FoZWFkKGxvb2tBaGVhZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZmluZFJ1bGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kUnVsZShzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBydWxlTWFwID0gc3RhdGUuZ2V0UnVsZU1hcCgpLCBydWxlID0gcnVsZU1hcFt0aGlzLnJ1bGVOYW1lXSB8fCBudWxsOyAvLy9cbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLmZpbmRSdWxlKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBpZiAocnVsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IHJ1bGVOb2RlICE9PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgbG9va0FoZWFkU3RyaW5nID0gdGhpcy5sb29rQWhlYWQgPyBleGNsYW1hdGlvbk1hcmsgOiBfY29uc3RhbnRzLkVNUFRZX1NUUklORywgc3RyaW5nID0gXCJcIi5jb25jYXQodGhpcy5ydWxlTmFtZSkuY29uY2F0KGxvb2tBaGVhZFN0cmluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFJ1bGVOYW1lUGFydC5wcm90b3R5cGUpLCBcImNsb25lXCIsIHRoaXMpLmNhbGwodGhpcywgUnVsZU5hbWVQYXJ0LCB0aGlzLnJ1bGVOYW1lLCB0aGlzLmxvb2tBaGVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gUnVsZU5hbWVQYXJ0O1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBSdWxlTmFtZVBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwyNXZibFJsY20xcGJtRnNMM0oxYkdWT1lXMWxMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ2V5QnpjR1ZqYVdGc1UzbHRZbTlzY3lCOUlHWnliMjBnWENKdlkyTmhiUzFzWlhobGNuTmNJanRjYmx4dWFXMXdiM0owSUU1dmJsUmxjbTFwYm1Gc1VHRnlkQ0JtY205dElGd2lMaTR2TGk0dmNHRnlkQzl1YjI1VVpYSnRhVzVoYkZ3aU8xeHVYRzVwYlhCdmNuUWdleUJGVFZCVVdWOVRWRkpKVGtjZ2ZTQm1jbTl0SUZ3aUxpNHZMaTR2WTI5dWMzUmhiblJ6WENJN1hHNXBiWEJ2Y25RZ2V5QlNkV3hsVG1GdFpWQmhjblJVZVhCbElIMGdabkp2YlNCY0lpNHVMeTR1TDNCaGNuUlVlWEJsYzF3aU8xeHVYRzVqYjI1emRDQjdJR1Y0WTJ4aGJXRjBhVzl1VFdGeWF5QjlJRDBnYzNCbFkybGhiRk41YldKdmJITTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGSjFiR1ZPWVcxbFVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtISjFiR1ZPWVcxbExDQnNiMjlyUVdobFlXUWdQU0JtWVd4elpTa2dlMXh1SUNBZ0lHTnZibk4wSUhSNWNHVWdQU0JTZFd4bFRtRnRaVkJoY25SVWVYQmxPeUF2THk5Y2JseHVJQ0FnSUhOMWNHVnlLSFI1Y0dVcE8xeHVYRzRnSUNBZ2RHaHBjeTV5ZFd4bFRtRnRaU0E5SUhKMWJHVk9ZVzFsTzF4dVhHNGdJQ0FnZEdocGN5NXNiMjlyUVdobFlXUWdQU0JzYjI5clFXaGxZV1E3WEc0Z0lIMWNiaUFnWEc0Z0lHZGxkRkoxYkdWT1lXMWxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5KMWJHVk9ZVzFsTzF4dUlDQjlYRzVjYmlBZ2FYTk1iMjlyUVdobFlXUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11Ykc5dmEwRm9aV0ZrTzF4dUlDQjlYRzVjYmlBZ2FYTlNkV3hsVG1GdFpWQmhjblFvS1NCN1hHNGdJQ0FnWTI5dWMzUWdjblZzWlU1aGJXVlFZWEowSUQwZ2RISjFaVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnlkV3hsVG1GdFpWQmhjblE3WEc0Z0lIMWNibHh1SUNCelpYUk1iMjlyUVdobFlXUW9iRzl2YTBGb1pXRmtLU0I3WEc0Z0lDQWdkR2hwY3k1c2IyOXJRV2hsWVdRZ1BTQnNiMjlyUVdobFlXUTdYRzRnSUgxY2JseHVJQ0JtYVc1a1VuVnNaU2h6ZEdGMFpTa2dlMXh1SUNBZ0lHTnZibk4wSUhKMWJHVk5ZWEFnUFNCemRHRjBaUzVuWlhSU2RXeGxUV0Z3S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdjblZzWlNBOUlISjFiR1ZOWVhCYmRHaHBjeTV5ZFd4bFRtRnRaVjBnZkh3Z2JuVnNiRHNnSUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhKMWJHVTdYRzRnSUgxY2JseHVJQ0J3WVhKelpTaHViMlJsY3l3Z2MzUmhkR1VzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnYkdWMElIQmhjbk5sWkR0Y2JseHVJQ0FnSUdOdmJuTjBJSEoxYkdVZ1BTQjBhR2x6TG1acGJtUlNkV3hsS0hOMFlYUmxLVHRjYmx4dUlDQWdJR2xtSUNoeWRXeGxJRDA5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0J3WVhKelpXUWdQU0JtWVd4elpUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjblZzWlU1dlpHVWdQU0J5ZFd4bExuQmhjbk5sS0hOMFlYUmxMQ0JqWVd4c1ltRmpheWs3WEc1Y2JpQWdJQ0FnSUhCaGNuTmxaQ0E5SUNoeWRXeGxUbTlrWlNBaFBUMGdiblZzYkNrN1hHNWNiaUFnSUNBZ0lHbG1JQ2h3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnYm05a1pYTXVjSFZ6YUNoeWRXeGxUbTlrWlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSEJoY25ObFpEdGNiaUFnZlZ4dVhHNGdJR0Z6VTNSeWFXNW5LQ2tnZTF4dUlDQWdJR052Ym5OMElHeHZiMnRCYUdWaFpGTjBjbWx1WnlBOUlIUm9hWE11Ykc5dmEwRm9aV0ZrSUQ5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Y0WTJ4aGJXRjBhVzl1VFdGeWF5QTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFVk5VRlJaWDFOVVVrbE9SeXhjYmlBZ0lDQWdJQ0FnSUNCemRISnBibWNnUFNCZ0pIdDBhR2x6TG5KMWJHVk9ZVzFsZlNSN2JHOXZhMEZvWldGa1UzUnlhVzVuZldBN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnWTJ4dmJtVW9LU0I3SUhKbGRIVnliaUJ6ZFhCbGNpNWpiRzl1WlNoU2RXeGxUbUZ0WlZCaGNuUXNJSFJvYVhNdWNuVnNaVTVoYldVc0lIUm9hWE11Ykc5dmEwRm9aV0ZrS1RzZ2ZWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYkltVjRZMnhoYldGMGFXOXVUV0Z5YXlJc0luTndaV05wWVd4VGVXMWliMnh6SWl3aVVuVnNaVTVoYldWUVlYSjBJaXdpY25Wc1pVNWhiV1VpTENKc2IyOXJRV2hsWVdRaUxDSjBlWEJsSWl3aVVuVnNaVTVoYldWUVlYSjBWSGx3WlNJc0ltZGxkRkoxYkdWT1lXMWxJaXdpYVhOTWIyOXJRV2hsWVdRaUxDSnBjMUoxYkdWT1lXMWxVR0Z5ZENJc0luSjFiR1ZPWVcxbFVHRnlkQ0lzSW5ObGRFeHZiMnRCYUdWaFpDSXNJbVpwYm1SU2RXeGxJaXdpYzNSaGRHVWlMQ0p5ZFd4bFRXRndJaXdpWjJWMFVuVnNaVTFoY0NJc0luSjFiR1VpTENKd1lYSnpaU0lzSW01dlpHVnpJaXdpWTJGc2JHSmhZMnNpTENKd1lYSnpaV1FpTENKeWRXeGxUbTlrWlNJc0luQjFjMmdpTENKaGMxTjBjbWx1WnlJc0lteHZiMnRCYUdWaFpGTjBjbWx1WnlJc0lrVk5VRlJaWDFOVVVrbE9SeUlzSW5OMGNtbHVaeUlzSW1Oc2IyNWxJaXdpVG05dVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZhMElzUjBGQll5eERRVUZrTEZsQlFXTTdRVUZGYWtJc1IwRkJkMElzUTBGQmVFSXNXVUZCZDBJN1FVRkZka0lzUjBGQmFVSXNRMEZCYWtJc1ZVRkJhVUk3UVVGRFlpeEhRVUZwUWl4RFFVRnFRaXhWUVVGcFFqczdPenM3T3pzN096czdPenM3T3poRU8zTkRPelpFTzJsRk96czdPM2RGTzJkRk96czdPenN3UWpzN096czdPenM3T3p0VE96czdPenM3TzBzN096czdPenM3T3pzN096czdUVHQ1UkRzN096czdPenM3T3pzN096czdPM1ZDT3p0TE96czdPenQzUXpzN096czdPekpDT3pzN096czdPenR4UmpzN096czdPenM3T3pzN08yMUZPenRwUkRzN096czdRVUZGYkVRc1IwRkJTeXhEUVVGSFFTeGxRVUZsTEVkQlFVdERMRmxCUVdNc1owSkJRV3hEUkN4bFFVRmxPMGxCUlVaRkxGbEJRVmtzYVVKQlFXeENMRkZCUVZFN05FTTdPMkZCUVVaQkxGbEJRVmtzUTBGRGJrSkRMRkZCUVZFN1dVRkJSVU1zVTBGQlV5eHZSVUZCUnl4TFFVRkxPekpET3p0UlFVTnlReXhIUVVGTExFTkJRVU5ETEVsQlFVa3NSMEZCUjBNc1ZVRkJaMElzYlVKQlFVVXNSVUZCUnl4QlFVRklMRU5CUVVjN2EwTkJSVFZDUkN4SlFVRkpMRU5EWm1Rc1EwUmxaMEk3WTBGRlVFWXNVVUZCVVN4SFFVRkhRU3hSUVVGUkxFTkJRVU03WTBGRmNFSkRMRk5CUVZNc1IwRkJSMEVzVTBGQlV5eERRVUZET3pzN096dFpRVWMzUWtjc1IwRkJWeXhGUVVGWVFTeERRVUZYTzIxQ1FVRllRU3hSUVVGUkxFTkJRVkpCTEZkQlFWY3NSMEZCUnl4RFFVRkRPMmRDUVVOaUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTktMRkZCUVZFN1dVRkRkRUlzUTBGQlF6czdPMWxCUlVSTExFZEJRVmNzUlVGQldFRXNRMEZCVnp0dFFrRkJXRUVzVVVGQlVTeERRVUZTUVN4WFFVRlhMRWRCUVVjc1EwRkJRenRuUWtGRFlpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRTaXhUUVVGVE8xbEJRM1pDTEVOQlFVTTdPenRaUVVWRVN5eEhRVUZqTEVWQlFXUkJMRU5CUVdNN2JVSkJRV1JCTEZGQlFWRXNRMEZCVWtFc1kwRkJZeXhIUVVGSExFTkJRVU03WjBKQlEyaENMRWRCUVVzc1EwRkJRME1zV1VGQldTeEhRVUZITEVsQlFVazdaMEpCUlhwQ0xFMUJRVTBzUTBGQlEwRXNXVUZCV1R0WlFVTnlRaXhEUVVGRE96czdXVUZGUkVNc1IwRkJXU3hGUVVGYVFTeERRVUZaTzIxQ1FVRmFRU3hSUVVGUkxFTkJRVkpCTEZsQlFWa3NRMEZCUTFBc1UwRkJVeXhGUVVGRkxFTkJRVU03WjBKQlEzWkNMRWxCUVVrc1EwRkJRMEVzVTBGQlV5eEhRVUZIUVN4VFFVRlRMRU5CUVVNN1dVRkROMElzUTBGQlF6czdPMWxCUlVSUkxFZEJRVkVzUlVGQlVrRXNRMEZCVVR0dFFrRkJVa0VzVVVGQlVTeERRVUZTUVN4UlFVRlJMRU5CUVVORExFdEJRVXNzUlVGQlJTeERRVUZETzJkQ1FVTm1MRWRCUVVzc1EwRkJRME1zVDBGQlR5eEhRVUZIUkN4TFFVRkxMRU5CUVVORkxGVkJRVlVzU1VGRE1VSkRMRWxCUVVrc1IwRkJSMFlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUTFnc1VVRkJVU3hMUVVGTExFbEJRVWtzUlVGQlJ5eEZRVUZITEVGQlFVZ3NRMEZCUnp0blFrRkZha1FzVFVGQlRTeERRVUZEWVN4SlFVRkpPMWxCUTJJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVVzc1JVRkJURUVzUTBGQlN6dHRRa0ZCVEVFc1VVRkJVU3hEUVVGU1FTeExRVUZMTEVOQlFVTkRMRXRCUVVzc1JVRkJSVXdzUzBGQlN5eEZRVUZGVFN4UlFVRlJMRVZCUVVVc1EwRkJRenRuUWtGRE4wSXNSMEZCUnl4RFFVRkRReXhOUVVGTk8yZENRVVZXTEVkQlFVc3NRMEZCUTBvc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlEwb3NVVUZCVVN4RFFVRkRReXhMUVVGTE8yZENRVVZvUXl4RlFVRkZMRVZCUVVWSExFbEJRVWtzUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0dlFrRkRiRUpKTEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNN1owSkJRMnBDTEVOQlFVTXNUVUZCVFN4RFFVRkRPMjlDUVVOT0xFZEJRVXNzUTBGQlEwTXNVVUZCVVN4SFFVRkhUQ3hKUVVGSkxFTkJRVU5ETEV0QlFVc3NRMEZCUTBvc1MwRkJTeXhGUVVGRlRTeFJRVUZSTzI5Q1FVVXpRME1zVFVGQlRTeEhRVUZKUXl4UlFVRlJMRXRCUVVzc1NVRkJTU3hCUVVGRExFTkJRVU03YjBKQlJUZENMRVZCUVVVc1JVRkJSVVFzVFVGQlRTeEZRVUZGTEVOQlFVTTdkMEpCUTFoR0xFdEJRVXNzUTBGQlEwa3NTVUZCU1N4RFFVRkRSQ3hSUVVGUkxFTkJRVU1zUTBGQlF6dHZRa0ZEZGtJc1EwRkJRenRuUWtGRFNDeERRVUZETzJkQ1FVVkVMRTFCUVUwc1EwRkJRMFFzVFVGQlRUdFpRVU5tTEVOQlFVTTdPenRaUVVWRVJ5eEhRVUZSTEVWQlFWSkJMRU5CUVZFN2JVSkJRVkpCTEZGQlFWRXNRMEZCVWtFc1VVRkJVU3hIUVVGSExFTkJRVU03WjBKQlExWXNSMEZCU3l4RFFVRkRReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZEY0VJc1UwRkJVeXhIUVVOYVNpeGxRVUZsTEVkQlEySjVRaXhWUVVGWkxHVkJRMnhEUXl4TlFVRk5MRWRCUVVrc1EwRkJRU3hGUVVGclFrWXNUVUZCWlN4RFFVRXZRaXhKUVVGSkxFTkJRVU55UWl4UlFVRlJMRVZCUVcxQ0xFMUJRVUVzUTBGQmFFSnhRaXhsUVVGbE8yZENRVVZxUkN4TlFVRk5MRU5CUVVORkxFMUJRVTA3V1VGRFppeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1IwRkJSeXhEUVVGRE8yZENRVUZETEUxQlFVMHNjMEpCYWtWSGVrSXNXVUZCV1N4aFFXbEZVbmxDTEVOQlFVc3NVVUZCV0N4SlFVRkxMR0ZCUVU5NlFpeFpRVUZaTEVWQlFVVXNTVUZCU1N4RFFVRkRReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZEUXl4VFFVRlRPMWxCUVVjc1EwRkJRenM3VFRzN1JVRnFSWEJEZDBJc1dVRkJaVHRyUWtGQmNFTXhRaXhaUVVGWkxFRWlmUT09IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBUZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChub25UZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcGFydFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lLCBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHRoaXJkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZShSdWxlKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsTm9kZSxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5hbWVCTkZOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUJORk5vZGUuZ2V0TmFtZSgpO1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIFxuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICB0aGlyZENoaWxkTm9kZSA9IHRoaXJkKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zTm9kZSA9IHRoaXJkQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc05vZGUuZ2VuZXJhdGVEZWZpbml0aW9ucygpO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3Rlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiKSk7XG52YXIgX3Rlcm1pbmFsMSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvdGVybWluYWxcIikpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgVGVybWluYWxTeW1ib2xQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoVGVybWluYWxTeW1ib2xQYXJ0LCBUZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoVGVybWluYWxTeW1ib2xQYXJ0KTtcbiAgICBmdW5jdGlvbiBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGVybWluYWxTeW1ib2xQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICBfdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoVGVybWluYWxTeW1ib2xQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMuY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWxOb2RlID0gX3Rlcm1pbmFsMS5kZWZhdWx0LmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHRlcm1pbmFsTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLCBzdHJpbmcgPSBcIlxcXCJcIi5jb25jYXQoY29udGVudCwgXCJcXFwiXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihUZXJtaW5hbFN5bWJvbFBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFRlcm1pbmFsU3ltYm9sUGFydCwgdGhpcy5jb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBUZXJtaW5hbFN5bWJvbFBhcnQ7XG59KF90ZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFRlcm1pbmFsU3ltYm9sUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDNSbGNtMXBibUZzTDNSbGNtMXBibUZzVTNsdFltOXNMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4UVlYSjBJR1p5YjIwZ1hDSXVMaTh1TGk5d1lYSjBMM1JsY20xcGJtRnNYQ0k3WEc1cGJYQnZjblFnVkdWeWJXbHVZV3hPYjJSbElHWnliMjBnWENJdUxpOHVMaTl1YjJSbEwzUmxjbTFwYm1Gc1hDSTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGUmxjbTFwYm1Gc1UzbHRZbTlzVUdGeWRDQmxlSFJsYm1SeklGUmxjbTFwYm1Gc1VHRnlkQ0I3WEc0Z0lHTnZibk4wY25WamRHOXlLR052Ym5SbGJuUXBJSHRjYmlBZ0lDQnpkWEJsY2lncE8xeHVJQ0FnSUZ4dUlDQWdJSFJvYVhNdVkyOXVkR1Z1ZENBOUlHTnZiblJsYm5RN1hHNGdJSDFjYmx4dUlDQndZWEp6WlNodWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdiR1YwSUhCaGNuTmxaRHRjYmx4dUlDQWdJR3hsZENCMFpYSnRhVzVoYkU1dlpHVWdQU0J1ZFd4c08xeHVJQ0FnSUZ4dUlDQWdJR052Ym5OMElITmhkbVZrU1c1a1pYZ2dQU0J6ZEdGMFpTNW5aWFJUWVhabFpFbHVaR1Y0S0Nrc1hHNWNkRngwSUNBZ0lDQWdibVY0ZEZOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCemRHRjBaUzVuWlhST1pYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJpZ3BMRnh1WEhSY2RGeDBYSFJjZEhOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCdVpYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJqc2dMeTh2WEc1Y2JpQWdJQ0JwWmlBb2MybG5ibWxtYVdOaGJuUlViMnRsYmlBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWTI5dWRHVnVkQ0E5SUhOcFoyNXBabWxqWVc1MFZHOXJaVzR1WjJWMFEyOXVkR1Z1ZENncE8xeHVYRzRnSUNBZ0lDQnBaaUFvWTI5dWRHVnVkQ0E5UFQwZ2RHaHBjeTVqYjI1MFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pTQTlJRlJsY20xcGJtRnNUbTlrWlM1bWNtOXRVMmxuYm1sbWFXTmhiblJVYjJ0bGJpaHphV2R1YVdacFkyRnVkRlJ2YTJWdUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCd1lYSnpaV1FnUFNBb2RHVnliV2x1WVd4T2IyUmxJQ0U5UFNCdWRXeHNLVHRjYmx4dUlDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUc1dlpHVnpMbkIxYzJnb2RHVnliV2x1WVd4T2IyUmxLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHTmhiR3hpWVdOcklDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEJoY25ObFpDQTlJR05oYkd4aVlXTnJLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0Z3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdWIyUmxjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doY0dGeWMyVmtLU0I3WEc0Z0lDQWdJQ0J6ZEdGMFpTNWlZV05yZEhKaFkyc29jMkYyWldSSmJtUmxlQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlIQmhjbk5sWkR0Y2JpQWdmVnh1SUNCY2JpQWdZWE5UZEhKcGJtY29LU0I3WEc0Z0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZENBOUlIUm9hWE11WTI5dWRHVnVkQzV5WlhCc1lXTmxLQzljWEZ4Y0x5d2dYQ0pjWEZ4Y1hGeGNYRndpS1N4Y2JpQWdJQ0FnSUNBZ0lDQnpkSEpwYm1jZ1BTQmdYQ0lrZTJOdmJuUmxiblI5WENKZ08xeHVJQ0FnSUZ4dUlDQWdJSEpsZEhWeWJpQnpkSEpwYm1jN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNncElIc2djbVYwZFhKdUlITjFjR1Z5TG1Oc2IyNWxLRlJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ3dnZEdocGN5NWpiMjUwWlc1MEtUc2dmVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbFJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ0lzSW1OdmJuUmxiblFpTENKd1lYSnpaU0lzSW01dlpHVnpJaXdpYzNSaGRHVWlMQ0pqWVd4c1ltRmpheUlzSW5CaGNuTmxaQ0lzSW5SbGNtMXBibUZzVG05a1pTSXNJbk5oZG1Wa1NXNWtaWGdpTENKblpYUlRZWFpsWkVsdVpHVjRJaXdpYm1WNGRGTnBaMjVwWm1sallXNTBWRzlyWlc0aUxDSm5aWFJPWlhoMFUybG5ibWxtYVdOaGJuUlViMnRsYmlJc0luTnBaMjVwWm1sallXNTBWRzlyWlc0aUxDSm5aWFJEYjI1MFpXNTBJaXdpVkdWeWJXbHVZV3hPYjJSbElpd2labkp2YlZOcFoyNXBabWxqWVc1MFZHOXJaVzRpTENKd2RYTm9JaXdpY0c5d0lpd2lZbUZqYTNSeVlXTnJJaXdpWVhOVGRISnBibWNpTENKeVpYQnNZV05sSWl3aWMzUnlhVzVuSWl3aVkyeHZibVVpTENKVVpYSnRhVzVoYkZCaGNuUWlYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRU5CUVZrc1YwRkJRU3hEUVVGRE96czdSVHQzUWp0QlFVVlpMRWRCUVhGQ0xFTkJRWEpDTEZOQlFYRkNPMEZCUTNKQ0xFZEJRWEZDTEVOQlFYSkNMRlZCUVhGQ096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdkVUk3TzBzN096czdPM2RET3pzN096czdNa0k3T3pzN096czdPM0ZHT3pzN096czdPenM3T3pzN2JVVTdPMmxFT3pzN096dEpRVVY2UWtFc2EwSkJRV3RDTEdsQ1FVRjRRaXhSUVVGUk95dERPenRoUVVGR1FTeHJRa0ZCYTBJc1EwRkRla0pETEU5QlFVODdhVVE3TzJsRFEwNXlRaXhEUkU5Wk8yTkJSVWhCTEU5QlFVOHNSMEZCUjBFc1QwRkJUeXhEUVVGRE96czdPenRaUVVkNlFrTXNSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUTBGQlEwTXNTMEZCU3l4RlFVRkZReXhMUVVGTExFVkJRVVZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMmRDUVVNM1FpeEhRVUZITEVOQlFVTkRMRTFCUVUwN1owSkJSVllzUjBGQlJ5eERRVUZEUXl4WlFVRlpMRWRCUVVjc1NVRkJTVHRuUWtGRmRrSXNSMEZCU3l4RFFVRkRReXhWUVVGVkxFZEJRVWRLTEV0QlFVc3NRMEZCUTBzc1lVRkJZU3hKUVVOc1EwTXNiMEpCUVc5Q0xFZEJRVWRPTEV0QlFVc3NRMEZCUTA4c2RVSkJRWFZDTEVsQlEzWkVReXhuUWtGQlowSXNSMEZCUjBZc2IwSkJRVzlDTEVWQlFVVXNSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJSVGRETEVWQlFVVXNSVUZCUlVVc1owSkJRV2RDTEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN2IwSkJRemxDTEVkQlFVc3NRMEZCUTFnc1QwRkJUeXhIUVVGSFZ5eG5Ra0ZCWjBJc1EwRkJRME1zVlVGQlZUdHZRa0ZGTTBNc1JVRkJSU3hGUVVGRldpeFBRVUZQTEV0QlFVc3NTVUZCU1N4RFFVRkRRU3hQUVVGUExFVkJRVVVzUTBGQlF6dDNRa0ZETjBKTkxGbEJRVmtzUjBGQlIwOHNWVUZCV1N4VFFVRkRReXh2UWtGQmIwSXNRMEZCUTBnc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0dlFrRkRja1VzUTBGQlF6dG5Ra0ZEU0N4RFFVRkRPMmRDUVVWRVRpeE5RVUZOTEVkQlFVbERMRmxCUVZrc1MwRkJTeXhKUVVGSkxFRkJRVU1zUTBGQlF6dG5Ra0ZGYWtNc1JVRkJSU3hGUVVGRlJDeE5RVUZOTEVWQlFVVXNRMEZCUXp0dlFrRkRXRWdzUzBGQlN5eERRVUZEWVN4SlFVRkpMRU5CUVVOVUxGbEJRVmtzUTBGQlF5eERRVUZETzI5Q1FVVjZRaXhGUVVGRkxFVkJRVVZHTEZGQlFWRXNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenQzUWtGRGRFSkRMRTFCUVUwc1IwRkJSMFFzVVVGQlVTeEZRVUZGTEVOQlFVTTdkMEpCUlhCQ0xFVkJRVVVzUjBGQlIwTXNUVUZCVFN4RlFVRkZMRU5CUVVNN05FSkJRMXBJTEV0QlFVc3NRMEZCUTJNc1IwRkJSeXhGUVVGRkxFTkJRVU03ZDBKQlEyUXNRMEZCUXp0dlFrRkRTQ3hEUVVGRE8yZENRVU5JTEVOQlFVTTdaMEpCUlVRc1JVRkJSU3hIUVVGSFdDeE5RVUZOTEVWQlFVVXNRMEZCUXp0dlFrRkRXa1lzUzBGQlN5eERRVUZEWXl4VFFVRlRMRU5CUVVOV0xGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTTVRaXhEUVVGRE8yZENRVVZFTEUxQlFVMHNRMEZCUTBZc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVZU3hIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzUjBGQlN5eERRVUZEYkVJc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlEwRXNUMEZCVHl4RFFVRkRiVUlzVDBGQlR5eFBRVUZQTEVOQlFVMHNVVUZETTBORExFMUJRVTBzUjBGQlNTeERRVUZETEVsQlFWVXNUVUZCUXl4RFFVRlVjRUlzVDBGQlR5eEZRVUZETEVOQlFVTTdaMEpCUlRWQ0xFMUJRVTBzUTBGQlEyOUNMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkVNc1IwRkJTeXhGUVVGTVFTeERRVUZMTzIxQ1FVRk1RU3hSUVVGUkxFTkJRVkpCTEV0QlFVc3NSMEZCUnl4RFFVRkRPMmRDUVVGRExFMUJRVTBzYzBKQmNFUkhkRUlzYTBKQlFXdENMR0ZCYjBSa2MwSXNRMEZCU3l4UlFVRllMRWxCUVVzc1lVRkJUM1JDTEd0Q1FVRnJRaXhGUVVGRkxFbEJRVWtzUTBGQlEwTXNUMEZCVHp0WlFVRkhMRU5CUVVNN08wMDdPMFZCY0VSdVFuTkNMRk5CUVZrN2EwSkJRWFpEZGtJc2EwSkJRV3RDTEVFaWZRPT0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBOYW1lUnVsZU5hbWUsIERlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc2VwYXJhdG9yLCB0ZXJtaW5hdG9yIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gc2VwYXJhdG9yLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB0ZXJtaW5hdG9yLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZSA9IE5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChuYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvbnNSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ydWxlXCI7XG5pbXBvcnQgUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZVwiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVycm9yQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdpbGRjYXJkUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZXJyb3JcIjtcbmltcG9ydCBFcnJvckRlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZXJyb3JcIjtcblxuaW1wb3J0IHsgRXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IG5ldyBFcnJvckRlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRXJyb3JSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVycm9yRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVycm9yQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlcyhSdWxlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVOb2RlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChydWxlTm9kZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gY2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lUnVsZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBSdWxlUnVsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTm9kZSA9IHJ1bGVOYW1lUnVsZVJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgICAgICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICAgICAgICAgICAgcnVsZU5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlTm9kZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZU5vZGVzLm1hcCgocnVsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlTm9kZS5nZW5lcmF0ZVJ1bGUoUnVsZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEb2N1bWVudEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9wYXJ0VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcGFydFR5cGVzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBDaG9pY2VPZlBhcnRzUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oTm9uVGVybWluYWxQYXJ0KSB7XG4gICAgX2luaGVyaXRzKENob2ljZU9mUGFydHNQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ2hvaWNlT2ZQYXJ0c1BhcnQpO1xuICAgIGZ1bmN0aW9uIENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaG9pY2VPZlBhcnRzUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgdmFyIHR5cGUgPSBfcGFydFR5cGVzLkNob2ljZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSk7XG4gICAgICAgIF90aGlzLnBhcnRzID0gcGFydHM7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKENob2ljZU9mUGFydHNQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRQYXJ0c1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhcnRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicGFyc2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnNvbWUoZnVuY3Rpb24ocGFydCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0c1N0cmluZzEgPSB0aGlzLnBhcnRzLnJlZHVjZShmdW5jdGlvbihwYXJ0c1N0cmluZywgcGFydCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IFwiXCIuY29uY2F0KHBhcnRzU3RyaW5nLCBcIiB8IFwiKS5jb25jYXQocGFydFN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgICAgICAgIH0sIG51bGwpLCBzdHJpbmcgPSBcIiggXCIuY29uY2F0KHBhcnRzU3RyaW5nMSwgXCIgKVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiY2xvbmVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoQ2hvaWNlT2ZQYXJ0c1BhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIENob2ljZU9mUGFydHNQYXJ0LCB0aGlzLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0sIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21Ob2Rlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgICAgICAgICAgICAgIHZhciBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9ICgwLCBfYXJyYXkpLmFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG4gICAgICAgICAgICAgICAgbm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3ROb2RlczsgLy8vXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW5Ob2RlcyA9ICgwLCBfYXJyYXkpLmV2ZW4obm9kZXMpO1xuICAgICAgICAgICAgICAgIG5vZGVzID0gZXZlbk5vZGVzOyAvLy9cbiAgICAgICAgICAgICAgICB2YXIgbG9va0FoZWFkID0gZmFsc2UsIHBhcnRzID0gbm9kZXMubWFwKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgICAgICB9KSwgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBDaG9pY2VPZlBhcnRzUGFydDtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwyNXZibFJsY20xcGJtRnNMMk5vYjJsalpVOW1VR0Z5ZEhNdWFuTWlYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWENKMWMyVWdjM1J5YVdOMFhDSTdYRzVjYm1sdGNHOXlkQ0JPYjI1VVpYSnRhVzVoYkZCaGNuUWdabkp2YlNCY0lpNHVMeTR1TDNCaGNuUXZibTl1VkdWeWJXbHVZV3hjSWp0Y2JseHVhVzF3YjNKMElIc2dRMmh2YVdObFQyWlFZWEowYzFCaGNuUlVlWEJsSUgwZ1puSnZiU0JjSWk0dUx5NHVMM0JoY25SVWVYQmxjMXdpTzF4dWFXMXdiM0owSUhzZ1pYWmxiaXdnWVd4c1FuVjBSbWx5YzNSQmJtUk1ZWE4wSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QkRhRzlwWTJWUFpsQmhjblJ6VUdGeWRDQmxlSFJsYm1SeklFNXZibFJsY20xcGJtRnNVR0Z5ZENCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0hCaGNuUnpLU0I3WEc0Z0lDQWdZMjl1YzNRZ2RIbHdaU0E5SUVOb2IybGpaVTltVUdGeWRITlFZWEowVkhsd1pUc2dMeTh2WEc1Y2JpQWdJQ0J6ZFhCbGNpaDBlWEJsS1R0Y2JpQWdJQ0JjYmlBZ0lDQjBhR2x6TG5CaGNuUnpJRDBnY0dGeWRITTdYRzRnSUgxY2JpQWdYRzRnSUdkbGRGQmhjblJ6S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuQmhjblJ6TzF4dUlDQjlYRzVjYmlBZ2NHRnljMlVvYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5a2dlMXh1SUNBZ0lHeGxkQ0J3WVhKelpXUTdYRzVjYmlBZ0lDQjBhR2x6TG5CaGNuUnpMbk52YldVb0tIQmhjblFwSUQwK0lIdGNiaUFnSUNBZ0lIQmhjbk5sWkNBOUlIQmhjblF1Y0dGeWMyVW9ibTlrWlhNc0lITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNWNiaUFnSUNBZ0lHbG1JQ2h3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrN1hHNWNiaUFnSUNCeVpYUjFjbTRnY0dGeWMyVmtPMXh1SUNCOVhHNWNiaUFnWVhOVGRISnBibWNvS1NCN1hHNGdJQ0FnWTI5dWMzUWdjR0Z5ZEhOVGRISnBibWNnUFNCMGFHbHpMbkJoY25SekxuSmxaSFZqWlNnb2NHRnlkSE5UZEhKcGJtY3NJSEJoY25RcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhCaGNuUlRkSEpwYm1jZ1BTQndZWEowTG1GelUzUnlhVzVuS0NrN1hHNGdJQ0FnWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY0dGeWRITlRkSEpwYm1jZ1BUMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHRnlkSE5UZEhKcGJtY2dQU0J3WVhKMFUzUnlhVzVuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHRnlkSE5UZEhKcGJtY2dQU0JnSkh0d1lYSjBjMU4wY21sdVozMGdmQ0FrZTNCaGNuUlRkSEpwYm1kOVlEdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0JjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1lYSjBjMU4wY21sdVp6dGNiaUFnSUNBZ0lDQWdJQ0I5TENCdWRXeHNLU3hjYmlBZ0lDQWdJQ0FnSUNCemRISnBibWNnUFNCZ0tDQWtlM0JoY25SelUzUnlhVzVuZlNBcFlEdGNiaUFnSUNCY2JpQWdJQ0J5WlhSMWNtNGdjM1J5YVc1bk8xeHVJQ0I5WEc1Y2JpQWdZMnh2Ym1Vb0tTQjdJSEpsZEhWeWJpQnpkWEJsY2k1amJHOXVaU2hEYUc5cFkyVlBabEJoY25SelVHRnlkQ3dnZEdocGN5NXdZWEowY3lrN0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVNXZaR1Z6S0c1dlpHVnpLU0I3WEc0Z0lDQWdZMjl1YzNRZ1lXeHNRblYwUm1seWMzUkJibVJNWVhOMFRtOWtaWE1nUFNCaGJHeENkWFJHYVhKemRFRnVaRXhoYzNRb2JtOWtaWE1wTzF4dVhHNGdJQ0FnYm05a1pYTWdQU0JoYkd4Q2RYUkdhWEp6ZEVGdVpFeGhjM1JPYjJSbGN6c2dJQzh2TDF4dUlDQWdJRnh1SUNBZ0lHTnZibk4wSUdWMlpXNU9iMlJsY3lBOUlHVjJaVzRvYm05a1pYTXBPMXh1WEc0Z0lDQWdibTlrWlhNZ1BTQmxkbVZ1VG05a1pYTTdJQ0F2THk5Y2JseHVJQ0FnSUdOdmJuTjBJR3h2YjJ0QmFHVmhaQ0E5SUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0FnSUhCaGNuUnpJRDBnYm05a1pYTXViV0Z3S0NodWIyUmxLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQndZWEowSUQwZ2JtOWtaUzVuWlc1bGNtRjBaVkJoY25Rb2JHOXZhMEZvWldGa0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCaGNuUTdYRzRnSUNBZ0lDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNBZ0lDQWdZMmh2YVdObFQyWlFZWEowYzFCaGNuUWdQU0J1WlhjZ1EyaHZhV05sVDJaUVlYSjBjMUJoY25Rb2NHRnlkSE1wTzF4dVhHNGdJQ0FnY21WMGRYSnVJR05vYjJsalpVOW1VR0Z5ZEhOUVlYSjBPMXh1SUNCOVhHNTlYRzRpWFN3aWJtRnRaWE1pT2xzaVEyaHZhV05sVDJaUVlYSjBjMUJoY25RaUxDSndZWEowY3lJc0luUjVjR1VpTENKRGFHOXBZMlZQWmxCaGNuUnpVR0Z5ZEZSNWNHVWlMQ0puWlhSUVlYSjBjeUlzSW5CaGNuTmxJaXdpYm05a1pYTWlMQ0p6ZEdGMFpTSXNJbU5oYkd4aVlXTnJJaXdpY0dGeWMyVmtJaXdpYzI5dFpTSXNJbkJoY25RaUxDSmhjMU4wY21sdVp5SXNJbkJoY25SelUzUnlhVzVuSWl3aWNtVmtkV05sSWl3aWNHRnlkRk4wY21sdVp5SXNJbk4wY21sdVp5SXNJbU5zYjI1bElpd2labkp2YlU1dlpHVnpJaXdpWVd4c1FuVjBSbWx5YzNSQmJtUk1ZWE4wVG05a1pYTWlMQ0poYkd4Q2RYUkdhWEp6ZEVGdVpFeGhjM1FpTENKbGRtVnVUbTlrWlhNaUxDSmxkbVZ1SWl3aWJHOXZhMEZvWldGa0lpd2liV0Z3SWl3aWJtOWtaU0lzSW1kbGJtVnlZWFJsVUdGeWRDSXNJbU5vYjJsalpVOW1VR0Z5ZEhOUVlYSjBJaXdpVG05dVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZaU3hIUVVGM1FpeERRVUY0UWl4WlFVRjNRanRCUVVWa0xFZEJRV2xDTEVOQlFXcENMRlZCUVdsQ08wRkJRMlFzUjBGQmRVSXNRMEZCZGtJc1RVRkJkVUk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN01FSTdPenM3T3pzN096czdVenM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN2QwTTdPenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJUTkRRU3hwUWtGQmFVSXNhVUpCUVhaQ0xGRkJRVkU3YVVRN08yRkJRVVpCTEdsQ1FVRnBRaXhEUVVONFFrTXNTMEZCU3p0blJEczdVVUZEWml4SFFVRkxMRU5CUVVORExFbEJRVWtzUjBGQlIwTXNWVUZCY1VJc2QwSkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdhME5CUldwRFJDeEpRVUZKTEVORFdHUXNRMFJYWjBJN1kwRkZVRVFzUzBGQlN5eEhRVUZIUVN4TFFVRkxMRU5CUVVNN096czdPMWxCUjNKQ1J5eEhRVUZSTEVWQlFWSkJMRU5CUVZFN2JVSkJRVkpCTEZGQlFWRXNRMEZCVWtFc1VVRkJVU3hIUVVGSExFTkJRVU03WjBKQlExWXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRMGdzUzBGQlN6dFpRVU51UWl4RFFVRkRPenM3V1VGRlJFa3NSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUTBGQlEwTXNTMEZCU3l4RlFVRkZReXhMUVVGTExFVkJRVVZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMmRDUVVNM1FpeEhRVUZITEVOQlFVTkRMRTFCUVUwN1owSkJSVllzU1VGQlNTeERRVUZEVWl4TFFVRkxMRU5CUVVOVExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFWQkRMRWxCUVVrc1JVRkJTeXhEUVVGRE8yOUNRVU42UWtZc1RVRkJUU3hIUVVGSFJTeEpRVUZKTEVOQlFVTk9MRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUTBGQlF5eERRVUZETzI5Q1FVVTFReXhGUVVGRkxFVkJRVVZETEUxQlFVMHNSVUZCUlN4RFFVRkRPM2RDUVVOWUxFMUJRVTBzUTBGQlF5eEpRVUZKTzI5Q1FVTmlMRU5CUVVNN1owSkJRMGdzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUlVnc1RVRkJUU3hEUVVGRFFTeE5RVUZOTzFsQlEyWXNRMEZCUXpzN08xbEJSVVJITEVkQlFWRXNSVUZCVWtFc1EwRkJVVHR0UWtGQlVrRXNVVUZCVVN4RFFVRlNRU3hSUVVGUkxFZEJRVWNzUTBGQlF6dG5Ra0ZEVml4SFFVRkxMRU5CUVVORExGbEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTmFMRXRCUVVzc1EwRkJRMkVzVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCVUVRc1YwRkJWeXhGUVVGRlJpeEpRVUZKTEVWQlFVc3NRMEZCUXp0dlFrRkRkRVFzUjBGQlN5eERRVUZEU1N4VlFVRlZMRWRCUVVkS0xFbEJRVWtzUTBGQlEwTXNVVUZCVVR0dlFrRkZhRU1zUlVGQlJTeEZRVUZGUXl4WFFVRlhMRXRCUVVzc1NVRkJTU3hGUVVGRkxFTkJRVU03ZDBKQlEzcENRU3hYUVVGWExFZEJRVWRGTEZWQlFWVXNRMEZCUXp0dlFrRkRNMElzUTBGQlF5eE5RVUZOTEVOQlFVTTdkMEpCUTA1R0xGZEJRVmNzUjBGQlNTeERRVUZCTEVWQlFXMUNSU3hOUVVGVkxFTkJRVE5DUml4WFFVRlhMRVZCUVVNc1EwRkJSeXhOUVVGaExFMUJRVUVzUTBGQldFVXNWVUZCVlN4RFFVRkZMRU5CUVVNN2IwSkJRMnBFTEVOQlFVTTdiMEpCUlVRc1RVRkJUU3hEUVVGRFJpeFhRVUZYTzJkQ1FVTndRaXhEUVVGRExFVkJRVVVzU1VGQlNTeEhRVU5RUnl4TlFVRk5MRWRCUVVrc1EwRkJSU3hKUVVGakxFMUJRVVVzUTBGQlpFZ3NXVUZCVnl4RlFVRkRMRU5CUVVVN1owSkJSV3hETEUxQlFVMHNRMEZCUTBjc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4SFFVRkhMRU5CUVVNN1owSkJRVU1zVFVGQlRTeHpRa0UxUTBkcVFpeHBRa0ZCYVVJc1lVRTBRMkpwUWl4RFFVRkxMRkZCUVZnc1NVRkJTeXhoUVVGUGFrSXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNTeERRVUZEUXl4TFFVRkxPMWxCUVVjc1EwRkJRenM3T3p0WlFVVjJSR2xDTEVkQlFWTXNSVUZCVkVFc1EwRkJVenR0UWtGQmFFSXNVVUZCVVN4RFFVRkVRU3hUUVVGVExFTkJRVU5hTEV0QlFVc3NSVUZCUlN4RFFVRkRPMmRDUVVOMlFpeEhRVUZMTEVOQlFVTmhMSFZDUVVGMVFpeFBRVUZIUXl4TlFVRnJRaXh4UWtGQlEyUXNTMEZCU3p0blFrRkZlRVJCTEV0QlFVc3NSMEZCUjJFc2RVSkJRWFZDTEVOQlFVTXNRMEZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenRuUWtGRmNrTXNSMEZCU3l4RFFVRkRSU3hUUVVGVExFOUJRVWRETEUxQlFVa3NUMEZCUTJoQ0xFdEJRVXM3WjBKQlJUVkNRU3hMUVVGTExFZEJRVWRsTEZOQlFWTXNRMEZCUXl4RFFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVYyUWl4SFFVRkxMRU5CUVVORkxGTkJRVk1zUjBGQlJ5eExRVUZMTEVWQlEycENkRUlzUzBGQlN5eEhRVUZIU3l4TFFVRkxMRU5CUVVOclFpeEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRlFReXhKUVVGSkxFVkJRVXNzUTBGQlF6dHZRa0ZETTBJc1IwRkJTeXhEUVVGRFpDeEpRVUZKTEVkQlFVZGpMRWxCUVVrc1EwRkJRME1zV1VGQldTeERRVUZEU0N4VFFVRlRPMjlDUVVWNFF5eE5RVUZOTEVOQlFVTmFMRWxCUVVrN1owSkJRMklzUTBGQlF5eEhRVU5FWjBJc2FVSkJRV2xDTEVkQlFVY3NSMEZCUnl4RFFVRkRNMElzYVVKQlFXbENMRU5CUVVORExFdEJRVXM3WjBKQlJYSkVMRTFCUVUwc1EwRkJRekJDTEdsQ1FVRnBRanRaUVVNeFFpeERRVUZET3p0Tk96dEZRV2hGTkVORExGbEJRV1U3YTBKQlFYcEROVUlzYVVKQlFXbENMRUVpZlE9PSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSwgRXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVSdWxlTmFtZSA9IFJ1bGVSdWxlTmFtZSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lID0gRXJyb3JSdWxlTmFtZSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRG9jdW1lbnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kb2N1bWVudFwiO1xuaW1wb3J0IERvY3VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kb2N1bWVudFwiO1xuXG5pbXBvcnQgeyBEb2N1bWVudFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uID0gbmV3IERvY3VtZW50RGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBEb2N1bWVudFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRG9jdW1lbnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZU5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5pbXBvcnQgUnVsZU5hbWVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBSdWxlTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gUnVsZU5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTmFtZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gbmV3IFdpbGRjYXJkUGFydCgpO1xuXG4gICAgcmV0dXJuIHdpbGRjYXJkUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhXaWxkY2FyZEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIGNvbnN0IHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFdpbGRjYXJkQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvd2lsZGNhcmRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHdpbGRjYXJkLFxuICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbih3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFdpbGRjYXJkQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZW5kT2ZMaW5lQk5GTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lQk5GTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQk5GTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lQk5GTm9kZVBhcnNlVHJlZSA9IEVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVCTkZOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZUJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgZW5kT2ZMaW5lQk5GTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4gPSBzaWduaWZpY2FudFRva2VuLmlzRW5kT2ZMaW5lVG9rZW4oKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgICBlbmRPZkxpbmVCTkZOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAoZW5kT2ZMaW5lQk5GTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKGVuZE9mTGluZUJORk5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU5EX09GX0xJTkU7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IG5ldyBFbmRPZkxpbmVQYXJ0KCk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFbmRPZkxpbmVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IEVuZE9mTGluZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBFTkRfT0ZfTElORSxcbiAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IEVuZE9mTGluZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlLCAgLy8vXG4gICAgICAgICAgcGFydHMgPSBwYXJ0Tm9kZXMubWFwKChwYXJ0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnROb2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICBcbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbihwYXJ0cyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25EZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZXZlbiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZXZlbkNoaWxkTm9kZXMgPSBldmVuKGNoaWxkTm9kZXMpLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbk5vZGVzID0gZXZlbkNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbk5vZGVzLm1hcCgoZGVmaW5pdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBkZWZpbml0aW9uTm9kZS5nZW5lcmF0ZURlZmluaXRpb24oKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICAgICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERlZmluaXRpb25zQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25vblRlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiKTtcbnZhciBfbG9va0FoZWFkID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9sb29rQWhlYWRcIik7XG52YXIgX3BhcnRUeXBlcyA9IHJlcXVpcmUoXCIuLi8uLi9wYXJ0VHlwZXNcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoU2VxdWVuY2VPZlBhcnRzUGFydCwgTm9uVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFNlcXVlbmNlT2ZQYXJ0c1BhcnQpO1xuICAgIGZ1bmN0aW9uIFNlcXVlbmNlT2ZQYXJ0c1BhcnQocGFydHMpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlcXVlbmNlT2ZQYXJ0c1BhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIHZhciB0eXBlID0gX3BhcnRUeXBlcy5TZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSk7XG4gICAgICAgIF90aGlzLnBhcnRzID0gcGFydHM7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFNlcXVlbmNlT2ZQYXJ0c1BhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFBhcnRzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFydHMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBwYXJ0c05vZGVzID0gW10sIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSAoMCwgX2xvb2tBaGVhZCkucGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfYXJyYXkpLnB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0c1N0cmluZzEgPSB0aGlzLnBhcnRzLnJlZHVjZShmdW5jdGlvbihwYXJ0c1N0cmluZywgcGFydCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IFwiXCIuY29uY2F0KHBhcnRzU3RyaW5nLCBcIiBcIikuY29uY2F0KHBhcnRTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICAgICAgICB9LCBudWxsKSwgc3RyaW5nID0gXCIoIFwiLmNvbmNhdChwYXJ0c1N0cmluZzEsIFwiIClcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFNlcXVlbmNlT2ZQYXJ0c1BhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsIHRoaXMucGFydHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbU5vZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbU5vZGVzKG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gKDAsIF9hcnJheSkuYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcbiAgICAgICAgICAgICAgICBub2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzOyAvLy9cbiAgICAgICAgICAgICAgICB2YXIgbG9va0FoZWFkID0gZmFsc2UsIHBhcnRzID0gbm9kZXMubWFwKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgICAgICB9KSwgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBTZXF1ZW5jZU9mUGFydHNQYXJ0O1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5d1lYSjBMMjV2YmxSbGNtMXBibUZzTDNObGNYVmxibU5sVDJaUVlYSjBjeTVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElFNXZibFJsY20xcGJtRnNVR0Z5ZENCbWNtOXRJRndpTGk0dkxpNHZjR0Z5ZEM5dWIyNVVaWEp0YVc1aGJGd2lPMXh1WEc1cGJYQnZjblFnZXlCd2RYTm9JSDBnWm5KdmJTQmNJaTR1THk0dUwzVjBhV3hwZEdsbGN5OWhjbkpoZVZ3aU8xeHVhVzF3YjNKMElIc2djR0Z5YzJWUVlYSjBjeUI5SUdaeWIyMGdYQ0l1TGk4dUxpOTFkR2xzYVhScFpYTXZiRzl2YTBGb1pXRmtYQ0k3WEc1cGJYQnZjblFnZXlCaGJHeENkWFJHYVhKemRFRnVaRXhoYzNRZ2ZTQm1jbTl0SUZ3aUxpNHZMaTR2ZFhScGJHbDBhV1Z6TDJGeWNtRjVYQ0k3WEc1cGJYQnZjblFnZXlCVFpYRjFaVzVqWlU5bVVHRnlkSE5RWVhKMFZIbHdaU0I5SUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowVkhsd1pYTmNJanRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdVMlZ4ZFdWdVkyVlBabEJoY25SelVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhjblJ6S1NCN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlNBOUlGTmxjWFZsYm1ObFQyWlFZWEowYzFCaGNuUlVlWEJsT3lBdkx5OWNibHh1SUNBZ0lITjFjR1Z5S0hSNWNHVXBPMXh1WEc0Z0lDQWdkR2hwY3k1d1lYSjBjeUE5SUhCaGNuUnpPMXh1SUNCOVhHNWNiaUFnWjJWMFVHRnlkSE1vS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNHRnlkSE03WEc0Z0lIMWNibHh1SUNCd1lYSnpaU2h1YjJSbGN5d2djM1JoZEdVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2JHVjBJSEJoY25ObFpEdGNibHh1SUNBZ0lHTnZibk4wSUhOaGRtVmtTVzVrWlhnZ1BTQnpkR0YwWlM1blpYUlRZWFpsWkVsdVpHVjRLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ2NHRnlkSE5PYjJSbGN5QTlJRnRkTEZ4dUlDQWdJQ0FnSUNBZ0lHbHVaR1Y0SUQwZ01EdGNibHh1SUNBZ0lIQmhjbk5sWkNBOUlIQmhjbk5sVUdGeWRITW9kR2hwY3k1d1lYSjBjeXdnY0dGeWRITk9iMlJsY3l3Z2FXNWtaWGdzSUhOMFlYUmxMQ0JqWVd4c1ltRmpheWs3WEc1Y2JpQWdJQ0JwWmlBb2NHRnljMlZrS1NCN1hHNGdJQ0FnSUNCd2RYTm9LRzV2WkdWekxDQndZWEowYzA1dlpHVnpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvSVhCaGNuTmxaQ2tnZTF4dUlDQWdJQ0FnYzNSaGRHVXVZbUZqYTNSeVlXTnJLSE5oZG1Wa1NXNWtaWGdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQndZWEp6WldRN1hHNGdJSDFjYmx4dUlDQmhjMU4wY21sdVp5Z3BJSHRjYmlBZ0lDQmpiMjV6ZENCd1lYSjBjMU4wY21sdVp5QTlJSFJvYVhNdWNHRnlkSE11Y21Wa2RXTmxLQ2h3WVhKMGMxTjBjbWx1Wnl3Z2NHRnlkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjR0Z5ZEZOMGNtbHVaeUE5SUhCaGNuUXVZWE5UZEhKcGJtY29LVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hCaGNuUnpVM1J5YVc1bklEMDlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmhjblJ6VTNSeWFXNW5JRDBnY0dGeWRGTjBjbWx1Wnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmhjblJ6VTNSeWFXNW5JRDBnWUNSN2NHRnlkSE5UZEhKcGJtZDlJQ1I3Y0dGeWRGTjBjbWx1WjMxZ08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjR0Z5ZEhOVGRISnBibWM3WEc0Z0lDQWdJQ0FnSUNBZ2ZTd2diblZzYkNrc1hHNGdJQ0FnSUNBZ0lDQWdjM1J5YVc1bklEMGdZQ2dnSkh0d1lYSjBjMU4wY21sdVozMGdLV0E3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjM1J5YVc1bk8xeHVJQ0I5WEc1Y2JpQWdZMnh2Ym1Vb0tTQjdJSEpsZEhWeWJpQnpkWEJsY2k1amJHOXVaU2hUWlhGMVpXNWpaVTltVUdGeWRITlFZWEowTENCMGFHbHpMbkJoY25SektUc2dmVnh1WEc0Z0lITjBZWFJwWXlCbWNtOXRUbTlrWlhNb2JtOWtaWE1wSUh0Y2JpQWdJQ0JqYjI1emRDQmhiR3hDZFhSR2FYSnpkRUZ1WkV4aGMzUk9iMlJsY3lBOUlHRnNiRUoxZEVacGNuTjBRVzVrVEdGemRDaHViMlJsY3lrN1hHNWNiaUFnSUNCdWIyUmxjeUE5SUdGc2JFSjFkRVpwY25OMFFXNWtUR0Z6ZEU1dlpHVnpPeUFnTHk4dlhHNWNiaUFnSUNCamIyNXpkQ0JzYjI5clFXaGxZV1FnUFNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNCd1lYSjBjeUE5SUc1dlpHVnpMbTFoY0Nnb2JtOWtaU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjR0Z5ZENBOUlHNXZaR1V1WjJWdVpYSmhkR1ZRWVhKMEtHeHZiMnRCYUdWaFpDazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1lYSjBPMXh1SUNBZ0lDQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ0lDQWdJSE5sY1hWbGJtTmxUMlpRWVhKMGMxQmhjblFnUFNCdVpYY2dVMlZ4ZFdWdVkyVlBabEJoY25SelVHRnlkQ2h3WVhKMGN5azdYRzVjYmlBZ0lDQnlaWFIxY200Z2MyVnhkV1Z1WTJWUFpsQmhjblJ6VUdGeWREdGNiaUFnZlZ4dWZWeHVJbDBzSW01aGJXVnpJanBiSWxObGNYVmxibU5sVDJaUVlYSjBjMUJoY25RaUxDSndZWEowY3lJc0luUjVjR1VpTENKVFpYRjFaVzVqWlU5bVVHRnlkSE5RWVhKMFZIbHdaU0lzSW1kbGRGQmhjblJ6SWl3aWNHRnljMlVpTENKdWIyUmxjeUlzSW5OMFlYUmxJaXdpWTJGc2JHSmhZMnNpTENKd1lYSnpaV1FpTENKellYWmxaRWx1WkdWNElpd2laMlYwVTJGMlpXUkpibVJsZUNJc0luQmhjblJ6VG05a1pYTWlMQ0pwYm1SbGVDSXNJbkJoY25ObFVHRnlkSE1pTENKd2RYTm9JaXdpWW1GamEzUnlZV05ySWl3aVlYTlRkSEpwYm1jaUxDSndZWEowYzFOMGNtbHVaeUlzSW5KbFpIVmpaU0lzSW5CaGNuUWlMQ0p3WVhKMFUzUnlhVzVuSWl3aWMzUnlhVzVuSWl3aVkyeHZibVVpTENKbWNtOXRUbTlrWlhNaUxDSmhiR3hDZFhSR2FYSnpkRUZ1WkV4aGMzUk9iMlJsY3lJc0ltRnNiRUoxZEVacGNuTjBRVzVrVEdGemRDSXNJbXh2YjJ0QmFHVmhaQ0lzSW0xaGNDSXNJbTV2WkdVaUxDSm5aVzVsY21GMFpWQmhjblFpTENKelpYRjFaVzVqWlU5bVVHRnlkSE5RWVhKMElpd2lUbTl1VkdWeWJXbHVZV3hRWVhKMElsMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeERRVUZaTEZkQlFVRXNRMEZCUXpzN08wVTdkMEk3UVVGRlpTeEhRVUYzUWl4RFFVRjRRaXhaUVVGM1FqdEJRVVV2UWl4SFFVRjFRaXhEUVVGMlFpeE5RVUYxUWp0QlFVTnFRaXhIUVVFeVFpeERRVUV6UWl4VlFVRXlRanRCUVVWa0xFZEJRV2xDTEVOQlFXcENMRlZCUVdsQ096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdkVUk3TzBzN096czdPM2RET3pzN096czdNa0k3T3pzN096czdPM0ZHT3pzN096czdPenM3T3pzN2JVVTdPMmxFT3pzN096dEpRVVZ3UTBFc2JVSkJRVzFDTEdsQ1FVRjZRaXhSUVVGUk8yMUVPenRoUVVGR1FTeHRRa0ZCYlVJc1EwRkRNVUpETEV0QlFVczdhMFE3TzFGQlEyWXNSMEZCU3l4RFFVRkRReXhKUVVGSkxFZEJRVWRETEZWQlFYVkNMREJDUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJ0RFFVVnVRMFFzU1VGQlNTeERRMkprTEVORVlXZENPMk5CUlZCRUxFdEJRVXNzUjBGQlIwRXNTMEZCU3l4RFFVRkRPenM3T3p0WlFVZHlRa2NzUjBGQlVTeEZRVUZTUVN4RFFVRlJPMjFDUVVGU1FTeFJRVUZSTEVOQlFWSkJMRkZCUVZFc1IwRkJSeXhEUVVGRE8yZENRVU5XTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOSUxFdEJRVXM3V1VGRGJrSXNRMEZCUXpzN08xbEJSVVJKTEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFTkJRVU5ETEV0QlFVc3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0blFrRkROMElzUjBGQlJ5eERRVUZEUXl4TlFVRk5PMmRDUVVWV0xFZEJRVXNzUTBGQlEwTXNWVUZCVlN4SFFVRkhTQ3hMUVVGTExFTkJRVU5KTEdGQlFXRXNTVUZEYUVORExGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZEWmtNc1MwRkJTeXhIUVVGSExFTkJRVU03WjBKQlJXWktMRTFCUVUwc1QwRkJSMHNzVlVGQlZTeGhRVUZETEVsQlFVa3NRMEZCUTJJc1MwRkJTeXhGUVVGRlZ5eFZRVUZWTEVWQlFVVkRMRXRCUVVzc1JVRkJSVTRzUzBGQlN5eEZRVUZGUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRuUWtGRmNFVXNSVUZCUlN4RlFVRkZReXhOUVVGTkxFVkJRVVVzUTBGQlF6dDNRa0ZEV0Uwc1RVRkJTU3hQUVVGRFZDeExRVUZMTEVWQlFVVk5MRlZCUVZVc1EwRkJReXhEUVVGRE8yZENRVU14UWl4RFFVRkRPMmRDUVVWRUxFVkJRVVVzUjBGQlIwZ3NUVUZCVFN4RlFVRkZMRU5CUVVNN2IwSkJRMXBHTEV0QlFVc3NRMEZCUTFNc1UwRkJVeXhEUVVGRFRpeFZRVUZWTEVOQlFVTXNRMEZCUXp0blFrRkRPVUlzUTBGQlF6dG5Ra0ZGUkN4TlFVRk5MRU5CUVVORUxFMUJRVTA3V1VGRFppeERRVUZET3pzN1dVRkZSRkVzUjBGQlVTeEZRVUZTUVN4RFFVRlJPMjFDUVVGU1FTeFJRVUZSTEVOQlFWSkJMRkZCUVZFc1IwRkJSeXhEUVVGRE8yZENRVU5XTEVkQlFVc3NRMEZCUTBNc1dVRkJWeXhIUVVGSExFbEJRVWtzUTBGQlEycENMRXRCUVVzc1EwRkJRMnRDTEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVZCRUxGZEJRVmNzUlVGQlJVVXNTVUZCU1N4RlFVRkxMRU5CUVVNN2IwSkJRM1JFTEVkQlFVc3NRMEZCUTBNc1ZVRkJWU3hIUVVGSFJDeEpRVUZKTEVOQlFVTklMRkZCUVZFN2IwSkJSV2hETEVWQlFVVXNSVUZCUlVNc1YwRkJWeXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzNkQ1FVTjZRa0VzVjBGQlZ5eEhRVUZIUnl4VlFVRlZMRU5CUVVNN2IwSkJRek5DTEVOQlFVTXNUVUZCVFN4RFFVRkRPM2RDUVVOT1NDeFhRVUZYTEVkQlFVa3NRMEZCUVN4RlFVRnBRa2NzVFVGQlZTeERRVUY2UWtnc1YwRkJWeXhGUVVGRExFTkJRVU1zU1VGQllTeE5RVUZCTEVOQlFWaEhMRlZCUVZVc1EwRkJSU3hEUVVGRE8yOUNRVU12UXl4RFFVRkRPMjlDUVVWRUxFMUJRVTBzUTBGQlEwZ3NWMEZCVnp0blFrRkRjRUlzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZEVUVrc1RVRkJUU3hIUVVGSkxFTkJRVVVzU1VGQll5eE5RVUZGTEVOQlFXUktMRmxCUVZjc1JVRkJReXhEUVVGRk8yZENRVVZzUXl4TlFVRk5MRU5CUVVOSkxFMUJRVTA3V1VGRFppeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1IwRkJSeXhEUVVGRE8yZENRVUZETEUxQlFVMHNjMEpCYkVSSGRrSXNiVUpCUVcxQ0xHRkJhMFJtZFVJc1EwRkJTeXhSUVVGWUxFbEJRVXNzWVVGQlQzWkNMRzFDUVVGdFFpeEZRVUZGTEVsQlFVa3NRMEZCUTBNc1MwRkJTenRaUVVGSExFTkJRVU03T3pzN1dVRkZla1IxUWl4SFFVRlRMRVZCUVZSQkxFTkJRVk03YlVKQlFXaENMRkZCUVZFc1EwRkJSRUVzVTBGQlV5eERRVUZEYkVJc1MwRkJTeXhGUVVGRkxFTkJRVU03WjBKQlEzWkNMRWRCUVVzc1EwRkJRMjFDTEhWQ1FVRjFRaXhQUVVGSFF5eE5RVUZyUWl4eFFrRkJRM0JDTEV0QlFVczdaMEpCUlhoRVFTeExRVUZMTEVkQlFVZHRRaXgxUWtGQmRVSXNRMEZCUXl4RFFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVZ5UXl4SFFVRkxMRU5CUVVORkxGTkJRVk1zUjBGQlJ5eExRVUZMTEVWQlEycENNVUlzUzBGQlN5eEhRVUZIU3l4TFFVRkxMRU5CUVVOelFpeEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRlFReXhKUVVGSkxFVkJRVXNzUTBGQlF6dHZRa0ZETTBJc1IwRkJTeXhEUVVGRFZDeEpRVUZKTEVkQlFVZFRMRWxCUVVrc1EwRkJRME1zV1VGQldTeERRVUZEU0N4VFFVRlRPMjlDUVVWNFF5eE5RVUZOTEVOQlFVTlFMRWxCUVVrN1owSkJRMklzUTBGQlF5eEhRVU5FVnl4dFFrRkJiVUlzUjBGQlJ5eEhRVUZITEVOQlFVTXZRaXh0UWtGQmJVSXNRMEZCUTBNc1MwRkJTenRuUWtGRmVrUXNUVUZCVFN4RFFVRkRPRUlzYlVKQlFXMUNPMWxCUXpWQ0xFTkJRVU03TzAwN08wVkJiRVU0UTBNc1dVRkJaVHRyUWtGQk0wTm9ReXh0UWtGQmJVSXNRU0o5IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUnVsZU5hbWUgPSBEZWZpbml0aW9uUnVsZU5hbWUsXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhcixcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IERlZmluaXRpb25zRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uc1wiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNEZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25zRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBEZWZpbml0aW9uc1J1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbnNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhUZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFRlcm1pbmFsUGFydFJ1bGVOYW1lLCBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLCBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCBFbmRPZkxpbmVSdWxlTmFtZSwgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWUgPSBFbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gVGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24od2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2hvaWNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIsIG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhciwgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuUGFydFJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBDaG9pY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gQ2hvaWNlT2ZQYXJ0c0JORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbm9uVGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCIpKTtcbnZhciBfdGVybWluYWxTeW1ib2wgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCIpKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBUZXJtaW5hbFN5bWJvbEJORk5vZGUgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsTm9kZSkge1xuICAgIF9pbmhlcml0cyhUZXJtaW5hbFN5bWJvbEJORk5vZGUsIE5vblRlcm1pbmFsTm9kZSk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihUZXJtaW5hbFN5bWJvbEJORk5vZGUpO1xuICAgIGZ1bmN0aW9uIFRlcm1pbmFsU3ltYm9sQk5GTm9kZSgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRlcm1pbmFsU3ltYm9sQk5GTm9kZSk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlZ3VsYXJFeHByZXNzaW9uXCIsIC9eXCIoKD86XFxcXC58W15cIlxcXFxdKSopXCIkLyk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2VuZXJhdGVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBfdGVybWluYWxTeW1ib2wuZGVmYXVsdChjb250ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVybWluYWxTeW1ib2xQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0Q29udGVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbnRlbnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSwgZmlyc3RDaGlsZE5vZGUgPSAoMCwgX2FycmF5KS5maXJzdChjaGlsZE5vZGVzKSwgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLCBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSwgc2Vjb25kTWF0Y2ggPSAoMCwgX2FycmF5KS5zZWNvbmQobWF0Y2hlcyksIGNvbnRlbnQgPSBzZWNvbmRNYXRjaC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFwiL2csIFwiXFxcIlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0sIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ub25UZXJtaW5hbC5kZWZhdWx0LmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxTeW1ib2xCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBUZXJtaW5hbFN5bWJvbEJORk5vZGU7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl1YjJSbEwySnVaaTkwWlhKdGFXNWhiRk41YldKdmJDNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKY0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dWFXMXdiM0owSUU1dmJsUmxjbTFwYm1Gc1RtOWtaU0JtY205dElGd2lMaTR2TGk0dmJtOWtaUzl1YjI1VVpYSnRhVzVoYkZ3aU8xeHVhVzF3YjNKMElGUmxjbTFwYm1Gc1UzbHRZbTlzVUdGeWRDQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRDOTBaWEp0YVc1aGJDOTBaWEp0YVc1aGJGTjViV0p2YkZ3aU8xeHVYRzVwYlhCdmNuUWdleUJtYVhKemRDd2djMlZqYjI1a0lIMGdabkp2YlNCY0lpNHVMeTR1TDNWMGFXeHBkR2xsY3k5aGNuSmhlVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJVWlhKdGFXNWhiRk41YldKdmJFSk9SazV2WkdVZ1pYaDBaVzVrY3lCT2IyNVVaWEp0YVc1aGJFNXZaR1VnZTF4dUlDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpQTlJQzllWENJb0tEODZYRnhjWEM1OFcxNWNJbHhjWEZ4ZEtTb3BYQ0lrTHp0Y2JseHVJQ0JuWlc1bGNtRjBaVkJoY25Rb2JHOXZhMEZvWldGa0tTQjdYRzRnSUNBZ1kyOXVjM1FnWTI5dWRHVnVkQ0E5SUhSb2FYTXVaMlYwUTI5dWRHVnVkQ2dwTEZ4dUlDQWdJQ0FnSUNBZ0lIUmxjbTFwYm1Gc1UzbHRZbTlzVUdGeWRDQTlJRzVsZHlCVVpYSnRhVzVoYkZONWJXSnZiRkJoY25Rb1kyOXVkR1Z1ZENrN1hHNWNiaUFnSUNCeVpYUjFjbTRnZEdWeWJXbHVZV3hUZVcxaWIyeFFZWEowTzF4dUlDQjlYRzVjYmlBZ1oyVjBRMjl1ZEdWdWRDZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCamFHbHNaRTV2WkdWeklEMGdkR2hwY3k1blpYUkRhR2xzWkU1dlpHVnpLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pFNXZaR1VnUFNCbWFYSnpkQ2hqYUdsc1pFNXZaR1Z6S1N4Y2JpQWdJQ0FnSUNBZ0lDQjBaWEp0YVc1aGJFNXZaR1VnUFNCbWFYSnpkRU5vYVd4a1RtOWtaU3dnSUM4dkwxeHVJQ0FnSUNBZ0lDQWdJSFJsY20xcGJtRnNUbTlrWlVOdmJuUmxiblFnUFNCMFpYSnRhVzVoYkU1dlpHVXVaMlYwUTI5dWRHVnVkQ2dwTEZ4dUlDQWdJQ0FnSUNBZ0lHMWhkR05vWlhNZ1BTQjBaWEp0YVc1aGJFNXZaR1ZEYjI1MFpXNTBMbTFoZEdOb0tIUm9hWE11Y21WbmRXeGhja1Y0Y0hKbGMzTnBiMjRwTEZ4dUlDQWdJQ0FnSUNBZ0lITmxZMjl1WkUxaGRHTm9JRDBnYzJWamIyNWtLRzFoZEdOb1pYTXBMRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxiblFnUFNCelpXTnZibVJOWVhSamFDNXlaWEJzWVdObEtDOWNYRnhjWEZ4Y1hDOW5MQ0JjSWx4Y1hGeGNJaWt1Y21Wd2JHRmpaU2d2WEZ4Y1hGd2lMMmNzSUZ3aVhGeGNJbHdpS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJqYjI1MFpXNTBPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxU2RXeGxUbUZ0WlVGdVpFTm9hV3hrVG05a1pYTW9jblZzWlU1aGJXVXNJR05vYVd4a1RtOWtaWE1wSUhzZ2NtVjBkWEp1SUU1dmJsUmxjbTFwYm1Gc1RtOWtaUzVtY205dFVuVnNaVTVoYldWQmJtUkRhR2xzWkU1dlpHVnpLRlJsY20xcGJtRnNVM2x0WW05c1FrNUdUbTlrWlN3Z2NuVnNaVTVoYldVc0lHTm9hV3hrVG05a1pYTXBPeUI5WEc1OVhHNWNiaUpkTENKdVlXMWxjeUk2V3lKVVpYSnRhVzVoYkZONWJXSnZiRUpPUms1dlpHVWlMQ0p5WldkMWJHRnlSWGh3Y21WemMybHZiaUlzSW1kbGJtVnlZWFJsVUdGeWRDSXNJbXh2YjJ0QmFHVmhaQ0lzSW1OdmJuUmxiblFpTENKblpYUkRiMjUwWlc1MElpd2lkR1Z5YldsdVlXeFRlVzFpYjJ4UVlYSjBJaXdpVkdWeWJXbHVZV3hUZVcxaWIyeFFZWEowSWl3aVkyaHBiR1JPYjJSbGN5SXNJbWRsZEVOb2FXeGtUbTlrWlhNaUxDSm1hWEp6ZEVOb2FXeGtUbTlrWlNJc0ltWnBjbk4wSWl3aWRHVnliV2x1WVd4T2IyUmxJaXdpZEdWeWJXbHVZV3hPYjJSbFEyOXVkR1Z1ZENJc0ltMWhkR05vWlhNaUxDSnRZWFJqYUNJc0luTmxZMjl1WkUxaGRHTm9JaXdpYzJWamIyNWtJaXdpY21Wd2JHRmpaU0lzSW1aeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1pTENKeWRXeGxUbUZ0WlNJc0lrNXZibFJsY20xcGJtRnNUbTlrWlNKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPMEZCUldVc1IwRkJkMElzUTBGQmVFSXNXVUZCZDBJN1FVRkRja0lzUjBGQmIwTXNRMEZCY0VNc1pVRkJiME03UVVGRmNrTXNSMEZCZFVJc1EwRkJka0lzVFVGQmRVSTdPenM3T3pzN096czdPenM3T3pzNFJEdHpRenMyUkR0cFJUczdPenQzUlR0blJUczdPenM3T3pzN096dFZPenQzUWpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wbEJSV2hEUVN4eFFrRkJjVUlzYVVKQlFUTkNMRkZCUVZFN2NVUTdPMkZCUVVaQkxIRkNRVUZ4UWp0dlJEczdOa003ZFVSQlEzaERReXhEUVVGcFFpdzBRME5TYmtJc1EwUlJPRU03T3pzN08xbEJSVFZEUXl4SFFVRlpMRVZCUVZwQkxFTkJRVms3YlVKQlFWcEJMRkZCUVZFc1EwRkJVa0VzV1VGQldTeERRVUZEUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRuUWtGRGRrSXNSMEZCU3l4RFFVRkRReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZEUXl4VlFVRlZMRWxCUTNwQ1F5eHJRa0ZCYTBJc1IwRkJSeXhIUVVGSExFTkJRVU5ETEdWQlFXdENMRk5CUVVOSUxFOUJRVTg3WjBKQlJYcEVMRTFCUVUwc1EwRkJRMFVzYTBKQlFXdENPMWxCUXpOQ0xFTkJRVU03T3p0WlFVVkVSQ3hIUVVGVkxFVkJRVlpCTEVOQlFWVTdiVUpCUVZaQkxGRkJRVkVzUTBGQlVrRXNWVUZCVlN4SFFVRkhMRU5CUVVNN1owSkJRMW9zUjBGQlN5eERRVUZEUnl4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRFF5eGhRVUZoTEVsQlF5OUNReXhqUVVGakxFOUJRVWRETEUxQlFVc3NVVUZCUTBnc1ZVRkJWU3hIUVVOcVEwa3NXVUZCV1N4SFFVRkhSaXhqUVVGakxFVkJRemRDUnl4dFFrRkJiVUlzUjBGQlIwUXNXVUZCV1N4RFFVRkRVQ3hWUVVGVkxFbEJRemREVXl4UFFVRlBMRWRCUVVkRUxHMUNRVUZ0UWl4RFFVRkRSU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZEWkN4cFFrRkJhVUlzUjBGRE1VUmxMRmRCUVZjc1QwRkJSME1zVFVGQlRTeFRRVUZEU0N4UFFVRlBMRWRCUXpWQ1ZpeFBRVUZQTEVkQlFVZFpMRmRCUVZjc1EwRkJRMFVzVDBGQlR5eFZRVUZWTEVOQlFVa3NTMEZCUlVFc1QwRkJUeXhUUVVGVExFTkJRVWs3WjBKQlJYWkZMRTFCUVUwc1EwRkJRMlFzVDBGQlR6dFpRVU5vUWl4RFFVRkRPenM3TzFsQlJVMWxMRWRCUVhsQ0xFVkJRWHBDUVN4RFFVRjVRanR0UWtGQmFFTXNVVUZCVVN4RFFVRkVRU3g1UWtGQmVVSXNRMEZCUTBNc1VVRkJVU3hGUVVGRldpeFZRVUZWTEVWQlFVVXNRMEZCUXp0blFrRkJReXhOUVVGTkxFTkJRVU5oTEZsQlFXVXNVMEZCUTBZc2VVSkJRWGxDTEVOQlFVTnVRaXh4UWtGQmNVSXNSVUZCUlc5Q0xGRkJRVkVzUlVGQlJWb3NWVUZCVlR0WlFVRkhMRU5CUVVNN08wMDdPMFZCZEVKNFIyRXNXVUZCWlR0clFrRkJOME55UWl4eFFrRkJjVUlzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgVGVybWluYWxTeW1ib2xSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBzdHJpbmdMaXRlcmFsVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZSwgIC8vL1xuICAgICAgICAgIHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5vblRlcm1pbmFsUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgbG9va0FoZWFkID0gdHJ1ZTtcblxuICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSwgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lID0gUnVsZU5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsIFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihjaG9pY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb25UZXJtaW5hbFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oTm9XaGl0ZXNwYWNlTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IG5vV2hpdGVzcGFjZU5vZGUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBzdGF0ZS5pc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpO1xuXG4gICAgaWYgKCFuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4pIHtcbiAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBOb1doaXRlc3BhY2VOb2RlLmZyb21Ob3RoaW5nKCk7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKG5vV2hpdGVzcGFjZU5vZGUgIT09IG51bGwpXG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vV2hpdGVzcGFjZU5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShOb1doaXRlc3BhY2VQYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gTk9fV0hJVEVTUEFDRSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5cbmltcG9ydCB7IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBuZXcgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXhjbGFtYXRpb25NYXJrLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF90ZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvdGVybWluYWxcIikpO1xudmFyIF90ZXJtaW5hbDEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCIpKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgUmVndWxhckV4cHJlc3Npb25QYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoUmVndWxhckV4cHJlc3Npb25QYXJ0LCBUZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUmVndWxhckV4cHJlc3Npb25QYXJ0KTtcbiAgICBmdW5jdGlvbiBSZWd1bGFyRXhwcmVzc2lvblBhcnQocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZ3VsYXJFeHByZXNzaW9uUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgX3RoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoUmVndWxhckV4cHJlc3Npb25QYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKSwgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RNYXRjaCA9ICgwLCBfYXJyYXkpLmZpcnN0KG1hdGNoZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0TWF0Y2ggPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBfdGVybWluYWwxLmRlZmF1bHQuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gdGVybWluYWxOb2RlICE9PSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImFzU3RyaW5nXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYXNTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nID0gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbi50b1N0cmluZygpLCBzdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZzsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFJlZ3VsYXJFeHByZXNzaW9uUGFydC5wcm90b3R5cGUpLCBcImNsb25lXCIsIHRoaXMpLmNhbGwodGhpcywgUmVndWxhckV4cHJlc3Npb25QYXJ0LCB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBSZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG59KF90ZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFJlZ3VsYXJFeHByZXNzaW9uUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDNSbGNtMXBibUZzTDNKbFozVnNZWEpGZUhCeVpYTnphVzl1TG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzVwYlhCdmNuUWdWR1Z5YldsdVlXeFFZWEowSUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowTDNSbGNtMXBibUZzWENJN1hHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4T2IyUmxJR1p5YjIwZ1hDSXVMaTh1TGk5dWIyUmxMM1JsY20xcGJtRnNYQ0k3WEc1Y2JtbHRjRzl5ZENCN0lHWnBjbk4wSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlNaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblFnWlhoMFpXNWtjeUJVWlhKdGFXNWhiRkJoY25RZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmlrZ2UxeHVJQ0FnSUhOMWNHVnlLQ2s3WEc1Y2JpQWdJQ0IwYUdsekxuSmxaM1ZzWVhKRmVIQnlaWE56YVc5dUlEMGdjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNDdYRzRnSUgxY2JseHVJQ0J3WVhKelpTaHViMlJsY3l3Z2MzUmhkR1VzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnYkdWMElIQmhjbk5sWkR0Y2JseHVJQ0FnSUd4bGRDQjBaWEp0YVc1aGJFNXZaR1VnUFNCdWRXeHNPMXh1SUNBZ0lGeHVJQ0FnSUdOdmJuTjBJSE5oZG1Wa1NXNWtaWGdnUFNCemRHRjBaUzVuWlhSVFlYWmxaRWx1WkdWNEtDa3NYRzVjZEZ4MElDQWdJQ0FnYm1WNGRGTnBaMjVwWm1sallXNTBWRzlyWlc0Z1BTQnpkR0YwWlM1blpYUk9aWGgwVTJsbmJtbG1hV05oYm5SVWIydGxiaWdwTEZ4dVhIUmNkRngwWEhSY2RITnBaMjVwWm1sallXNTBWRzlyWlc0Z1BTQnVaWGgwVTJsbmJtbG1hV05oYm5SVWIydGxianNnTHk4dlhHNWNiaUFnSUNCcFppQW9jMmxuYm1sbWFXTmhiblJVYjJ0bGJpQWhQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZENBOUlITnBaMjVwWm1sallXNTBWRzlyWlc0dVoyVjBRMjl1ZEdWdWRDZ3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JXRjBZMmhsY3lBOUlHTnZiblJsYm5RdWJXRjBZMmdvZEdocGN5NXlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpazdYRzVjYmlBZ0lDQWdJR2xtSUNodFlYUmphR1Z6SUNFOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdacGNuTjBUV0YwWTJnZ1BTQm1hWEp6ZENodFlYUmphR1Z6S1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvWm1seWMzUk5ZWFJqYUNBOVBUMGdZMjl1ZEdWdWRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pTQTlJRlJsY20xcGJtRnNUbTlrWlM1bWNtOXRVMmxuYm1sbWFXTmhiblJVYjJ0bGJpaHphV2R1YVdacFkyRnVkRlJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIQmhjbk5sWkNBOUlDaDBaWEp0YVc1aGJFNXZaR1VnSVQwOUlHNTFiR3dwTzF4dVhHNGdJQ0FnYVdZZ0tIQmhjbk5sWkNrZ2UxeHVJQ0FnSUNBZ2JtOWtaWE11Y0hWemFDaDBaWEp0YVc1aGJFNXZaR1VwTzF4dVhHNGdJQ0FnSUNCcFppQW9ZMkZzYkdKaFkyc2dJVDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnY0dGeWMyVmtJRDBnWTJGc2JHSmhZMnNvS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvSVhCaGNuTmxaQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHNXZaR1Z6TG5CdmNDZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0NGd1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUhOMFlYUmxMbUpoWTJ0MGNtRmpheWh6WVhabFpFbHVaR1Y0S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjR0Z5YzJWa08xeHVJQ0I5WEc1Y2JpQWdZWE5UZEhKcGJtY29LU0I3WEc0Z0lDQWdZMjl1YzNRZ2NtVm5kV3hoY2tWNGNISmxjM05wYjI1VGRISnBibWNnUFNCMGFHbHpMbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVMblJ2VTNSeWFXNW5LQ2tzWEc1Y2RGeDBJQ0FnSUNBZ2MzUnlhVzVuSUQwZ2NtVm5kV3hoY2tWNGNISmxjM05wYjI1VGRISnBibWM3SUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhOMGNtbHVaenRjYmlBZ2ZWeHVYRzRnSUdOc2IyNWxLQ2tnZXlCeVpYUjFjbTRnYzNWd1pYSXVZMnh2Ym1Vb1VtVm5kV3hoY2tWNGNISmxjM05wYjI1UVlYSjBMQ0IwYUdsekxuSmxaM1ZzWVhKRmVIQnlaWE56YVc5dUtUc2dmVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbEpsWjNWc1lYSkZlSEJ5WlhOemFXOXVVR0Z5ZENJc0luSmxaM1ZzWVhKRmVIQnlaWE56YVc5dUlpd2ljR0Z5YzJVaUxDSnViMlJsY3lJc0luTjBZWFJsSWl3aVkyRnNiR0poWTJzaUxDSndZWEp6WldRaUxDSjBaWEp0YVc1aGJFNXZaR1VpTENKellYWmxaRWx1WkdWNElpd2laMlYwVTJGMlpXUkpibVJsZUNJc0ltNWxlSFJUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpWjJWMFRtVjRkRk5wWjI1cFptbGpZVzUwVkc5clpXNGlMQ0p6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpWTI5dWRHVnVkQ0lzSW1kbGRFTnZiblJsYm5RaUxDSnRZWFJqYUdWeklpd2liV0YwWTJnaUxDSm1hWEp6ZEUxaGRHTm9JaXdpWm1seWMzUWlMQ0pVWlhKdGFXNWhiRTV2WkdVaUxDSm1jbTl0VTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW5CMWMyZ2lMQ0p3YjNBaUxDSmlZV05yZEhKaFkyc2lMQ0poYzFOMGNtbHVaeUlzSW5KbFozVnNZWEpGZUhCeVpYTnphVzl1VTNSeWFXNW5JaXdpZEc5VGRISnBibWNpTENKemRISnBibWNpTENKamJHOXVaU0lzSWxSbGNtMXBibUZzVUdGeWRDSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDTzBGQlJWa3NSMEZCY1VJc1EwRkJja0lzVTBGQmNVSTdRVUZEY2tJc1IwRkJjVUlzUTBGQmNrSXNWVUZCY1VJN1FVRkZlRUlzUjBGQmRVSXNRMEZCZGtJc1RVRkJkVUk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN01FSTdPenM3T3pzN096czdVenM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN2QwTTdPenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJYaENRU3h4UWtGQmNVSXNhVUpCUVROQ0xGRkJRVkU3YTBRN08yRkJRVVpCTEhGQ1FVRnhRaXhEUVVNMVFrTXNhVUpCUVdsQ08yOUVPenRwUTBOU0wwSXNRMFJUV1R0alFVVklRU3hwUWtGQmFVSXNSMEZCUjBFc2FVSkJRV2xDTEVOQlFVTTdPenM3TzFsQlJ6ZERReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4RFFVRkRReXhMUVVGTExFVkJRVVZETEV0QlFVc3NSVUZCUlVNc1VVRkJVU3hGUVVGRkxFTkJRVU03WjBKQlF6ZENMRWRCUVVjc1EwRkJRME1zVFVGQlRUdG5Ra0ZGVml4SFFVRkhMRU5CUVVORExGbEJRVmtzUjBGQlJ5eEpRVUZKTzJkQ1FVVjJRaXhIUVVGTExFTkJRVU5ETEZWQlFWVXNSMEZCUjBvc1MwRkJTeXhEUVVGRFN5eGhRVUZoTEVsQlEyeERReXh2UWtGQmIwSXNSMEZCUjA0c1MwRkJTeXhEUVVGRFR5eDFRa0ZCZFVJc1NVRkRka1JETEdkQ1FVRm5RaXhIUVVGSFJpeHZRa0ZCYjBJc1JVRkJSU3hGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZGTjBNc1JVRkJSU3hGUVVGRlJTeG5Ra0ZCWjBJc1MwRkJTeXhKUVVGSkxFVkJRVVVzUTBGQlF6dHZRa0ZET1VJc1IwRkJTeXhEUVVGRFF5eFBRVUZQTEVkQlFVZEVMR2RDUVVGblFpeERRVUZEUlN4VlFVRlZMRWxCUTNKRFF5eFBRVUZQTEVkQlFVZEdMRTlCUVU4c1EwRkJRMGNzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUTJZc2FVSkJRV2xDTzI5Q1FVVndSQ3hGUVVGRkxFVkJRVVZqTEU5QlFVOHNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenQzUWtGRGNrSXNSMEZCU3l4RFFVRkRSU3hWUVVGVkxFOUJRVWRETEUxQlFVc3NVVUZCUTBnc1QwRkJUenQzUWtGRmFFTXNSVUZCUlN4RlFVRkZSU3hWUVVGVkxFdEJRVXRLTEU5QlFVOHNSVUZCUlN4RFFVRkRPelJDUVVNelFrNHNXVUZCV1N4SFFVRkhXU3hWUVVGWkxGTkJRVU5ETEc5Q1FVRnZRaXhEUVVGRFVpeG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8zZENRVU55UlN4RFFVRkRPMjlDUVVOSUxFTkJRVU03WjBKQlEwZ3NRMEZCUXp0blFrRkZSRTRzVFVGQlRTeEhRVUZKUXl4WlFVRlpMRXRCUVVzc1NVRkJTU3hCUVVGRExFTkJRVU03WjBKQlJXcERMRVZCUVVVc1JVRkJSVVFzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFoSUxFdEJRVXNzUTBGQlEydENMRWxCUVVrc1EwRkJRMlFzV1VGQldTeERRVUZETEVOQlFVTTdiMEpCUlhwQ0xFVkJRVVVzUlVGQlJVWXNVVUZCVVN4TFFVRkxMRWxCUVVrc1JVRkJSU3hEUVVGRE8zZENRVU4wUWtNc1RVRkJUU3hIUVVGSFJDeFJRVUZSTEVWQlFVVXNRMEZCUXp0M1FrRkZjRUlzUlVGQlJTeEhRVUZIUXl4TlFVRk5MRVZCUVVVc1EwRkJRenMwUWtGRFdrZ3NTMEZCU3l4RFFVRkRiVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTTdkMEpCUTJRc1EwRkJRenR2UWtGRFNDeERRVUZETzJkQ1FVTklMRU5CUVVNN1owSkJSVVFzUlVGQlJTeEhRVUZIYUVJc1RVRkJUU3hGUVVGRkxFTkJRVU03YjBKQlExcEdMRXRCUVVzc1EwRkJRMjFDTEZOQlFWTXNRMEZCUTJZc1ZVRkJWU3hEUVVGRExFTkJRVU03WjBKQlF6bENMRU5CUVVNN1owSkJSVVFzVFVGQlRTeERRVUZEUml4TlFVRk5PMWxCUTJZc1EwRkJRenM3TzFsQlJVUnJRaXhIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzUjBGQlN5eERRVUZEUXl4MVFrRkJkVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTjRRaXhwUWtGQmFVSXNRMEZCUTNsQ0xGRkJRVkVzU1VGRE0wUkRMRTFCUVUwc1IwRkJSMFlzZFVKQlFYVkNMRVZCUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3WjBKQlJYcERMRTFCUVUwc1EwRkJRMFVzVFVGQlRUdFpRVU5tTEVOQlFVTTdPenRaUVVWRVF5eEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVXhCTEZGQlFWRXNRMEZCVWtFc1MwRkJTeXhIUVVGSExFTkJRVU03WjBKQlFVTXNUVUZCVFN4elFrRjZSRWMxUWl4eFFrRkJjVUlzWVVGNVJHcENORUlzUTBGQlN5eFJRVUZZTEVsQlFVc3NZVUZCVHpWQ0xIRkNRVUZ4UWl4RlFVRkZMRWxCUVVrc1EwRkJRME1zYVVKQlFXbENPMWxCUVVjc1EwRkJRenM3VFRzN1JVRjZSRGRDTkVJc1UwRkJXVHRyUWtGQk1VTTNRaXh4UWtGQmNVSXNRU0o5IiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIikpO1xudmFyIF9yZWd1bGFyRXhwcmVzc2lvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5IGluIG9iaikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oTm9uVGVybWluYWxOb2RlKSB7XG4gICAgX2luaGVyaXRzKFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSwgTm9uVGVybWluYWxOb2RlKTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSk7XG4gICAgZnVuY3Rpb24gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlKCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlKTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVndWxhckV4cHJlc3Npb25cIiwgL15cXC8oKD86XFxcXC58W15cXC9dKSopXFwvJC8pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdlbmVyYXRlUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVndWxhckV4cHJlc3Npb24gPSB0aGlzLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksIHJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IG5ldyBfcmVndWxhckV4cHJlc3Npb24uZGVmYXVsdChyZWd1bGFyRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFJlZ3VsYXJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSwgZmlyc3RDaGlsZE5vZGUgPSAoMCwgX2FycmF5KS5maXJzdChjaGlsZE5vZGVzKSwgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLCBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSwgc2Vjb25kTWF0Y2ggPSAoMCwgX2FycmF5KS5zZWNvbmQobWF0Y2hlcyksIHBhdHRlcm4gPSBzZWNvbmRNYXRjaCwgcmVndWxhckV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKHBhdHRlcm4pOyAvLy9cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfbm9uVGVybWluYWwuZGVmYXVsdC5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZTtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5dWIyUmxMMkp1Wmk5eVpXZDFiR0Z5Ulhod2NtVnpjMmx2Ymk1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1YVcxd2IzSjBJRTV2YmxSbGNtMXBibUZzVG05a1pTQm1jbTl0SUZ3aUxpNHZMaTR2Ym05a1pTOXViMjVVWlhKdGFXNWhiRndpTzF4dWFXMXdiM0owSUZKbFozVnNZWEpGZUhCeVpYTnphVzl1VUdGeWRDQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRDOTBaWEp0YVc1aGJDOXlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsd2lPMXh1WEc1cGJYQnZjblFnZXlCbWFYSnpkQ3dnYzJWamIyNWtJSDBnWm5KdmJTQmNJaTR1THk0dUwzVjBhV3hwZEdsbGN5OWhjbkpoZVZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCU1pXZDFiR0Z5Ulhod2NtVnpjMmx2YmtKT1JrNXZaR1VnWlhoMFpXNWtjeUJPYjI1VVpYSnRhVzVoYkU1dlpHVWdlMXh1SUNCeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmlBOUlDOWVYRnd2S0NnL09seGNYRnd1ZkZ0ZVhGd3ZYU2txS1Z4Y0x5UXZPMXh1WEc0Z0lHZGxibVZ5WVhSbFVHRnlkQ2hzYjI5clFXaGxZV1FwSUh0Y2JpQWdJQ0JqYjI1emRDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpQTlJSFJvYVhNdVoyVjBVbVZuZFd4aGNrVjRjSEpsYzNOcGIyNG9LU3hjYmlBZ0lDQWdJQ0FnSUNCeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmxCaGNuUWdQU0J1WlhjZ1VtVm5kV3hoY2tWNGNISmxjM05wYjI1UVlYSjBLSEpsWjNWc1lYSkZlSEJ5WlhOemFXOXVLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblE3WEc0Z0lIMWNibHh1SUNCblpYUlNaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCamFHbHNaRTV2WkdWeklEMGdkR2hwY3k1blpYUkRhR2xzWkU1dlpHVnpLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pFNXZaR1VnUFNCbWFYSnpkQ2hqYUdsc1pFNXZaR1Z6S1N4Y2JpQWdJQ0FnSUNBZ0lDQjBaWEp0YVc1aGJFNXZaR1VnUFNCbWFYSnpkRU5vYVd4a1RtOWtaU3dnSUM4dkwxeHVJQ0FnSUNBZ0lDQWdJSFJsY20xcGJtRnNUbTlrWlVOdmJuUmxiblFnUFNCMFpYSnRhVzVoYkU1dlpHVXVaMlYwUTI5dWRHVnVkQ2dwTEZ4dUlDQWdJQ0FnSUNBZ0lHMWhkR05vWlhNZ1BTQjBaWEp0YVc1aGJFNXZaR1ZEYjI1MFpXNTBMbTFoZEdOb0tIUm9hWE11Y21WbmRXeGhja1Y0Y0hKbGMzTnBiMjRwTEZ4dUlDQWdJQ0FnSUNBZ0lITmxZMjl1WkUxaGRHTm9JRDBnYzJWamIyNWtLRzFoZEdOb1pYTXBMRnh1SUNBZ0lDQWdJQ0FnSUhCaGRIUmxjbTRnUFNCelpXTnZibVJOWVhSamFDd2dMeTh2WEc0Z0lDQWdJQ0FnSUNBZ2NtVm5kV3hoY2tWNGNISmxjM05wYjI0Z1BTQnVaWGNnVW1WblJYaHdLSEJoZEhSbGNtNHBPeUFnTHk4dlhHNWNiaUFnSUNCeVpYUjFjbTRnY21WbmRXeGhja1Y0Y0hKbGMzTnBiMjQ3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJWSjFiR1ZPWVcxbFFXNWtRMmhwYkdST2IyUmxjeWh5ZFd4bFRtRnRaU3dnWTJocGJHUk9iMlJsY3lrZ2V5QnlaWFIxY200Z1RtOXVWR1Z5YldsdVlXeE9iMlJsTG1aeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1vVW1WbmRXeGhja1Y0Y0hKbGMzTnBiMjVDVGtaT2IyUmxMQ0J5ZFd4bFRtRnRaU3dnWTJocGJHUk9iMlJsY3lrN0lIMWNibjFjYmx4dUlsMHNJbTVoYldWeklqcGJJbEpsWjNWc1lYSkZlSEJ5WlhOemFXOXVRazVHVG05a1pTSXNJbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJaXdpWjJWdVpYSmhkR1ZRWVhKMElpd2liRzl2YTBGb1pXRmtJaXdpWjJWMFVtVm5kV3hoY2tWNGNISmxjM05wYjI0aUxDSnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblFpTENKU1pXZDFiR0Z5Ulhod2NtVnpjMmx2YmxCaGNuUWlMQ0pqYUdsc1pFNXZaR1Z6SWl3aVoyVjBRMmhwYkdST2IyUmxjeUlzSW1acGNuTjBRMmhwYkdST2IyUmxJaXdpWm1seWMzUWlMQ0owWlhKdGFXNWhiRTV2WkdVaUxDSjBaWEp0YVc1aGJFNXZaR1ZEYjI1MFpXNTBJaXdpWjJWMFEyOXVkR1Z1ZENJc0ltMWhkR05vWlhNaUxDSnRZWFJqYUNJc0luTmxZMjl1WkUxaGRHTm9JaXdpYzJWamIyNWtJaXdpY0dGMGRHVnliaUlzSWxKbFowVjRjQ0lzSW1aeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1pTENKeWRXeGxUbUZ0WlNJc0lrNXZibFJsY20xcGJtRnNUbTlrWlNKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPMEZCUldVc1IwRkJkMElzUTBGQmVFSXNXVUZCZDBJN1FVRkRiRUlzUjBGQmRVTXNRMEZCZGtNc2EwSkJRWFZETzBGQlJUTkRMRWRCUVhWQ0xFTkJRWFpDTEUxQlFYVkNPenM3T3pzN096czdPenM3T3pzN09FUTdjME03TmtRN2FVVTdPenM3ZDBVN1owVTdPenM3T3pzN096czdWVHM3ZDBJN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdkVUk3TzBzN096czdNa0k3T3pzN096czdPM0ZHT3pzN096czdPenM3T3pzN2JVVTdPMmxFT3pzN096dEpRVVZvUTBFc2QwSkJRWGRDTEdsQ1FVRTVRaXhSUVVGUk8zZEVPenRoUVVGR1FTeDNRa0ZCZDBJN2RVUTdPelpETzNWRVFVTXpRME1zUTBGQmFVSXNOa05EVW01Q0xFTkVVU3RET3pzN096dFpRVVUzUTBNc1IwRkJXU3hGUVVGYVFTeERRVUZaTzIxQ1FVRmFRU3hSUVVGUkxFTkJRVkpCTEZsQlFWa3NRMEZCUTBNc1UwRkJVeXhGUVVGRkxFTkJRVU03WjBKQlEzWkNMRWRCUVVzc1EwRkJRMFlzYVVKQlFXbENMRWRCUVVjc1NVRkJTU3hEUVVGRFJ5eHZRa0ZCYjBJc1NVRkROME5ETEhGQ1FVRnhRaXhIUVVGSExFZEJRVWNzUTBGQlEwTXNhMEpCUVhGQ0xGTkJRVU5NTEdsQ1FVRnBRanRuUWtGRmVrVXNUVUZCVFN4RFFVRkRTU3h4UWtGQmNVSTdXVUZET1VJc1EwRkJRenM3TzFsQlJVUkVMRWRCUVc5Q0xFVkJRWEJDUVN4RFFVRnZRanR0UWtGQmNFSkJMRkZCUVZFc1EwRkJVa0VzYjBKQlFXOUNMRWRCUVVjc1EwRkJRenRuUWtGRGRFSXNSMEZCU3l4RFFVRkRSeXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZEUXl4aFFVRmhMRWxCUXk5Q1F5eGpRVUZqTEU5QlFVZERMRTFCUVVzc1VVRkJRMGdzVlVGQlZTeEhRVU5xUTBrc1dVRkJXU3hIUVVGSFJpeGpRVUZqTEVWQlF6ZENSeXh0UWtGQmJVSXNSMEZCUjBRc1dVRkJXU3hEUVVGRFJTeFZRVUZWTEVsQlF6ZERReXhQUVVGUExFZEJRVWRHTEcxQ1FVRnRRaXhEUVVGRFJ5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRaQ3hwUWtGQmFVSXNSMEZETVVSbExGZEJRVmNzVDBGQlIwTXNUVUZCVFN4VFFVRkRTQ3hQUVVGUExFZEJRelZDU1N4UFFVRlBMRWRCUVVkR0xGZEJRVmNzUlVGRGNrSm1MR2xDUVVGcFFpeEhRVUZITEVkQlFVY3NRMEZCUTJ0Q0xFMUJRVTBzUTBGQlEwUXNUMEZCVHl4SFFVRkpMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVZ1UkN4TlFVRk5MRU5CUVVOcVFpeHBRa0ZCYVVJN1dVRkRNVUlzUTBGQlF6czdPenRaUVVWTmJVSXNSMEZCZVVJc1JVRkJla0pCTEVOQlFYbENPMjFDUVVGb1F5eFJRVUZSTEVOQlFVUkJMSGxDUVVGNVFpeERRVUZEUXl4UlFVRlJMRVZCUVVWa0xGVkJRVlVzUlVGQlJTeERRVUZETzJkQ1FVRkRMRTFCUVUwc1EwRkJRMlVzV1VGQlpTeFRRVUZEUml4NVFrRkJlVUlzUTBGQlEzQkNMSGRDUVVGM1FpeEZRVUZGY1VJc1VVRkJVU3hGUVVGRlpDeFZRVUZWTzFsQlFVY3NRMEZCUXpzN1RUczdSVUYyUW5oSFpTeFpRVUZsTzJ0Q1FVRm9SSFJDTEhkQ1FVRjNRaXhCSW4wPSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodGVybWluYWxTeW1ib2xDb250ZW50KSB7XG4gICAgY29uc3QgY29udGVudCA9IHRlcm1pbmFsU3ltYm9sQ29udGVudCwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHF1ZXN0aW9uTWFyaywgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcGx1cywgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBhc3RlcmlzaywgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24oemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25vblRlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiKSk7XG52YXIgX3NpZ25pZmljYW50VG9rZW5UeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBfaW5oZXJpdHMoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBOb25UZXJtaW5hbE5vZGUpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlKTtcbiAgICBmdW5jdGlvbiBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUoKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWd1bGFyRXhwcmVzc2lvblwiLCAvXlxcWyhbXlxcXV0rKV0kLyk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2VuZXJhdGVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgICAgICAgICAgICAgIHZhciBzaWduaWZpY2FudFRva2VuVHlwZSA9IHRoaXMuZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSwgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IF9zaWduaWZpY2FudFRva2VuVHlwZS5kZWZhdWx0KHNpZ25pZmljYW50VG9rZW5UeXBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTaWduaWZpY2FudFRva2VuVHlwZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLCBmaXJzdENoaWxkTm9kZSA9ICgwLCBfYXJyYXkpLmZpcnN0KGNoaWxkTm9kZXMpLCB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLCBzZWNvbmRNYXRjaCA9ICgwLCBfYXJyYXkpLnNlY29uZChtYXRjaGVzKSwgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2Rlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX25vblRlcm1pbmFsLmRlZmF1bHQuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcbm1vZHVsZS5leHBvcnRzID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5dWIyUmxMMkp1Wmk5emFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pTNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKY0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dWFXMXdiM0owSUU1dmJsUmxjbTFwYm1Gc1RtOWtaU0JtY205dElGd2lMaTR2TGk0dmJtOWtaUzl1YjI1VVpYSnRhVzVoYkZ3aU8xeHVhVzF3YjNKMElGTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxVR0Z5ZENCbWNtOXRJRndpTGk0dkxpNHZjR0Z5ZEM5MFpYSnRhVzVoYkM5emFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWd2lPMXh1WEc1cGJYQnZjblFnZXlCbWFYSnpkQ3dnYzJWamIyNWtJSDBnWm5KdmJTQmNJaTR1THk0dUwzVjBhV3hwZEdsbGN5OWhjbkpoZVZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCVGFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pVSk9SazV2WkdVZ1pYaDBaVzVrY3lCT2IyNVVaWEp0YVc1aGJFNXZaR1VnZTF4dUlDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpQTlJQzllWEZ4YktGdGVYRnhkWFNzcFhTUXZPMXh1WEc0Z0lHZGxibVZ5WVhSbFVHRnlkQ2hzYjI5clFXaGxZV1FwSUh0Y2JpQWdJQ0JqYjI1emRDQnphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaU0E5SUhSb2FYTXVaMlYwVTJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVb0tTeGNiaUFnSUNBZ0lDQWdJQ0J6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlZCaGNuUWdQU0J1WlhjZ1UybG5ibWxtYVdOaGJuUlViMnRsYmxSNWNHVlFZWEowS0hOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbEtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCemFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWQmhjblE3WEc0Z0lIMWNibHh1SUNCblpYUlRhV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaU2dwSUh0Y2JpQWdJQ0JqYjI1emRDQmphR2xzWkU1dlpHVnpJRDBnZEdocGN5NW5aWFJEYUdsc1pFNXZaR1Z6S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdabWx5YzNSRGFHbHNaRTV2WkdVZ1BTQm1hWEp6ZENoamFHbHNaRTV2WkdWektTeGNiaUFnSUNBZ0lDQWdJQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQm1hWEp6ZEVOb2FXeGtUbTlrWlN3Z0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pVTnZiblJsYm5RZ1BTQjBaWEp0YVc1aGJFNXZaR1V1WjJWMFEyOXVkR1Z1ZENncExGeHVJQ0FnSUNBZ0lDQWdJRzFoZEdOb1pYTWdQU0IwWlhKdGFXNWhiRTV2WkdWRGIyNTBaVzUwTG0xaGRHTm9LSFJvYVhNdWNtVm5kV3hoY2tWNGNISmxjM05wYjI0cExGeHVJQ0FnSUNBZ0lDQWdJSE5sWTI5dVpFMWhkR05vSUQwZ2MyVmpiMjVrS0cxaGRHTm9aWE1wTEZ4dUlDQWdJQ0FnSUNBZ0lITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxJRDBnYzJWamIyNWtUV0YwWTJnN0lDOHZMMXh1WEc0Z0lDQWdjbVYwZFhKdUlITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxU2RXeGxUbUZ0WlVGdVpFTm9hV3hrVG05a1pYTW9jblZzWlU1aGJXVXNJR05vYVd4a1RtOWtaWE1wSUhzZ2NtVjBkWEp1SUU1dmJsUmxjbTFwYm1Gc1RtOWtaUzVtY205dFVuVnNaVTVoYldWQmJtUkRhR2xzWkU1dlpHVnpLRk5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsUWs1R1RtOWtaU3dnY25Wc1pVNWhiV1VzSUdOb2FXeGtUbTlrWlhNcE95QjlYRzU5WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1UybG5ibWxtYVdOaGJuUlViMnRsYmxSNWNHVkNUa1pPYjJSbE8xeHVYRzVjYmlKZExDSnVZVzFsY3lJNld5SlRhV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVUpPUms1dlpHVWlMQ0p5WldkMWJHRnlSWGh3Y21WemMybHZiaUlzSW1kbGJtVnlZWFJsVUdGeWRDSXNJbXh2YjJ0QmFHVmhaQ0lzSW5OcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbElpd2laMlYwVTJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVaUxDSnphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVkJoY25RaUxDSlRhV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVkJoY25RaUxDSmphR2xzWkU1dlpHVnpJaXdpWjJWMFEyaHBiR1JPYjJSbGN5SXNJbVpwY25OMFEyaHBiR1JPYjJSbElpd2labWx5YzNRaUxDSjBaWEp0YVc1aGJFNXZaR1VpTENKMFpYSnRhVzVoYkU1dlpHVkRiMjUwWlc1MElpd2laMlYwUTI5dWRHVnVkQ0lzSW0xaGRHTm9aWE1pTENKdFlYUmphQ0lzSW5ObFkyOXVaRTFoZEdOb0lpd2ljMlZqYjI1a0lpd2labkp2YlZKMWJHVk9ZVzFsUVc1a1EyaHBiR1JPYjJSbGN5SXNJbkoxYkdWT1lXMWxJaXdpVG05dVZHVnliV2x1WVd4T2IyUmxJaXdpYlc5a2RXeGxJaXdpWlhod2IzSjBjeUpkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ08wRkJSV1VzUjBGQmQwSXNRMEZCZUVJc1dVRkJkMEk3UVVGRFppeEhRVUV3UXl4RFFVRXhReXh4UWtGQk1FTTdRVUZGYWtRc1IwRkJkVUlzUTBGQmRrSXNUVUZCZFVJN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdPenM3T3p0Vk96dDNRanM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJXaERRU3d5UWtGQk1rSXNhVUpCUVdwRExGRkJRVkU3TWtRN08yRkJRVVpCTERKQ1FVRXlRanN3UkRzN05rTTdkVVJCUXpsRFF5eERRVUZwUWl4dlEwTlNia0lzUTBSUmMwTTdPenM3TzFsQlJYQkRReXhIUVVGWkxFVkJRVnBCTEVOQlFWazdiVUpCUVZwQkxGRkJRVkVzUTBGQlVrRXNXVUZCV1N4RFFVRkRReXhUUVVGVExFVkJRVVVzUTBGQlF6dG5Ra0ZEZGtJc1IwRkJTeXhEUVVGRFF5eHZRa0ZCYjBJc1IwRkJSeXhKUVVGSkxFTkJRVU5ETEhWQ1FVRjFRaXhKUVVOdVJFTXNkMEpCUVhkQ0xFZEJRVWNzUjBGQlJ5eERRVUZEUXl4eFFrRkJkMElzVTBGQlEwZ3NiMEpCUVc5Q08yZENRVVZzUml4TlFVRk5MRU5CUVVORkxIZENRVUYzUWp0WlFVTnFReXhEUVVGRE96czdXVUZGUkVRc1IwRkJkVUlzUlVGQmRrSkJMRU5CUVhWQ08yMUNRVUYyUWtFc1VVRkJVU3hEUVVGU1FTeDFRa0ZCZFVJc1IwRkJSeXhEUVVGRE8yZENRVU42UWl4SFFVRkxMRU5CUVVOSExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTkRMR0ZCUVdFc1NVRkRMMEpETEdOQlFXTXNUMEZCUjBNc1RVRkJTeXhSUVVGRFNDeFZRVUZWTEVkQlEycERTU3haUVVGWkxFZEJRVWRHTEdOQlFXTXNSVUZETjBKSExHMUNRVUZ0UWl4SFFVRkhSQ3haUVVGWkxFTkJRVU5GTEZWQlFWVXNTVUZETjBORExFOUJRVThzUjBGQlIwWXNiVUpCUVcxQ0xFTkJRVU5ITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVObUxHbENRVUZwUWl4SFFVTXhSR2RDTEZkQlFWY3NUMEZCUjBNc1RVRkJUU3hUUVVGRFNDeFBRVUZQTEVkQlF6VkNXQ3h2UWtGQmIwSXNSMEZCUjJFc1YwRkJWeXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVTNReXhOUVVGTkxFTkJRVU5pTEc5Q1FVRnZRanRaUVVNM1FpeERRVUZET3pzN08xbEJSVTFsTEVkQlFYbENMRVZCUVhwQ1FTeERRVUY1UWp0dFFrRkJhRU1zVVVGQlVTeERRVUZFUVN4NVFrRkJlVUlzUTBGQlEwTXNVVUZCVVN4RlFVRkZXaXhWUVVGVkxFVkJRVVVzUTBGQlF6dG5Ra0ZCUXl4TlFVRk5MRU5CUVVOaExGbEJRV1VzVTBGQlEwWXNlVUpCUVhsQ0xFTkJRVU51UWl3eVFrRkJNa0lzUlVGQlJXOUNMRkZCUVZFc1JVRkJSVm9zVlVGQlZUdFpRVUZITEVOQlFVTTdPMDA3TzBWQmRFSjRSMkVzV1VGQlpUdHJRa0ZCYmtSeVFpd3lRa0ZCTWtJc1FUdEJRWGxDYUVSelFpeE5RVUZOTEVOQlFVTkRMRTlCUVU4c1IwRkJSM1pDTERKQ1FVRXlRaXhEUVVGREluMD0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB0eXBlVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0eXBlVHlwZSwgIC8vL1xuICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHR5cGVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU1hcEZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBydWxlTWFwID0ge307XG5cbiAgcnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBydWxlTWFwW3J1bGVOYW1lXSA9IHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlTWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IGZpcnN0UnVsZSA9IGZpcnN0KHJ1bGVzKSxcbiAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFN0YXRlIGZyb20gXCIuLi9zdGF0ZVwiO1xuaW1wb3J0IE5hbWVSdWxlIGZyb20gXCIuLi9ydWxlL25hbWVcIjtcbmltcG9ydCBQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZVwiO1xuaW1wb3J0IEVycm9yUnVsZSBmcm9tIFwiLi4vcnVsZS9lcnJvclwiO1xuaW1wb3J0IERvY3VtZW50UnVsZSBmcm9tIFwiLi4vcnVsZS9kb2N1bWVudFwiO1xuaW1wb3J0IFJ1bGVOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9ydWxlTmFtZVwiO1xuaW1wb3J0IFdpbGRjYXJkUnVsZSBmcm9tIFwiLi4vcnVsZS93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVJ1bGUgZnJvbSBcIi4uL3J1bGUvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvcXVhbnRpZmllclwiO1xuaW1wb3J0IERlZmluaXRpb25SdWxlIGZyb20gXCIuLi9ydWxlL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uc1J1bGUgZnJvbSBcIi4uL3J1bGUvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL3Rlcm1pbmFsUGFydFwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNSdWxlIGZyb20gXCIuLi9ydWxlL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFJ1bGUgZnJvbSBcIi4uL3J1bGUvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL25vblRlcm1pbmFsUGFydFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4uL3J1bGUvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9sb29rQWhlYWRNb2RpZmllclwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyXCI7XG5pbXBvcnQgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvb25lT3JNb3JlUXVhbnRpZmllclwiO1xuaW1wb3J0IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS96ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBmcm9tIFwiLi4vcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBzdGFydFJ1bGVGcm9tUnVsZXMsIHJ1bGVNYXBGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJORlBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICAgIHRoaXMuc3RhcnRSdWxlID0gc3RhcnRSdWxlO1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBnZXRTdGFydFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRSdWxlO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgcGFyc2UodG9rZW5zLCBydWxlID0gdGhpcy5zdGFydFJ1bGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGwsXG4gICAgICAgICAgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayksXG4gICAgICAgICAgbm9kZSA9IHJ1bGVOb2RlOyAvLy9cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cblx0cnVsZXNGcm9tVG9rZW5zKHRva2Vucykge1xuXHQgIGxldCBydWxlcztcblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnBhcnNlKHRva2Vucyk7XG5cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBub2RlLmApO1xuICAgIH1cblxuICAgIHJ1bGVzID0gbm9kZS5nZW5lcmF0ZVJ1bGVzKFJ1bGUpO1xuXG4gICAgY29uc3QgcnVsZXNMZW5ndGggPSBydWxlcy5sZW5ndGg7XG5cbiAgICBpZiAocnVsZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIHJ1bGVzLmApO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWVSdWxlID0gbmV3IE5hbWVSdWxlKCksXG4gICAgICAgICAgcGFydFJ1bGUgPSBuZXcgUGFydFJ1bGUoKSxcbiAgICAgICAgICBydWxlUnVsZSA9IG5ldyBSdWxlUnVsZSgpLFxuICAgICAgICAgIGVycm9yUnVsZSA9IG5ldyBFcnJvclJ1bGUoKSxcbiAgICAgICAgICBkb2N1bWVudFJ1bGUgPSBuZXcgRG9jdW1lbnRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWVSdWxlID0gbmV3IFJ1bGVOYW1lUnVsZSgpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZSA9IG5ldyBXaWxkY2FyZFJ1bGUoKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlID0gbmV3IEVuZE9mTGluZVJ1bGUoKSxcbiAgICAgICAgICBxdWFudGlmaWVyUnVsZSA9IG5ldyBRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IERlZmluaXRpb25SdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlID0gbmV3IERlZmluaXRpb25zUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlID0gbmV3IENob2ljZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlID0gbmV3IFRlcm1pbmFsU3ltYm9sUnVsZSgpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlID0gbmV3IE5vV2hpdGVzcGFjZVBhcnRSdWxlKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUnVsZSgpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGUoKSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlID0gbmV3IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlKCk7XG5cbiAgICBsZXQgcnVsZXMgPSBbXG4gICAgICBkb2N1bWVudFJ1bGUsXG4gICAgICBydWxlUnVsZSxcbiAgICAgIG5hbWVSdWxlLFxuICAgICAgZGVmaW5pdGlvbnNSdWxlLFxuICAgICAgZGVmaW5pdGlvblJ1bGUsXG4gICAgICBwYXJ0UnVsZSxcbiAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICB0ZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUsXG4gICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlLFxuICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUsXG4gICAgICBydWxlTmFtZVJ1bGUsXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUsXG4gICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUsXG4gICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGUsXG4gICAgICBlbmRPZkxpbmVSdWxlLFxuICAgICAgd2lsZGNhcmRSdWxlLFxuICAgICAgcXVhbnRpZmllclJ1bGUsXG4gICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUsXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlLFxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICBlcnJvclJ1bGVcbiAgICBdO1xuXG4gICAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgYm5mUGFyc2VyID0gbmV3IEJORlBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuICAgIFxuICAgIHJldHVybiBibmZQYXJzZXI7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gIGV4cHJlc3Npb24gIDo6PSBleHByZXNzaW9uXyBvcGVyYXRvciBleHByZXNzaW9uIGV4cHJlc3Npb25+KlxuXG4gICAgICAgICAgICAgICAgfCBleHByZXNzaW9uX1xuXG4gICAgICAgICAgICAgICAgO1xuXG4gIG9wZXJhdG9yICAgIDo6PSBcIitcIlxuXG4gICAgICAgICAgICAgICAgfCBcIi1cIlxuXG4gICAgICAgICAgICAgICAgfCBcIi9cIlxuXG4gICAgICAgICAgICAgICAgfCBcIipcIlxuXG4gICAgICAgICAgICAgICAgO1xuXG4gIHRlcm0gICAgICAgIDo6PSAvXFxcXGQrLyA7XG5cbiAgZXhwcmVzc2lvbl8gOjo9IFwiKFwiIGV4cHJlc3Npb24gXCIpXCJcblxuICAgICAgICAgICAgICAgIHwgdGVybVxuXG4gICAgICAgICAgICAgICAgO1xuXG4gIGV4cHJlc3Npb25+IDo6PSBvcGVyYXRvciBleHByZXNzaW9uIDtcbiAgXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJORkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQk5GUGFyc2VyIGZyb20gXCIuLi9ibmYvcGFyc2VyXCI7XG5cbmltcG9ydCB7IHN0YXJ0UnVsZUZyb21SdWxlcywgcnVsZU1hcEZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuY29uc3QgYm5mTGV4ZXIgPSBCTkZMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgYm5mUGFyc2VyID0gQk5GUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21CTkYoYm5mKSB7XG4gIGNvbnN0IHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgcnVsZXMgPSBibmZQYXJzZXIucnVsZXNGcm9tVG9rZW5zKHRva2Vucyk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcblxuaW1wb3J0IHsgcnVsZXNGcm9tQk5GLCBwYXJzZXJGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25QYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBTdGF0ZS5mcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHRoaXMucnVsZU1hcCksXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spLFxuICAgICAgICAgIG5vZGUgPSBydWxlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xuICAgIGNvbnN0IHsgYm5mIH0gPSBDbGFzcyxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKENsYXNzLCBibmYpIHtcbiAgICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gICAgY29uc3QgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgQ29tbW9uUGFyc2VyIGZyb20gXCIuLi9jb21tb24vcGFyc2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2ljUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQmFzaWNQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihCYXNpY1BhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQmFzaWNQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFdpbGRjYXJkUGFydCxcbiAgRW5kT2ZMaW5lUGFydCxcbiAgVGVybWluYWxTeW1ib2xQYXJ0LFxuICBSZWd1bGFyRXhwcmVzc2lvblBhcnQsXG4gIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCxcbiAgUnVsZU5hbWVQYXJ0LFxuICBPcHRpb25hbFBhcnRQYXJ0LFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0LFxuICBPbmVPck1vcmVQYXJ0c1BhcnQsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gIENob2ljZU9mUGFydHNQYXJ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORlBhcnNlciB9IGZyb20gXCIuL2JuZi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNQYXJzZXIgfSBmcm9tIFwiLi9iYXNpYy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhcnRzIH0gZnJvbSBcIi4vcGFydHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFydFR5cGVzIH0gZnJvbSBcIi4vcGFydFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlZmluaXRpb24gfSBmcm9tIFwiLi9kZWZpbml0aW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvdGVybWluYWxcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuXG4gICAgc3R5bGVzaGVldCAgICAgICAgICAgICAgICAgOjo9ICggbWVkaWEgfCBydWxlU2V0IHwgZGVjbGFyYXRpb24gfCBlcnJvciApKyA7XG5cblxuXG5cblxuICAgIG1lZGlhICAgICAgICAgICAgICAgICAgICAgIDo6PSBcIkBtZWRpYVwiIG1lZGlhUXVlcmllcyBcIntcIiAoIHJ1bGVTZXQgfCBkZWNsYXJhdGlvbiApKiBcIn1cIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJpZXMgICAgICAgICAgICAgICA6Oj0gIG1lZGlhUXVlcnkgKCBcIixcIiBtZWRpYVF1ZXJ5ICkqIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhUXVlcnkgICAgICAgICAgICAgICAgIDo6PSAgXCJub3RcIj8gKCBcIm9ubHlcIj8gbWVkaWFUeXBlIFwiYW5kXCIgKT8gbWVkaWFFeHByZXNzaW9uICggXCJhbmRcIiBtZWRpYUV4cHJlc3Npb24gKSogO1xuXG5cbiAgICBtZWRpYVR5cGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiYWxsXCIgfCBcInByaW50XCIgfCBcInNjcmVlblwiIHwgXCJzcGVlY2hcIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYUV4cHJlc3Npb24gICAgICAgICAgICA6Oj0gIFwiKFwiIFtpZGVudGlmaWVyXSAoIFwiOlwiIGV4cHJlc3Npb24gKT8gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBydWxlU2V0ICAgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9ycyBcIntcIiBkZWNsYXJhdGlvbiogXCJ9XCIgO1xuICAgIFxuICAgIFxuICAgIHNlbGVjdG9ycyAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3IgKCBcIixcIiBzZWxlY3RvciApKiA7XG5cblxuICAgIHNlbGVjdG9yICAgICAgICAgICAgICAgICAgIDo6PSAgKCBjbGFzcyB8IHBzZXVkb0NsYXNzIHwgcHNldWRvRWxlbWVudCB8IGF0dHJpYnV0ZSApKyA7XG5cblxuXG5cblxuICAgIGRlY2xhcmF0aW9uICAgICAgICAgICAgICAgIDo6PSAgcHJvcGVydHkgXCI6XCIgZXhwcmVzc2lvbiAoIFwiLFwiIGV4cHJlc3Npb24gKSogcHJpb3JpdHk/IFwiO1wiIDtcblxuXG4gICAgY2xhc3MgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcIi5cIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcHNldWRvQ2xhc3MgICAgICAgICAgICAgICAgOjo9ICBcIjpcIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcHNldWRvRWxlbWVudCAgICAgICAgICAgICAgOjo9ICBcIjo6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBhcmVudGhlc2lzZWRTZWxlY3RvciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIoXCIgc2VsZWN0b3IgPE5PX1dISVRFU1BBQ0U+XCIpXCIgO1xuXG5cbiAgICBhdHRyaWJ1dGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiW1wiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIj1cIiB8IFwifj1cIiB8IFwifD1cIiApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbaWRlbnRpZmllcl0gfCBbc3RyaW5nLWxpdGVyYWxdIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJdXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICBwcm9wZXJ0eSAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cblxuICAgIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgIDo6PSAgdGVybSAoIFwiLFwiPyB0ZXJtICkqIDtcblxuXG4gICAgcHJpb3JpdHkgICAgICAgICAgICAgICAgICAgOjo9ICBcIiFpbXBvcnRhbnRcIiA7XG5cblxuXG5cblxuICAgIHRlcm0gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW3VuYXJ5LW9wZXJhdG9yXT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW3BlcmNlbnRhZ2VdIHwgW2ZyZXF1ZW5jeV0gfCBbZnJhY3Rpb25dIHwgW2xlbmd0aF0gfCBbYW5nbGVdIHwgW3JlbXNdIHwgW2Vtc10gfCBbdGltZV0gfCBbbnVtYmVyXSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyaW5nLWxpdGVyYWxdK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG91cl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHVyaSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ1cmxcIjxOT19XSElURVNQQUNFPlwiKFwiIFtzdHJpbmctbGl0ZXJhbF0gXCIpXCIgO1xuXG5cbiAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXTxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhDU1NQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihDU1NQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKENTU1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBjbGVhciwgcHVzaCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltKGFycmF5LCBzdGFydEluZGV4LCBlbmRJbmRleCkge1xuICBsZXQgc3RhcnQsXG4gICAgICBkZWxldGVDb3VudDtcblxuICBpZiAoZW5kSW5kZXggIT09IEluZmluaXR5KSB7XG4gICAgc3RhcnQgPSBlbmRJbmRleCArIDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQpO1xuICB9XG5cbiAgc3RhcnQgPSAwO1xuICBkZWxldGVDb3VudCA9IHN0YXJ0SW5kZXg7XG5cbiAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgLi4uZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGFycmF5LmluY2x1ZGVzKGVsZW1lbnQpKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgY2xlYXIsIHRyaW0sIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcHJlYWQge1xuICBjb25zdHJ1Y3RvcihzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKSB7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmVuZEluZGV4ID0gZW5kSW5kZXg7XG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWU7XG4gIH1cblxuICBhZGp1c3ROb2Rlcyhub2Rlcykge1xuICAgIGlmICh0aGlzLnVuaXF1ZSkge1xuICAgICAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChub2Rlc0xlbmd0aCA+IDEpIHtcbiAgICAgICAgY2xlYXIobm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cmltKG5vZGVzLCB0aGlzLnN0YXJ0SW5kZXgsIHRoaXMuZW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSB7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICBlbmRJbmRleCA9IEluZmluaXR5LFxuICAgICAgICB1bmlxdWUgPSBmYWxzZTtcblxuICAgIGlmIChzcHJlYWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiA9PT0gRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIpIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoXFxkKyk/KFxcLlxcLlxcLik/KFxcZCspP10vLFxuICAgICAgICAgICAgICBtYXRjaGVzID0gc3ByZWFkRXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpLFxuICAgICAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKTtcblxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0YXJ0SW5kZXggPSBwYXJzZUludChzZWNvbmRNYXRjaCk7XG5cbiAgICAgICAgICBpZiAodGhpcmRNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvdXJ0aE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuXG5pbXBvcnQgeyBpbmNsdWRlcywgcHVzaCwgY2xlYXIsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuY29uc3QgeyBXSUxEQ0FSRF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5IHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcykge1xuICAgIHRoaXMucnVsZU5hbWVzID0gcnVsZU5hbWVzO1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgICB0aGlzLnNwcmVhZCA9IHNwcmVhZDtcbiAgICB0aGlzLnN1YlF1ZXJ5ID0gc3ViUXVlcnk7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gICAgdGhpcy5pbmZpbml0ZURlc2NlbnQgPSBpbmZpbml0ZURlc2NlbnQ7XG4gICAgdGhpcy5pbnRlcm1lZGlhdGVOb2RlcyA9IGludGVybWVkaWF0ZU5vZGVzO1xuICB9XG5cbiAgZXhlY3V0ZShub2RlLCBkZXB0aCA9IDAsIG1heGltdW1EZXB0aCA9IHRoaXMubWF4aW11bURlcHRoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcblxuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIHRoaXMuZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHRoaXMuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgY2xlYXIodGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gIH1cblxuICBmaW5kKG5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBtYXhpbXVtRGVwdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIG5vZGVOb25UZXJtaW5hbE5vZGUgPSAhbm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIGxldCBmb3VuZDtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0eXBlID0gdGVybWluYWxOb2RlLmdldFR5cGUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnR5cGVzLCB0eXBlLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy5ydWxlTmFtZXMsIHJ1bGVOYW1lLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLnB1c2goaW50ZXJtZWRpYXRlTm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5maW5pdGVEZXNjZW50KSB7XG4gICAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gdGhpcy5maW5kKGNoaWxkTm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgdGhpcy5zcHJlYWQuYWRqdXN0Tm9kZXModGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG5cbiAgICBpZiAodGhpcy5zdWJRdWVyeSA9PT0gbnVsbCkge1xuICAgICAgcHVzaChub2RlcywgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMuZm9yRWFjaCgoaW50ZXJtZWRpYXRlTm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBpbnRlcm1lZGlhdGVOb2RlTm9uVGVybWluYWxOb2RlID0gaW50ZXJtZWRpYXRlTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgIGlmIChpbnRlcm1lZGlhdGVOb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgZGVwdGgrKztcblxuICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeS5jbGVhcigpO1xuXG4gICAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuc3ViUXVlcnkuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVN1YkV4cHJlc3Npb25BbmRUeXBlcyhzdWJFeHByZXNpb24sIHR5cGVzKSB7XG4gICAgbGV0IHF1ZXJ5ID0gbnVsbDtcblxuICAgIGlmIChzdWJFeHByZXNpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVzTGVuZ3RoID0gdHlwZXMubGVuZ3RoO1xuXG4gICAgICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHN1YkV4cHJlc2lvbjsgIC8vL1xuXG4gICAgICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgc3RhdGljIGZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gICAgY29uc3QgcmVnRXhwID0gL15cXC8oXFwvKT8oW14vXFxbIV0rKShcXFtbXlxcXV0rXXwhKT8oXFwvLiopPyQvLFxuICAgICAgICAgIG1hdGNoZXMgPSBleHByZXNzaW9uLm1hdGNoKHJlZ0V4cCksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpLFxuICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpLFxuICAgICAgICAgIGZpZnRoTWF0Y2ggPSBmaWZ0aChtYXRjaGVzKSxcbiAgICAgICAgICBzZWxlY3RvcnMgPSB0aGlyZE1hdGNoLnNwbGl0KFwifFwiKSxcbiAgICAgICAgICBzdWJFeHByZXNzaW9uID0gZmlmdGhNYXRjaCB8fCBudWxsLFxuICAgICAgICAgIHNwcmVhZEV4cHJlc3Npb24gPSBmb3VydGhNYXRjaCB8fCBudWxsLFxuICAgICAgICAgIHR5cGVzID0gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyksXG4gICAgICAgICAgcnVsZU5hbWVzID0gcnVsZU5hbWVzRnJvbVNlbGVjdG9yc0FuZFR5cGVzKHNlbGVjdG9ycywgdHlwZXMpLFxuICAgICAgICAgIHNwcmVhZCA9IFNwcmVhZC5mcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSxcbiAgICAgICAgICBzdWJRdWVyeSA9IFF1ZXJ5LmZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzc2lvbiwgdHlwZXMpLFxuICAgICAgICAgIGluZmluaXRlRGVzY2VudCA9IChzZWNvbmRNYXRjaCA9PT0gXCIvXCIpLCAgLy8vXG4gICAgICAgICAgaW50ZXJtZWRpYXRlTm9kZXMgPSBbXSxcbiAgICAgICAgICBxdWVyeSA9IG5ldyBRdWVyeShydWxlTmFtZXMsIHR5cGVzLCBzcHJlYWQsIHN1YlF1ZXJ5LCBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIFxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0eXBlc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IHR5cGVzID0gW107XG5cbiAgc2VsZWN0b3JzLmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3JUeXBlU2VsZWN0b3IgPSBpc1NlbGVjdG9yVHlwZVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgIGlmIChzZWxlY3RvclR5cGVTZWxlY3Rvcikge1xuICAgICAgY29uc3QgdHlwZSA9IHNlbGVjdG9yLnN1YnN0cmluZygxKTtcblxuICAgICAgdHlwZXMucHVzaCh0eXBlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZnVuY3Rpb24gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3RvcikgeyByZXR1cm4gL15ALy50ZXN0KHNlbGVjdG9yKTsgfVxuXG5mdW5jdGlvbiBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykgeyByZXR1cm4gc2VsZWN0b3JzLmZpbHRlcihpc1NlbGVjdG9yUnVsZU5hbWVTZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eW15AXS8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9yc0FuZFR5cGVzKHNlbGVjdG9ycywgdHlwZXMpIHtcbiAgbGV0IHJ1bGVOYW1lcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTGVuZ3RoID0gdHlwZXMubGVuZ3RoO1xuXG4gIGlmICh0eXBlc0xlbmd0aCA9PT0gMCkge1xuICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKTtcbiAgfVxuXG4gIHJldHVybiBydWxlTmFtZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBRdWVyeSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlDbGFzcyhub2RlLCBDbGFzcywgbm9kZXMgPSBbXSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIENsYXNzKSB7XG4gICAgbm9kZXMucHVzaChub2RlKTtcbiAgfVxuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gcXVlcnlCeUNsYXNzKGNoaWxkTm9kZSwgQ2xhc3MsIG5vZGVzKSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Nlcyhub2RlLCBDbGFzc2VzLCBub2RlcyA9IFtdKSB7XG4gIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENsYXNzKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gcXVlcnlCeUNsYXNzZXMoY2hpbGROb2RlLCBDbGFzc2VzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUV4cHJlc3Npb24obm9kZSwgZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoKSxcbiAgICAgICAgbm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpO1xuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBxdWVyeUJ5Q2xhc3MsXG4gIHF1ZXJ5QnlDbGFzc2VzLFxuICBxdWVyeUJ5RXhwcmVzc2lvblxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHF1ZXJ5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBIRUFEID0gXCJoZWFkXCI7XG5leHBvcnQgY29uc3QgU1RZTEUgPSBcInN0eWxlXCI7XG5leHBvcnQgY29uc3QgQ0hBUkFDVEVSUyA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwiO1xuZXhwb3J0IGNvbnN0IFRXT19TUEFDRVMgPSBcIiAgXCI7XG5leHBvcnQgY29uc3QgRk9VUl9TUEFDRVMgPSBcIiAgICBcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IENMQVNTX05BTUVfTEVOR1RIID0gNjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhxdWVyeSwgbm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgZmlyc3ROb2RlID0gZmlyc3Qobm9kZXMpO1xuXG4gIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBjb250ZW50RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZnVuY3Rpb24gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RUb2tlbiA9IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGxhc3RUb2tlbiA9IGxhc3RTaWduaWZpY2FudFRva2VuLCAvLy9cbiAgICAgICAgZmlyc3RUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YoZmlyc3RUb2tlbiksXG4gICAgICAgIGxhc3RUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFRva2VuKTtcblxuICBsZXQgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IGZpcnN0VG9rZW5JbmRleDsgaW5kZXggPD0gbGFzdFRva2VuSW5kZXg7IGluZGV4KyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF0sXG4gICAgICAgICAgdG9rZW5Db250ZW50ID0gdG9rZW4uZ2V0Q29udGVudCgpO1xuXG4gICAgY29udGVudCArPSB0b2tlbkNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHByb3BlcnR5UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3Byb3BlcnR5XCIpLFxuICAgICAgZXhwcmVzc2lvblF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9leHByZXNzaW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5LCBleHByZXNzaW9uKSB7XG4gICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gIH1cblxuICBnZXRQcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eTtcbiAgfVxuXG4gIGdldEV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbjtcbiAgfVxuXG4gIGNoZWNrTWF0Y2hlcyhkZWNsYXJhdGlvbnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb25zLnNvbWUoKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5KCksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzTWF0Y2ggPSAocHJvcGVydHkgPT09IHRoaXMucHJvcGVydHkpO1xuXG4gICAgICBpZiAocHJvcGVydGllc01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0NTUyhpbmRlbnQsIGxhc3QpIHtcbiAgICBjb25zdCBjc3MgPSBsYXN0ID9cbiAgICAgICAgICAgICAgICBgJHtpbmRlbnR9JHt0aGlzLnByb3BlcnR5fTogJHt0aGlzLmV4cHJlc3Npb259O2AgOlxuICAgICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtcXG5gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcm9wZXJ0eVF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGV4cHJlc3Npb25Db250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoZXhwcmVzc2lvblF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlDb250ZW50LCAvLy9cbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkNvbnRlbnQsIC8vL1xuICAgICAgICAgIGRlY2xhcmF0aW9uID0gbmV3IERlY2xhcmF0aW9uKHByb3BlcnR5LCBleHByZXNzaW9uKTtcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuL2RlY2xhcmF0aW9uXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgZGVjbGFyYXRpb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZGVjbGFyYXRpb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9ucyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gZmlyc3RJbmRleDsgaW5kZXggPD0gbGFzdEluZGV4OyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2t3YXJkc0ZvckVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBmaXJzdEluZGV4ID0gMCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSBsYXN0SW5kZXg7IGluZGV4ID49IGZpcnN0SW5kZXg7IGluZGV4LS0pIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdGhpcy5hcnJheVtpbmRleF07XG5cbiAgICAgIGNhbGxiYWNrKGRlY2xhcmF0aW9uLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMpIHtcbiAgICBkZWNsYXJhdGlvbnMuYmFja3dhcmRzRm9yRWFjaCgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbi5jaGVja01hdGNoZXModGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgdGhpcy5hcnJheS51bnNoaWZ0KGRlY2xhcmF0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgaWYgKGluZGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRlbnQgPSBjbGFzc05hbWU7IC8vL1xuXG4gICAgICBjbGFzc05hbWUgPSBudWxsOyAvLy9cbiAgICB9XG5cbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuYXJyYXkucmVkdWNlKChkZWNsYXJhdGlvbnNDU1MsIGRlY2xhcmF0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gKGluZGV4ID09PSBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbkNTUyA9IGRlY2xhcmF0aW9uLmFzQ1NTKGluZGVudCwgbGFzdCk7XG5cbiAgICAgICAgICAgICAgZGVjbGFyYXRpb25zQ1NTICs9IGRlY2xhcmF0aW9uQ1NTO1xuXG4gICAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbnNDU1M7XG4gICAgICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgICBpZiAoY2xhc3NOYW1lID09PSBudWxsKSB7XG4gICAgICAgIGNzcyA9IGRlY2xhcmF0aW9uc0NTUzsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3NzID0gYC4ke2NsYXNzTmFtZX0ge1xuJHtkZWNsYXJhdGlvbnNDU1N9XG59XG5cbmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbk5vZGVzID0gZGVjbGFyYXRpb25RdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0gZGVjbGFyYXRpb25Ob2Rlcy5tYXAoKGRlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IERlY2xhcmF0aW9uLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBuZXcgRGVjbGFyYXRpb25zKGFycmF5KTtcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbnM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHNlbGVjdG9yc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL3NlbGVjdG9yc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMgPSBzZWxlY3RvcnM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRTZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHJ1bGVTZXQuZ2V0RGVjbGFyYXRpb25zKCk7XG5cbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gIH1cblxuICBmaW5kTWF0Y2hpbmdSdWxlU2V0KHJ1bGVTZXRzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldHMuZmluZCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZVNldC5nZXRTZWxlY3RvcnMoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yc01hdGNoID0gKHNlbGVjdG9ycyA9PT0gdGhpcy5zZWxlY3RvcnMpLFxuICAgICAgICAgICAgcnVsZVNldHNNYXRjaCA9IHNlbGVjdG9yc01hdGNoOyAvLy9cblxuICAgICAgaWYgKHJ1bGVTZXRzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSdWxlU2V0O1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoYCAgJHtpbmRlbnR9YCk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zQ1NTICE9PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICBjc3MgPSBgJHtpbmRlbnR9LiR7Y2xhc3NOYW1lfSR7dGhpcy5zZWxlY3RvcnN9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxuJHtpbmRlbnR9fVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYSA9IG5ldyBSdWxlU2V0KHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKTtcblxuICAgIHJldHVybiBtZWRpYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3RvcnNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgc2VsZWN0b3JzTm9kZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhzZWxlY3RvcnNRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgc2VsZWN0b3JzID0gYCR7c2VsZWN0b3JzTm9kZUNvbnRlbnR9YDtcblxuICByZXR1cm4gc2VsZWN0b3JzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXQgZnJvbSBcIi4vcnVsZVNldFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHJ1bGVTZXRRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcnVsZVNldFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldHMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldHMpIHtcbiAgICBydWxlU2V0cy5mb3JFYWNoKChydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1J1bGVTZXQgPSBydWxlU2V0LmZpbmRNYXRjaGluZ1J1bGVTZXQodGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICAobWF0Y2hpbmdSdWxlU2V0ID09PSBudWxsKSA/XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlU2V0KSA6XG4gICAgICAgICAgbWF0Y2hpbmdSdWxlU2V0LnVuc2hpZnQocnVsZVNldCk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgcnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgcnVsZVNldENTUyA9IHJ1bGVTZXQuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpO1xuXG4gICAgICBjc3MgKz0gcnVsZVNldENTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBydWxlU2V0Tm9kZXMgPSBydWxlU2V0UXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IHJ1bGVTZXROb2Rlcy5tYXAoKHJ1bGVTZXROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcnVsZVNldE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVsZVNldHMgPSBuZXcgUnVsZVNldHMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXRzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IFRXT19TUEFDRVMsIEZPVVJfU1BBQ0VTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3QgbWVkaWFRdWVyaWVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9tZWRpYS9tZWRpYVF1ZXJpZXNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lZGlhIHtcbiAgY29uc3RydWN0b3IobWVkaWFRdWVyaWVzLCBkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzKSB7XG4gICAgdGhpcy5tZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFRdWVyaWVzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhUXVlcmllcztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRSdWxlU2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlU2V0cztcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGxldCBjc3MgPSBcIlwiO1xuXG4gICAgY29uc3QgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgVFdPX1NQQUNFUyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoY2xhc3NOYW1lLCBGT1VSX1NQQUNFUyk7XG5cbiAgICBpZiAoKHJ1bGVTZXRzQ1NTICE9PSBudWxsKSB8fCAoZGVjbGFyYXRpb25zQ1NTICE9PSBudWxsKSkge1xuICAgICAgY3NzID0gYEBtZWRpYSAke3RoaXMubWVkaWFRdWVyaWVzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU30ke3J1bGVTZXRzQ1NTfVxufVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgTWVkaWEobWVkaWFRdWVyaWVzLCBkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzKTtcblxuICAgIHJldHVybiBtZWRpYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZWRpYVF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgbWVkaWFRdWVyaWVzTm9kZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhtZWRpYVF1ZXJpZXNRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgbWVkaWFRdWVyaWVzID0gYCR7bWVkaWFRdWVyaWVzTm9kZUNvbnRlbnR9YDtcblxuICByZXR1cm4gbWVkaWFRdWVyaWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IE1lZGlhIGZyb20gXCIuL21lZGlhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgbWVkaWFRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiL3N0eWxlc2hlZXQvbWVkaWFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lZGlhcyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgdW5zaGlmdChtZWRpYXMpIHtcbiAgICBtZWRpYXMuZm9yRWFjaCgobWVkaWEpID0+IHtcbiAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChtZWRpYSk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIG1lZGlhKSA9PiB7XG4gICAgICBjb25zdCBtZWRpYUNTUyA9IG1lZGlhLmFzQ1NTKGNsYXNzTmFtZSk7XG5cbiAgICAgIGNzcyArPSBtZWRpYUNTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBtZWRpYU5vZGVzID0gbWVkaWFRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0gbWVkaWFOb2Rlcy5tYXAoKG1lZGlhTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG1lZGlhTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBtZWRpYSA9IE1lZGlhLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBtZWRpYTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtZWRpYXMgPSBuZXcgTWVkaWFzKGFycmF5KTtcblxuICAgIHJldHVybiBtZWRpYXM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lZGlhcyBmcm9tIFwiLi9zdHlsZS9tZWRpYXNcIjtcbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9zdHlsZS9ydWxlU2V0c1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9zdHlsZS9kZWNsYXJhdGlvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3R5bGUge1xuICBjb25zdHJ1Y3RvcihkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gICAgdGhpcy5tZWRpYXMgPSBtZWRpYXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBnZXRNZWRpYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFzO1xuICB9XG5cbiAgZXh0ZW5kcyhzdXBlclN0eWxlKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gc3VwZXJTdHlsZS5nZXREZWNsYXJhdGlvbnMoKSxcbiAgICAgICAgICBydWxlU2V0cyA9IHN1cGVyU3R5bGUuZ2V0UnVsZVNldHMoKSxcbiAgICAgICAgICBtZWRpYXMgPSBzdXBlclN0eWxlLmdldE1lZGlhcygpO1xuXG4gICAgdGhpcy51bnNoaWZ0KGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIG1lZGlhcyk7XG4gIH1cblxuICB1bnNoaWZ0KGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIG1lZGlhcykge1xuICAgIHRoaXMuZGVjbGFyYXRpb25zLnVuc2hpZnQoZGVjbGFyYXRpb25zKTtcbiAgICB0aGlzLnJ1bGVTZXRzLnVuc2hpZnQocnVsZVNldHMpO1xuICAgIHRoaXMubWVkaWFzLnVuc2hpZnQobWVkaWFzKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgXCIgIFwiKSxcbiAgICAgICAgICBydWxlU2V0c0NTUyA9IHRoaXMucnVsZVNldHMuYXNDU1MoY2xhc3NOYW1lLCBcIlwiKSxcbiAgICAgICAgICBtZWRpYXNDU1MgPSB0aGlzLm1lZGlhcy5hc0NTUyhjbGFzc05hbWUpLFxuICAgICAgICAgIGNzcyA9IGAke2RlY2xhcmF0aW9uc0NTU30ke3J1bGVTZXRzQ1NTfSR7bWVkaWFzQ1NTfWA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IERlY2xhcmF0aW9ucy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gUnVsZVNldHMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYXMgPSBNZWRpYXMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBzdHlsZSA9IG5ldyBTdHlsZShkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHlsZSBmcm9tIFwiLi4vc3R5bGVcIjtcbmltcG9ydCBDU1NMZXhlciBmcm9tIFwiLi4vY3NzL2xleGVyXCI7XG5pbXBvcnQgQ1NTUGFyc2VyIGZyb20gXCIuLi9jc3MvcGFyc2VyXCI7XG5cbmltcG9ydCB7IEhFQUQsIFNUWUxFLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGNzc0xleGVyID0gQ1NTTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tTm90aGluZygpO1xuXG5pZiAoIWdsb2JhbFRoaXMuc3R5bGVNYXApIHtcbiAgZ2xvYmFsVGhpcy5zdHlsZU1hcCA9IHt9O1xufVxuXG5jb25zdCB7IHN0eWxlTWFwIH0gPSBnbG9iYWxUaGlzO1xuXG5mdW5jdGlvbiByZW5kZXJTdHlsZShzdHlsZSkge1xuICBjb25zdCBoZWFkRE9NRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoSEVBRCksXG4gICAgICAgIHN0eWxlRE9NRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1RZTEUpLFxuICAgICAgICBpbm5lckhUTUwgPSBgXG4gICAgICAgIFxuJHtzdHlsZX1gO1xuXG4gIE9iamVjdC5hc3NpZ24oc3R5bGVET01FbGVtZW50LCB7XG4gICAgaW5uZXJIVE1MXG4gIH0pO1xuXG4gIGhlYWRET01FbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRE9NRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0eWxlcygpIHtcbiAgY29uc3Qgc3R5bGVzQ1NTID0gcmV0cmlldmVTdHlsZXNDU1MoKSxcbiAgICAgICAgc3R5bGUgPSBzdHlsZXNDU1M7ICAvLy9cblxuICByZW5kZXJTdHlsZShzdHlsZSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlID0gbnVsbCkge1xuICBjb25zdCBzdHJpbmdzID0gYXJncy5zaGlmdCgpLFx0Ly8vXG4gICAgICAgIGNvbnRlbnQgPSBzdHJpbmdzLnJlZHVjZSgoY29udGVudCwgc3RyaW5nLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaW5kZXhdO1xuXG4gICAgICAgICAgY29udGVudCA9IChhcmcgIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9JHtzdHJpbmd9JHthcmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfWA7XG5cbiAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgdG9rZW5zID0gY3NzTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIG5vZGUgPSBjc3NQYXJzZXIucGFyc2UodG9rZW5zKSxcbiAgICAgICAgc3R5bGUgPSBTdHlsZS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgIGlmIChzdXBlclN0eWxlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3R5bGUuZXh0ZW5kcyhzdXBlclN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlTWFwW2NsYXNzTmFtZV0gPSBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpIHtcbiAgY29uc3Qgc3R5bGUgPSBzdHlsZU1hcFtjbGFzc05hbWVdIHx8IG51bGw7XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXMsXG4gIGdlbmVyYXRlU3R5bGUsXG4gIHJldHJpZXZlU3R5bGVcbn07XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGVzQ1NTKCkge1xuICBjb25zdCBjbGFzc05hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVNYXApLFxuICAgICAgICBzdHlsZXNDU1MgPSBjbGFzc05hbWVzLnJlZHVjZSgoc3R5bGVzQ1NTLCBjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSxcbiAgICAgICAgICAgICAgICBzdHlsZUNTUyA9IHN0eWxlLmFzQ1NTKGNsYXNzTmFtZSk7XG5cbiAgICAgICAgICBzdHlsZXNDU1MgKz0gc3R5bGVDU1M7XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzQ1NTO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBzdHlsZXNDU1M7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQVJBQ1RFUlMsIEVNUFRZX1NUUklORywgQ0xBU1NfTkFNRV9MRU5HVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGxlbmd0aCA9IENMQVNTX05BTUVfTEVOR1RILFxuICAgICAgY2hhcmFjdGVycyA9IENIQVJBQ1RFUlMsXG4gICAgICBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG5cbmNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2xhc3NOYW1lKCkge1xuICBsZXQgY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGNvdW50ID0gMDsgY291bnQgPCBsZW5ndGg7IGNvdW50KyspIHtcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpLFxuICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaW5kZXhdO1xuXG4gICAgY2xhc3NOYW1lICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSA9IGNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcblxuICBpZiAoIWNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSkge1xuICAgIGNsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG4gIH1cblxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0cmlldmVDbGFzc05hbWUoZWxlbWVudCkge1xuICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gZWxlbWVudC5yZWFjdEZ1bmN0aW9uIHx8IGVsZW1lbnQucmVhY3RDb21wb25lbnQuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZW5lcmF0ZUNsYXNzTmFtZSxcbiAgcmV0cmlldmVDbGFzc05hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFnTmFtZXMgfSBmcm9tIFwiLi90YWdOYW1lc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NMZXhlciB9IGZyb20gXCIuL2Nzcy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NQYXJzZXIgfSBmcm9tIFwiLi9jc3MvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHlsZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzTmFtZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi9pbmRleFwiOyAvLy9cblxuY29uc3QgeyBnZW5lcmF0ZVN0eWxlLCByZXRyaWV2ZVN0eWxlLCByZW5kZXJTdHlsZXMgfSA9IHN0eWxlc1V0aWxpdGllcztcblxuY29uc3QgZmlyYUNvZGVGb250TWl4aW4gPSBgXG5cbiAgZm9udC1zaXplOiAxLjNyZW07XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBmb250LWZhbWlseTogXCJGaXJhIENvZGVcIjtcbiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsgLyogRm9yY2UgbGlnYXR1cmVzIGZvciBXZWJraXQsIEJsaW5rLCBHZWNrbyAqL1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwiY2FsdFwiIDE7ICAvKiBFbmFibGUgbGlnYXR1cmVzIGZvciBJRSAxMCssIEVkZ2UgKi9cblxuYDtcblxuY29uc3QgbW9ub3NwYWNlRm9udE1peGluID0gYFxuXG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgIFxuYDtcblxuZ2VuZXJhdGVTdHlsZShbW2BcblxuICBkaXNwbGF5OiBub25lO1xuICBcbiAgLmFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuYF1dLCBcImFiY1wiKTtcblxuY29uc3Qgc3VwZXJTdHlsZSA9IHJldHJpZXZlU3R5bGUoXCJhYmNcIik7XG5cbmdlbmVyYXRlU3R5bGUoW1tgXG5cbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IGF1dG87XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGFiLXNpemU6IDI7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICBjYXJldC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIG92ZXJmbG93LXdyYXA6IG5vcm1hbDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICBcbiAgJHttb25vc3BhY2VGb250TWl4aW59XG5cbiAgLmZpcmEtY29kZSB7XG5cbiAgICAke2ZpcmFDb2RlRm9udE1peGlufVxuICAgIFxuICB9XG4gIFxuYF1dLCBcImRlZlwiLCBzdXBlclN0eWxlKTtcblxucmVuZGVyU3R5bGVzKCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUE7Ozs7OztBQUVBLFFBQU0sV0FBVztNQUNmO01BQUs7TUFBUTtNQUFXO01BQVM7TUFDakM7TUFBSztNQUFRO01BQU87TUFBTztNQUFjO01BQVE7TUFBTTtNQUN2RDtNQUFVO01BQVc7TUFBUTtNQUFRO01BQU87TUFDNUM7TUFBUTtNQUFZO01BQU07TUFBTztNQUFXO01BQU87TUFBVTtNQUFPO01BQU07TUFBTTtNQUFNO01BQVM7TUFBWTtNQUFjO01BQVU7TUFBVTtNQUM3STtNQUFNO01BQU07TUFBTTtNQUFNO01BQU07TUFBTTtNQUFRO01BQVU7TUFBTTtNQUM1RDtNQUFLO01BQVU7TUFBTztNQUFTO01BQU87TUFBTztNQUFTO01BQVU7TUFBTTtNQUN0RTtNQUFRO01BQU87TUFBUTtNQUFRO01BQVM7TUFBTztNQUMvQztNQUFVO01BQU07TUFBWTtNQUFVO01BQ3RDO01BQUs7TUFBUztNQUFXO01BQU87TUFDaEM7TUFBSztNQUFNO01BQU07TUFDakI7TUFBSztNQUFRO01BQVU7TUFBVztNQUFVO01BQVM7TUFBVTtNQUFRO01BQVU7TUFBUztNQUFPO01BQVc7TUFBTztNQUNuSDtNQUFTO01BQVM7TUFBTTtNQUFZO01BQVk7TUFBUztNQUFNO01BQVM7TUFBUTtNQUFTO01BQU07TUFDL0Y7TUFBSztNQUNMO01BQU87TUFDUDs7bUJBR2E7Ozs7O0FDcEJmOzs7Ozs7QUFFTyxRQUFNLGNBQWM7WUFBZCxjQUFBO0FBQ04sUUFBTSxjQUFjO1lBQWQsY0FBQTtBQUNOLFFBQU0sYUFBYTtZQUFiLGFBQUE7QUFDTixRQUFNLGdCQUFnQjtZQUFoQixn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