@galacean/engine-loader 0.0.0-experimental-animator-additive.4 → 0.0.0-experimental-0.9-plus.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/main.js +906 -802
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +923 -819
  4. package/dist/module.js +893 -804
  5. package/dist/module.js.map +1 -1
  6. package/package.json +5 -5
  7. package/types/GLTFContentRestorer.d.ts +3 -6
  8. package/types/GLTFLoader.d.ts +3 -0
  9. package/types/Texture2DContentRestorer.d.ts +2 -5
  10. package/types/TextureCubeContentRestorer.d.ts +2 -5
  11. package/types/gltf/GLTFPipeline.d.ts +1 -1
  12. package/types/gltf/GLTFResource.d.ts +3 -7
  13. package/types/gltf/GLTFSchema.d.ts +2 -2
  14. package/types/gltf/GLTFUtil.d.ts +3 -3
  15. package/types/gltf/GLTFUtils.d.ts +47 -0
  16. package/types/gltf/extensions/GLTFExtensionParser.d.ts +1 -1
  17. package/types/gltf/extensions/GLTFExtensionSchema.d.ts +2 -9
  18. package/types/gltf/extensions/KHR_materials_variants.d.ts +6 -1
  19. package/types/gltf/extensions/index.d.ts +3 -1
  20. package/types/gltf/parser/GLTFAnimationParser.d.ts +2 -7
  21. package/types/gltf/parser/GLTFBufferParser.d.ts +1 -1
  22. package/types/gltf/parser/GLTFMaterialParser.d.ts +1 -1
  23. package/types/gltf/parser/GLTFMeshParser.d.ts +5 -6
  24. package/types/gltf/parser/GLTFParser.d.ts +2 -2
  25. package/types/gltf/parser/GLTFParserContext.d.ts +3 -5
  26. package/types/gltf/parser/GLTFSceneParser.d.ts +2 -2
  27. package/types/gltf/parser/GLTFSkinParser.d.ts +1 -1
  28. package/types/gltf/parser/GLTFTextureParser.d.ts +2 -2
  29. package/types/gltf/parser/GLTFValidator.d.ts +1 -1
  30. package/types/index.d.ts +1 -2
  31. package/types/gltf/extensions/OASIS_materials_remap.d.ts +0 -1
  32. package/types/resource-deserialize/resources/animationClip/type.d.ts +0 -30
  33. package/types/resource-deserialize/resources/animatorController/AnimatorControllerDecoder.d.ts +0 -6
  34. package/types/resource-deserialize/resources/animatorController/type.d.ts +0 -0
  35. /package/types/gltf/extensions/{OASIS_animation.d.ts → GALACEAN_animation_event.d.ts} +0 -0
package/dist/main.js CHANGED
@@ -4,8 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var engineCore = require('@galacean/engine-core');
6
6
  var engineMath = require('@galacean/engine-math');
7
- var engineDraco = require('@galacean/engine-draco');
8
7
  var engineRhiWebgl = require('@galacean/engine-rhi-webgl');
8
+ var engineDraco = require('@galacean/engine-draco');
9
9
 
10
10
  function _extends() {
11
11
  _extends = Object.assign || function assign(target) {
@@ -341,53 +341,44 @@ FontLoader = __decorate([
341
341
  ], false)
342
342
  ], FontLoader);
343
343
 
344
- /**
345
- * @internal
346
- */ var ParserContext = /*#__PURE__*/ function() {
347
- function ParserContext(url) {
348
- this.hasSkinned = false;
349
- /** chain asset promise */ this.chainPromises = [];
350
- this.accessorBufferCache = {};
351
- this.texturesPromiseInfo = new PromiseInfo();
352
- this.materialsPromiseInfo = new PromiseInfo();
353
- this.meshesPromiseInfo = new PromiseInfo();
354
- this.animationClipsPromiseInfo = new PromiseInfo();
355
- this.defaultSceneRootPromiseInfo = new PromiseInfo();
356
- this.masterPromiseInfo = new PromiseInfo();
357
- this.promiseMap = {};
358
- var promiseMap = this.promiseMap;
359
- promiseMap["" + url + "?q=textures"] = this._initPromiseInfo(this.texturesPromiseInfo);
360
- promiseMap["" + url + "?q=materials"] = this._initPromiseInfo(this.materialsPromiseInfo);
361
- promiseMap["" + url + "?q=meshes"] = this._initPromiseInfo(this.meshesPromiseInfo);
362
- promiseMap["" + url + "?q=animations"] = this._initPromiseInfo(this.animationClipsPromiseInfo);
363
- promiseMap["" + url + "?q=defaultSceneRoot"] = this._initPromiseInfo(this.defaultSceneRootPromiseInfo);
364
- promiseMap["" + url] = this._initPromiseInfo(this.masterPromiseInfo);
344
+ function _array_like_to_array(arr, len) {
345
+ if (len == null || len > arr.length) len = arr.length;
346
+
347
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
348
+
349
+ return arr2;
350
+ }
351
+
352
+ function _unsupported_iterable_to_array(o, minLen) {
353
+ if (!o) return;
354
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
355
+
356
+ var n = Object.prototype.toString.call(o).slice(8, -1);
357
+
358
+ if (n === "Object" && o.constructor) n = o.constructor.name;
359
+ if (n === "Map" || n === "Set") return Array.from(n);
360
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
361
+ }
362
+
363
+ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
364
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
365
+
366
+ if (it) return (it = it.call(o)).next.bind(it);
367
+ // Fallback for engines without symbol support
368
+ if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") {
369
+ if (it) o = it;
370
+
371
+ var i = 0;
372
+
373
+ return function() {
374
+ if (i >= o.length) return { done: true };
375
+
376
+ return { done: false, value: o[i++] };
377
+ };
365
378
  }
366
- var _proto = ParserContext.prototype;
367
- _proto._initPromiseInfo = function _initPromiseInfo(promiseInfo) {
368
- var promise = new engineCore.AssetPromise(function(resolve, reject, setProgress, onCancel) {
369
- promiseInfo.resolve = resolve;
370
- promiseInfo.reject = reject;
371
- promiseInfo.setProgress = setProgress;
372
- promiseInfo.onCancel = onCancel;
373
- });
374
- promiseInfo.promise = promise;
375
- return promise;
376
- };
377
- return ParserContext;
378
- }();
379
- /**
380
- * @internal
381
- */ var BufferInfo = function BufferInfo(data, interleaved, stride) {
382
- this.data = data;
383
- this.interleaved = interleaved;
384
- this.stride = stride;
385
- this.vertexBindingInfos = {};
386
- };
387
- /**
388
- * @internal
389
- */ var PromiseInfo = function PromiseInfo() {
390
- };
379
+
380
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
381
+ }
391
382
 
392
383
  /**
393
384
  * Module for glTF 2.0 Interface
@@ -536,6 +527,54 @@ var TextureWrapMode;
536
527
  */ "REPEAT"] = 10497] = "REPEAT";
537
528
  })(TextureWrapMode || (TextureWrapMode = {}));
538
529
 
530
+ /**
531
+ * @internal
532
+ */ var GLTFParserContext = /*#__PURE__*/ function() {
533
+ function GLTFParserContext(url) {
534
+ this.hasSkinned = false;
535
+ /** chain asset promise */ this.chainPromises = [];
536
+ this.accessorBufferCache = {};
537
+ this.texturesPromiseInfo = new PromiseInfo();
538
+ this.materialsPromiseInfo = new PromiseInfo();
539
+ this.meshesPromiseInfo = new PromiseInfo();
540
+ this.animationClipsPromiseInfo = new PromiseInfo();
541
+ this.defaultSceneRootPromiseInfo = new PromiseInfo();
542
+ this.masterPromiseInfo = new PromiseInfo();
543
+ this.promiseMap = {};
544
+ var promiseMap = this.promiseMap;
545
+ promiseMap["" + url + "?q=textures"] = this._initPromiseInfo(this.texturesPromiseInfo);
546
+ promiseMap["" + url + "?q=materials"] = this._initPromiseInfo(this.materialsPromiseInfo);
547
+ promiseMap["" + url + "?q=meshes"] = this._initPromiseInfo(this.meshesPromiseInfo);
548
+ promiseMap["" + url + "?q=animations"] = this._initPromiseInfo(this.animationClipsPromiseInfo);
549
+ promiseMap["" + url + "?q=defaultSceneRoot"] = this._initPromiseInfo(this.defaultSceneRootPromiseInfo);
550
+ promiseMap["" + url] = this._initPromiseInfo(this.masterPromiseInfo);
551
+ }
552
+ var _proto = GLTFParserContext.prototype;
553
+ _proto._initPromiseInfo = function _initPromiseInfo(promiseInfo) {
554
+ var promise = new engineCore.AssetPromise(function(resolve, reject, setProgress, onCancel) {
555
+ promiseInfo.resolve = resolve;
556
+ promiseInfo.reject = reject;
557
+ promiseInfo.setProgress = setProgress;
558
+ promiseInfo.onCancel = onCancel;
559
+ });
560
+ promiseInfo.promise = promise;
561
+ return promise;
562
+ };
563
+ return GLTFParserContext;
564
+ }();
565
+ /**
566
+ * @internal
567
+ */ var BufferInfo = function BufferInfo(data, interleaved, stride) {
568
+ this.data = data;
569
+ this.interleaved = interleaved;
570
+ this.stride = stride;
571
+ this.vertexBindingInfos = {};
572
+ };
573
+ /**
574
+ * @internal
575
+ */ var PromiseInfo = function PromiseInfo() {
576
+ };
577
+
539
578
  /**
540
579
  * @internal
541
580
  */ var GLTFUtil = /*#__PURE__*/ function() {
@@ -926,14 +965,6 @@ var TextureWrapMode;
926
965
  return GLTFUtil;
927
966
  }();
928
967
 
929
- function _array_like_to_array(arr, len) {
930
- if (len == null || len > arr.length) len = arr.length;
931
-
932
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
933
-
934
- return arr2;
935
- }
936
-
937
968
  function _array_without_holes(arr) {
938
969
  if (Array.isArray(arr)) return _array_like_to_array(arr);
939
970
  }
@@ -948,527 +979,217 @@ function _non_iterable_spread() {
948
979
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
949
980
  }
950
981
 
951
- function _unsupported_iterable_to_array(o, minLen) {
952
- if (!o) return;
953
- if (typeof o === "string") return _array_like_to_array(o, minLen);
954
-
955
- var n = Object.prototype.toString.call(o).slice(8, -1);
956
-
957
- if (n === "Object" && o.constructor) n = o.constructor.name;
958
- if (n === "Map" || n === "Set") return Array.from(n);
959
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
960
- }
961
-
962
982
  function _to_consumable_array(arr) {
963
983
  return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
964
984
  }
965
985
 
966
- var Parser = /*#__PURE__*/ function() {
967
- function Parser() {}
968
- Parser.parseEngineResource = function parseEngineResource(extensionName, extensionSchema, parseResource, context) {
986
+ /**
987
+ * Base class of glTF extension parser.
988
+ */ var GLTFExtensionParser = /*#__PURE__*/ function() {
989
+ function GLTFExtensionParser() {}
990
+ var _proto = GLTFExtensionParser.prototype;
991
+ /**
992
+ * Initialize the parser.
993
+ * @remarks Some plugins require initialization.
994
+ * @returns The void or promise
995
+ */ _proto.initialize = function initialize() {};
996
+ /**
997
+ * Create and parse the resource.
998
+ * @remarks This method overrides the default resource creation.
999
+ * @param context - The parser context
1000
+ * @param extensionSchema - The extension schema
1001
+ * @param extensionOwnerSchema - The extension owner schema
1002
+ * @returns The resource or promise
1003
+ */ _proto.createAndParse = function createAndParse(context, extensionSchema, extensionOwnerSchema) {
1004
+ for(var _len = arguments.length, extra = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++){
1005
+ extra[_key - 3] = arguments[_key];
1006
+ }
1007
+ throw "Not implemented.";
1008
+ };
1009
+ /**
1010
+ * Additive parse to the resource.
1011
+ * @param context - The parser context
1012
+ * @param parseResource - The parsed resource
1013
+ * @param extensionSchema - The extension schema
1014
+ * @param extensionOwnerSchema - The extension owner schema
1015
+ * @returns The void or promise
1016
+ */ _proto.additiveParse = function additiveParse(context, parseResource, extensionSchema, extensionOwnerSchema) {
969
1017
  for(var _len = arguments.length, extra = new Array(_len > 4 ? _len - 4 : 0), _key = 4; _key < _len; _key++){
970
1018
  extra[_key - 4] = arguments[_key];
971
1019
  }
972
- var parsers = Parser._extensionParsers[extensionName];
973
- if (parsers == null ? void 0 : parsers.length) {
974
- for(var i = 0; i < parsers.length; i++){
975
- var _parsers_i;
976
- (_parsers_i = parsers[i]).parseEngineResource.apply(_parsers_i, [
977
- extensionSchema,
978
- parseResource,
979
- context
980
- ].concat(_to_consumable_array(extra)));
981
- }
1020
+ throw "Not implemented.";
1021
+ };
1022
+ return GLTFExtensionParser;
1023
+ }();
1024
+ exports.GLTFExtensionMode = void 0;
1025
+ (function(GLTFExtensionMode) {
1026
+ GLTFExtensionMode[GLTFExtensionMode[/**
1027
+ * Cerate instance and parse mode.
1028
+ * @remarks
1029
+ * If the glTF property has multiple extensions of `CreateAndParse` mode, only execute the last one.
1030
+ * If this method is registered, the default pipeline processing will be ignored.
1031
+ */ "CreateAndParse"] = 0] = "CreateAndParse";
1032
+ GLTFExtensionMode[GLTFExtensionMode[/** Additive parse mode. */ "AdditiveParse"] = 1] = "AdditiveParse";
1033
+ })(exports.GLTFExtensionMode || (exports.GLTFExtensionMode = {}));
1034
+
1035
+ /**
1036
+ * Base class of glTF parser.
1037
+ */ var GLTFParser = /*#__PURE__*/ function() {
1038
+ function GLTFParser() {}
1039
+ /**
1040
+ * Execute all parses of extension to initialize plugin.
1041
+ * @remarks Some plugins require initialization.
1042
+ * @returns The void or promise
1043
+ */ GLTFParser.executeExtensionsInitialize = function executeExtensionsInitialize(extensionName) {
1044
+ var parsers = GLTFParser._extensionParsers[extensionName];
1045
+ var length = parsers == null ? void 0 : parsers.length;
1046
+ if (length) {
1047
+ return parsers[length - 1].initialize();
982
1048
  }
983
1049
  };
984
- Parser.createEngineResource = function createEngineResource(extensionName, extensionSchema, context) {
1050
+ /**
1051
+ * Execute all parses of extension to create resource.
1052
+ * @param extensions - Related extensions field
1053
+ * @param context - The parser context
1054
+ * @param ownerSchema - The extension owner schema
1055
+ * @param extra - Extra params
1056
+ * @returns
1057
+ */ GLTFParser.executeExtensionsCreateAndParse = function executeExtensionsCreateAndParse(extensions, context, ownerSchema) {
1058
+ if (extensions === void 0) extensions = {};
985
1059
  for(var _len = arguments.length, extra = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++){
986
1060
  extra[_key - 3] = arguments[_key];
987
1061
  }
988
- var parsers = Parser._extensionParsers[extensionName];
989
- if (parsers == null ? void 0 : parsers.length) {
990
- var _parsers_;
991
- return (_parsers_ = parsers[0]).createEngineResource.apply(_parsers_, [
1062
+ var resource = null;
1063
+ var extensionArray = Object.keys(extensions);
1064
+ for(var i = extensionArray.length - 1; i >= 0; --i){
1065
+ var _GLTFParser;
1066
+ var extensionName = extensionArray[i];
1067
+ var extensionSchema = extensions[extensionName];
1068
+ resource = (_GLTFParser = GLTFParser)._createAndParse.apply(_GLTFParser, [
1069
+ extensionName,
1070
+ context,
992
1071
  extensionSchema,
993
- context
1072
+ ownerSchema
1073
+ ].concat(_to_consumable_array(extra)));
1074
+ if (resource) {
1075
+ return resource;
1076
+ }
1077
+ }
1078
+ };
1079
+ /**
1080
+ * Execute all parses of extension to parse resource.
1081
+ * @param extensions - Related extensions field
1082
+ * @param context - The parser context
1083
+ * @param parseResource - The parsed resource
1084
+ * @param ownerSchema - The extension owner schema
1085
+ * @param extra - Extra params
1086
+ */ GLTFParser.executeExtensionsAdditiveAndParse = function executeExtensionsAdditiveAndParse(extensions, context, parseResource, ownerSchema) {
1087
+ for(var _len = arguments.length, extra = new Array(_len > 4 ? _len - 4 : 0), _key = 4; _key < _len; _key++){
1088
+ extra[_key - 4] = arguments[_key];
1089
+ }
1090
+ for(var extensionName in extensions){
1091
+ var _GLTFParser;
1092
+ var extensionSchema = extensions[extensionName];
1093
+ (_GLTFParser = GLTFParser)._additiveParse.apply(_GLTFParser, [
1094
+ extensionName,
1095
+ context,
1096
+ parseResource,
1097
+ extensionSchema,
1098
+ ownerSchema
994
1099
  ].concat(_to_consumable_array(extra)));
995
1100
  }
996
1101
  };
997
- Parser.hasExtensionParser = function hasExtensionParser(extensionName) {
998
- var parsers = Parser._extensionParsers[extensionName];
999
- return !!(parsers == null ? void 0 : parsers.length);
1102
+ /**
1103
+ * Whether the plugin is registered.
1104
+ * @param extensionName - Extension name
1105
+ * @returns Boolean
1106
+ */ GLTFParser.hasExtensionParser = function hasExtensionParser(extensionName) {
1107
+ var _GLTFParser__extensionParsers_extensionName;
1108
+ return !!((_GLTFParser__extensionParsers_extensionName = GLTFParser._extensionParsers[extensionName]) == null ? void 0 : _GLTFParser__extensionParsers_extensionName.length);
1000
1109
  };
1001
- Parser.initialize = function initialize(extensionName) {
1002
- var parsers = Parser._extensionParsers[extensionName];
1003
- if (parsers == null ? void 0 : parsers.length) {
1004
- for(var i = 0; i < parsers.length; i++){
1005
- parsers[i].initialize();
1110
+ /**
1111
+ * Get the last plugin by glTF extension mode.
1112
+ * @param extensionName - Extension name
1113
+ * @param mode - GLTF extension mode
1114
+ * @returns GLTF extension parser
1115
+ */ GLTFParser.getExtensionParser = function getExtensionParser(extensionName, mode) {
1116
+ var parsers = GLTFParser._extensionParsers[extensionName];
1117
+ var length = parsers == null ? void 0 : parsers.length;
1118
+ if (length) {
1119
+ // only use the last parser.
1120
+ for(var i = length - 1; i >= 0; --i){
1121
+ var currentParser = parsers[i];
1122
+ if (currentParser._mode === mode) {
1123
+ return currentParser;
1124
+ }
1006
1125
  }
1007
1126
  }
1008
1127
  };
1009
1128
  /**
1010
1129
  * @internal
1011
- */ Parser._addExtensionParser = function _addExtensionParser(extensionName, extensionParser) {
1012
- if (!Parser._extensionParsers[extensionName]) {
1013
- Parser._extensionParsers[extensionName] = [];
1130
+ */ GLTFParser._addExtensionParser = function _addExtensionParser(extensionName, extensionParser) {
1131
+ if (!GLTFParser._extensionParsers[extensionName]) {
1132
+ GLTFParser._extensionParsers[extensionName] = [];
1133
+ }
1134
+ GLTFParser._extensionParsers[extensionName].push(extensionParser);
1135
+ };
1136
+ GLTFParser._createAndParse = function _createAndParse(extensionName, context, extensionSchema, ownerSchema) {
1137
+ for(var _len = arguments.length, extra = new Array(_len > 4 ? _len - 4 : 0), _key = 4; _key < _len; _key++){
1138
+ extra[_key - 4] = arguments[_key];
1139
+ }
1140
+ var parser = GLTFParser.getExtensionParser(extensionName, exports.GLTFExtensionMode.CreateAndParse);
1141
+ if (parser) {
1142
+ var _parser;
1143
+ return (_parser = parser).createAndParse.apply(_parser, [
1144
+ context,
1145
+ extensionSchema,
1146
+ ownerSchema
1147
+ ].concat(_to_consumable_array(extra)));
1148
+ }
1149
+ };
1150
+ GLTFParser._additiveParse = function _additiveParse(extensionName, context, parseResource, extensionSchema, ownerSchema) {
1151
+ for(var _len = arguments.length, extra = new Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++){
1152
+ extra[_key - 5] = arguments[_key];
1153
+ }
1154
+ var parser = GLTFParser.getExtensionParser(extensionName, exports.GLTFExtensionMode.AdditiveParse);
1155
+ if (parser) {
1156
+ var _parser;
1157
+ (_parser = parser).additiveParse.apply(_parser, [
1158
+ context,
1159
+ parseResource,
1160
+ extensionSchema,
1161
+ ownerSchema
1162
+ ].concat(_to_consumable_array(extra)));
1014
1163
  }
1015
- Parser._extensionParsers[extensionName].push(extensionParser);
1016
1164
  };
1017
- return Parser;
1165
+ return GLTFParser;
1018
1166
  }();
1019
1167
  (function() {
1020
- Parser._extensionParsers = {};
1168
+ GLTFParser._extensionParsers = {};
1021
1169
  })();
1022
1170
  /**
1023
1171
  * Declare ExtensionParser's decorator.
1024
1172
  * @param extensionName - Extension name
1025
- */ function registerExtension(extensionName) {
1173
+ */ function registerGLTFExtension(extensionName, mode) {
1026
1174
  return function(parser) {
1027
1175
  var extensionParser = new parser();
1028
- Parser._addExtensionParser(extensionName, extensionParser);
1029
- };
1030
- }
1031
-
1032
- var ExtensionParser = /*#__PURE__*/ function() {
1033
- function ExtensionParser() {}
1034
- var _proto = ExtensionParser.prototype;
1035
- _proto.initialize = function initialize() {};
1036
- _proto.parseEngineResource = function parseEngineResource(schema, parseResource, context) {
1037
- for(var _len = arguments.length, extra = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++){
1038
- extra[_key - 3] = arguments[_key];
1039
- }
1040
- };
1041
- _proto.createEngineResource = function createEngineResource(schema, context) {
1042
- for(var _len = arguments.length, extra = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
1043
- extra[_key - 2] = arguments[_key];
1044
- }
1045
- return null;
1046
- };
1047
- return ExtensionParser;
1048
- }();
1049
-
1050
- var KHR_draco_mesh_compression = /*#__PURE__*/ function(ExtensionParser) {
1051
- _inherits(KHR_draco_mesh_compression1, ExtensionParser);
1052
- function KHR_draco_mesh_compression1() {
1053
- return ExtensionParser.apply(this, arguments);
1054
- }
1055
- var _proto = KHR_draco_mesh_compression1.prototype;
1056
- _proto.initialize = function initialize() {
1057
- if (!KHR_draco_mesh_compression._decoder) {
1058
- KHR_draco_mesh_compression._decoder = new engineDraco.DRACODecoder();
1059
- }
1060
- };
1061
- _proto.createEngineResource = function createEngineResource(schema, context, gltfPrimitive) {
1062
- var gltf = context.gltf, buffers = context.buffers;
1063
- var bufferViews = gltf.bufferViews, accessors = gltf.accessors;
1064
- var bufferViewIndex = schema.bufferView, gltfAttributeMap = schema.attributes;
1065
- var attributeMap = {};
1066
- var attributeTypeMap = {};
1067
- for(var attributeName in gltfAttributeMap){
1068
- attributeMap[attributeName] = gltfAttributeMap[attributeName];
1069
- }
1070
- for(var attributeName1 in gltfPrimitive.attributes){
1071
- if (gltfAttributeMap[attributeName1] !== undefined) {
1072
- var accessorDef = accessors[gltfPrimitive.attributes[attributeName1]];
1073
- attributeTypeMap[attributeName1] = GLTFUtil.getComponentType(accessorDef.componentType).name;
1074
- }
1075
- }
1076
- var indexAccessor = accessors[gltfPrimitive.indices];
1077
- var indexType = GLTFUtil.getComponentType(indexAccessor.componentType).name;
1078
- var taskConfig = {
1079
- attributeIDs: attributeMap,
1080
- attributeTypes: attributeTypeMap,
1081
- useUniqueIDs: true,
1082
- indexType: indexType
1083
- };
1084
- var buffer = GLTFUtil.getBufferViewData(bufferViews[bufferViewIndex], buffers);
1085
- return KHR_draco_mesh_compression._decoder.decode(buffer, taskConfig).then(function(parsedGeometry) {
1086
- return parsedGeometry;
1087
- });
1176
+ extensionParser._mode = mode;
1177
+ GLTFParser._addExtensionParser(extensionName, extensionParser);
1088
1178
  };
1089
- return KHR_draco_mesh_compression1;
1090
- }(ExtensionParser);
1091
- KHR_draco_mesh_compression = __decorate([
1092
- registerExtension("KHR_draco_mesh_compression")
1093
- ], KHR_draco_mesh_compression);
1094
-
1095
- function _instanceof(left, right) {
1096
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
1097
- return !!right[Symbol.hasInstance](left);
1098
- } else return left instanceof right;
1099
1179
  }
1100
1180
 
1101
- var KHR_lights_punctual = /*#__PURE__*/ function(ExtensionParser) {
1102
- _inherits(KHR_lights_punctual, ExtensionParser);
1103
- function KHR_lights_punctual() {
1104
- return ExtensionParser.apply(this, arguments);
1181
+ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser) {
1182
+ _inherits(GLTFAnimationParser, GLTFParser);
1183
+ function GLTFAnimationParser() {
1184
+ return GLTFParser.apply(this, arguments);
1105
1185
  }
1106
- var _proto = KHR_lights_punctual.prototype;
1107
- _proto.parseEngineResource = function parseEngineResource(schema, entity, context) {
1108
- var color = schema.color, _schema_intensity = schema.intensity, intensity = _schema_intensity === void 0 ? 1 : _schema_intensity, type = schema.type, range = schema.range, spot = schema.spot;
1109
- var glTFResource = context.glTFResource;
1110
- var light;
1111
- if (type === "directional") {
1112
- light = entity.addComponent(engineCore.DirectLight);
1113
- } else if (type === "point") {
1114
- light = entity.addComponent(engineCore.PointLight);
1115
- } else if (type === "spot") {
1116
- light = entity.addComponent(engineCore.SpotLight);
1117
- }
1118
- if (color) {
1119
- light.color.set(color[0], color[1], color[2], 1);
1120
- }
1121
- light.intensity = intensity;
1122
- if (range && !_instanceof(light, engineCore.DirectLight)) {
1123
- light.distance = range;
1124
- }
1125
- if (spot && _instanceof(light, engineCore.SpotLight)) {
1126
- var _spot_innerConeAngle = spot.innerConeAngle, innerConeAngle = _spot_innerConeAngle === void 0 ? 0 : _spot_innerConeAngle, _spot_outerConeAngle = spot.outerConeAngle, outerConeAngle = _spot_outerConeAngle === void 0 ? Math.PI / 4 : _spot_outerConeAngle;
1127
- light.angle = innerConeAngle;
1128
- light.penumbra = outerConeAngle - innerConeAngle;
1129
- }
1130
- if (!glTFResource.lights) glTFResource.lights = [];
1131
- glTFResource.lights.push(light);
1132
- };
1133
- return KHR_lights_punctual;
1134
- }(ExtensionParser);
1135
- KHR_lights_punctual = __decorate([
1136
- registerExtension("KHR_lights_punctual")
1137
- ], KHR_lights_punctual);
1138
-
1139
- var MaterialParser = /*#__PURE__*/ function(Parser1) {
1140
- _inherits(MaterialParser, Parser1);
1141
- function MaterialParser() {
1142
- return Parser1.apply(this, arguments);
1143
- }
1144
- var _proto = MaterialParser.prototype;
1145
- _proto.parse = function parse(context) {
1146
- var gltf = context.gltf, glTFResource = context.glTFResource;
1147
- var engine = glTFResource.engine, textures = glTFResource.textures;
1148
- if (!gltf.materials) return;
1149
- var materialsPromiseInfo = context.materialsPromiseInfo;
1150
- var materials = [];
1151
- for(var i = 0; i < gltf.materials.length; i++){
1152
- var _gltf_materials_i = gltf.materials[i], _gltf_materials_i_extensions = _gltf_materials_i.extensions, extensions = _gltf_materials_i_extensions === void 0 ? {} : _gltf_materials_i_extensions, pbrMetallicRoughness = _gltf_materials_i.pbrMetallicRoughness, normalTexture = _gltf_materials_i.normalTexture, occlusionTexture = _gltf_materials_i.occlusionTexture, emissiveTexture = _gltf_materials_i.emissiveTexture, emissiveFactor = _gltf_materials_i.emissiveFactor, alphaMode = _gltf_materials_i.alphaMode, alphaCutoff = _gltf_materials_i.alphaCutoff, doubleSided = _gltf_materials_i.doubleSided, _gltf_materials_i_name = _gltf_materials_i.name, name = _gltf_materials_i_name === void 0 ? "" : _gltf_materials_i_name;
1153
- var KHR_materials_unlit = extensions.KHR_materials_unlit, KHR_materials_pbrSpecularGlossiness = extensions.KHR_materials_pbrSpecularGlossiness, KHR_materials_clearcoat = extensions.KHR_materials_clearcoat, KHR_materials_ior = extensions.KHR_materials_ior, OASIS_materials_remap = extensions.OASIS_materials_remap;
1154
- var material = null;
1155
- if (KHR_materials_unlit) {
1156
- material = Parser.createEngineResource("KHR_materials_unlit", KHR_materials_unlit, context);
1157
- } else if (KHR_materials_pbrSpecularGlossiness) {
1158
- material = Parser.createEngineResource("KHR_materials_pbrSpecularGlossiness", KHR_materials_pbrSpecularGlossiness, context);
1159
- } else {
1160
- material = new engineCore.PBRMaterial(engine);
1161
- }
1162
- material.name = name;
1163
- if (KHR_materials_clearcoat) {
1164
- Parser.parseEngineResource("KHR_materials_clearcoat", KHR_materials_clearcoat, material, context);
1165
- }
1166
- if (KHR_materials_ior) {
1167
- Parser.parseEngineResource("KHR_materials_ior", KHR_materials_ior, material, context);
1168
- }
1169
- if (pbrMetallicRoughness) {
1170
- var baseColorFactor = pbrMetallicRoughness.baseColorFactor, baseColorTexture = pbrMetallicRoughness.baseColorTexture, metallicFactor = pbrMetallicRoughness.metallicFactor, roughnessFactor = pbrMetallicRoughness.roughnessFactor, metallicRoughnessTexture = pbrMetallicRoughness.metallicRoughnessTexture;
1171
- if (baseColorFactor) {
1172
- material.baseColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(baseColorFactor[0]), engineMath.Color.linearToGammaSpace(baseColorFactor[1]), engineMath.Color.linearToGammaSpace(baseColorFactor[2]), baseColorFactor[3]);
1173
- }
1174
- if (baseColorTexture) {
1175
- material.baseTexture = textures[baseColorTexture.index];
1176
- MaterialParser._parseTextureTransform(material, baseColorTexture.extensions, context);
1177
- }
1178
- if (!KHR_materials_unlit && !KHR_materials_pbrSpecularGlossiness) {
1179
- var m = material;
1180
- m.metallic = metallicFactor != null ? metallicFactor : 1;
1181
- m.roughness = roughnessFactor != null ? roughnessFactor : 1;
1182
- if (metallicRoughnessTexture) {
1183
- m.roughnessMetallicTexture = textures[metallicRoughnessTexture.index];
1184
- MaterialParser._parseTextureTransform(material, metallicRoughnessTexture.extensions, context);
1185
- }
1186
- }
1187
- }
1188
- if (!KHR_materials_unlit) {
1189
- var m1 = material;
1190
- if (emissiveTexture) {
1191
- m1.emissiveTexture = textures[emissiveTexture.index];
1192
- MaterialParser._parseTextureTransform(material, emissiveTexture.extensions, context);
1193
- }
1194
- if (emissiveFactor) {
1195
- m1.emissiveColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(emissiveFactor[0]), engineMath.Color.linearToGammaSpace(emissiveFactor[1]), engineMath.Color.linearToGammaSpace(emissiveFactor[2]));
1196
- }
1197
- if (normalTexture) {
1198
- var index = normalTexture.index, scale = normalTexture.scale;
1199
- m1.normalTexture = textures[index];
1200
- MaterialParser._parseTextureTransform(material, normalTexture.extensions, context);
1201
- if (scale !== undefined) {
1202
- m1.normalTextureIntensity = scale;
1203
- }
1204
- }
1205
- if (occlusionTexture) {
1206
- var index1 = occlusionTexture.index, strength = occlusionTexture.strength, texCoord = occlusionTexture.texCoord;
1207
- m1.occlusionTexture = textures[index1];
1208
- MaterialParser._parseTextureTransform(material, occlusionTexture.extensions, context);
1209
- if (strength !== undefined) {
1210
- m1.occlusionTextureIntensity = strength;
1211
- }
1212
- if (texCoord === engineCore.TextureCoordinate.UV1) {
1213
- m1.occlusionTextureCoord = engineCore.TextureCoordinate.UV1;
1214
- } else if (texCoord > engineCore.TextureCoordinate.UV1) {
1215
- engineCore.Logger.warn("Occlusion texture uv coordinate must be UV0 or UV1.");
1216
- }
1217
- }
1218
- }
1219
- if (OASIS_materials_remap) {
1220
- var _gltf_extensions;
1221
- gltf.extensions = (_gltf_extensions = gltf.extensions) != null ? _gltf_extensions : {};
1222
- var _gltf_extensions_OASIS_materials_remap;
1223
- gltf.extensions["OASIS_materials_remap"] = (_gltf_extensions_OASIS_materials_remap = gltf.extensions["OASIS_materials_remap"]) != null ? _gltf_extensions_OASIS_materials_remap : {};
1224
- gltf.extensions["OASIS_materials_remap"][i] = Parser.createEngineResource("OASIS_materials_remap", OASIS_materials_remap, context);
1225
- }
1226
- if (doubleSided) {
1227
- material.renderFace = engineCore.RenderFace.Double;
1228
- } else {
1229
- material.renderFace = engineCore.RenderFace.Front;
1230
- }
1231
- switch(alphaMode){
1232
- case MaterialAlphaMode.OPAQUE:
1233
- material.isTransparent = false;
1234
- break;
1235
- case MaterialAlphaMode.BLEND:
1236
- material.isTransparent = true;
1237
- break;
1238
- case MaterialAlphaMode.MASK:
1239
- material.alphaCutoff = alphaCutoff != null ? alphaCutoff : 0.5;
1240
- break;
1241
- }
1242
- materials[i] = material;
1243
- }
1244
- glTFResource.materials = materials;
1245
- materialsPromiseInfo.resolve(materials);
1246
- return materialsPromiseInfo.promise;
1247
- };
1248
- /** @internal */ MaterialParser._parseTextureTransform = function _parseTextureTransform(material, extensions, context) {
1249
- if (extensions === void 0) extensions = {};
1250
- var schema = extensions.KHR_texture_transform;
1251
- if (schema) {
1252
- Parser.parseEngineResource("KHR_texture_transform", schema, material, context);
1253
- }
1254
- };
1255
- return MaterialParser;
1256
- }(Parser);
1257
-
1258
- var KHR_materials_clearcoat = /*#__PURE__*/ function(ExtensionParser) {
1259
- _inherits(KHR_materials_clearcoat, ExtensionParser);
1260
- function KHR_materials_clearcoat() {
1261
- return ExtensionParser.apply(this, arguments);
1262
- }
1263
- var _proto = KHR_materials_clearcoat.prototype;
1264
- _proto.parseEngineResource = function parseEngineResource(schema, material, context) {
1265
- var textures = context.glTFResource.textures;
1266
- var _schema_clearcoatFactor = schema.clearcoatFactor, clearcoatFactor = _schema_clearcoatFactor === void 0 ? 0 : _schema_clearcoatFactor, clearcoatTexture = schema.clearcoatTexture, _schema_clearcoatRoughnessFactor = schema.clearcoatRoughnessFactor, clearcoatRoughnessFactor = _schema_clearcoatRoughnessFactor === void 0 ? 0 : _schema_clearcoatRoughnessFactor, clearcoatRoughnessTexture = schema.clearcoatRoughnessTexture, clearcoatNormalTexture = schema.clearcoatNormalTexture;
1267
- material.clearCoat = clearcoatFactor;
1268
- material.clearCoatRoughness = clearcoatRoughnessFactor;
1269
- if (clearcoatTexture) {
1270
- material.clearCoatTexture = textures[clearcoatTexture.index];
1271
- MaterialParser._parseTextureTransform(material, clearcoatTexture.extensions, context);
1272
- }
1273
- if (clearcoatRoughnessTexture) {
1274
- material.clearCoatRoughnessTexture = textures[clearcoatRoughnessTexture.index];
1275
- MaterialParser._parseTextureTransform(material, clearcoatRoughnessTexture.extensions, context);
1276
- }
1277
- if (clearcoatNormalTexture) {
1278
- material.clearCoatNormalTexture = textures[clearcoatNormalTexture.index];
1279
- MaterialParser._parseTextureTransform(material, clearcoatNormalTexture.extensions, context);
1280
- }
1281
- };
1282
- return KHR_materials_clearcoat;
1283
- }(ExtensionParser);
1284
- KHR_materials_clearcoat = __decorate([
1285
- registerExtension("KHR_materials_clearcoat")
1286
- ], KHR_materials_clearcoat);
1287
-
1288
- var KHR_materials_ior = /*#__PURE__*/ function(ExtensionParser) {
1289
- _inherits(KHR_materials_ior, ExtensionParser);
1290
- function KHR_materials_ior() {
1291
- return ExtensionParser.apply(this, arguments);
1292
- }
1293
- var _proto = KHR_materials_ior.prototype;
1294
- _proto.parseEngineResource = function parseEngineResource(schema, material, context) {
1295
- var _schema_ior = schema.ior, ior = _schema_ior === void 0 ? 1.5 : _schema_ior;
1296
- material.ior = ior;
1297
- };
1298
- return KHR_materials_ior;
1299
- }(ExtensionParser);
1300
- KHR_materials_ior = __decorate([
1301
- registerExtension("KHR_materials_ior")
1302
- ], KHR_materials_ior);
1303
-
1304
- var KHR_materials_pbrSpecularGlossiness = /*#__PURE__*/ function(ExtensionParser) {
1305
- _inherits(KHR_materials_pbrSpecularGlossiness, ExtensionParser);
1306
- function KHR_materials_pbrSpecularGlossiness() {
1307
- return ExtensionParser.apply(this, arguments);
1308
- }
1309
- var _proto = KHR_materials_pbrSpecularGlossiness.prototype;
1310
- _proto.createEngineResource = function createEngineResource(schema, context) {
1311
- var _context_glTFResource = context.glTFResource, engine = _context_glTFResource.engine, textures = _context_glTFResource.textures;
1312
- var material = new engineCore.PBRSpecularMaterial(engine);
1313
- var diffuseFactor = schema.diffuseFactor, diffuseTexture = schema.diffuseTexture, specularFactor = schema.specularFactor, glossinessFactor = schema.glossinessFactor, specularGlossinessTexture = schema.specularGlossinessTexture;
1314
- if (diffuseFactor) {
1315
- material.baseColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(diffuseFactor[0]), engineMath.Color.linearToGammaSpace(diffuseFactor[1]), engineMath.Color.linearToGammaSpace(diffuseFactor[2]), diffuseFactor[3]);
1316
- }
1317
- if (diffuseTexture) {
1318
- material.baseTexture = textures[diffuseTexture.index];
1319
- MaterialParser._parseTextureTransform(material, diffuseTexture.extensions, context);
1320
- }
1321
- if (specularFactor) {
1322
- material.specularColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(specularFactor[0]), engineMath.Color.linearToGammaSpace(specularFactor[1]), engineMath.Color.linearToGammaSpace(specularFactor[2]));
1323
- }
1324
- if (glossinessFactor !== undefined) {
1325
- material.glossiness = glossinessFactor;
1326
- }
1327
- if (specularGlossinessTexture) {
1328
- material.specularGlossinessTexture = textures[specularGlossinessTexture.index];
1329
- MaterialParser._parseTextureTransform(material, specularGlossinessTexture.extensions, context);
1330
- }
1331
- return material;
1332
- };
1333
- return KHR_materials_pbrSpecularGlossiness;
1334
- }(ExtensionParser);
1335
- KHR_materials_pbrSpecularGlossiness = __decorate([
1336
- registerExtension("KHR_materials_pbrSpecularGlossiness")
1337
- ], KHR_materials_pbrSpecularGlossiness);
1338
-
1339
- var KHR_materials_unlit = /*#__PURE__*/ function(ExtensionParser) {
1340
- _inherits(KHR_materials_unlit, ExtensionParser);
1341
- function KHR_materials_unlit() {
1342
- return ExtensionParser.apply(this, arguments);
1343
- }
1344
- var _proto = KHR_materials_unlit.prototype;
1345
- _proto.createEngineResource = function createEngineResource(schema, context) {
1346
- var engine = context.glTFResource.engine;
1347
- var material = new engineCore.UnlitMaterial(engine);
1348
- return material;
1349
- };
1350
- return KHR_materials_unlit;
1351
- }(ExtensionParser);
1352
- KHR_materials_unlit = __decorate([
1353
- registerExtension("KHR_materials_unlit")
1354
- ], KHR_materials_unlit);
1355
-
1356
- var KHR_materials_variants = /*#__PURE__*/ function(ExtensionParser) {
1357
- _inherits(KHR_materials_variants, ExtensionParser);
1358
- function KHR_materials_variants() {
1359
- return ExtensionParser.apply(this, arguments);
1360
- }
1361
- var _proto = KHR_materials_variants.prototype;
1362
- _proto.parseEngineResource = function parseEngineResource(schema, renderer, context) {
1363
- var _context_gltf = context.gltf, _context_gltf_extensions = _context_gltf.extensions, _context_gltf_extensions_KHR_materials_variants = _context_gltf_extensions.KHR_materials_variants, variantNames = _context_gltf_extensions_KHR_materials_variants.variants, glTFResource = context.glTFResource;
1364
- var mappings = schema.mappings;
1365
- for(var i = 0; i < mappings.length; i++){
1366
- var _mappings_i = mappings[i], material = _mappings_i.material, variants = _mappings_i.variants;
1367
- if (!glTFResource.variants) glTFResource.variants = [];
1368
- glTFResource.variants.push({
1369
- renderer: renderer,
1370
- material: glTFResource.materials[material],
1371
- variants: variants.map(function(index) {
1372
- return variantNames[index].name;
1373
- })
1374
- });
1375
- }
1376
- };
1377
- return KHR_materials_variants;
1378
- }(ExtensionParser);
1379
- KHR_materials_variants = __decorate([
1380
- registerExtension("KHR_materials_variants")
1381
- ], KHR_materials_variants);
1382
-
1383
- var KHR_mesh_quantization = /*#__PURE__*/ function(ExtensionParser) {
1384
- _inherits(KHR_mesh_quantization, ExtensionParser);
1385
- function KHR_mesh_quantization() {
1386
- return ExtensionParser.apply(this, arguments);
1387
- }
1388
- return KHR_mesh_quantization;
1389
- }(ExtensionParser);
1390
- KHR_mesh_quantization = __decorate([
1391
- registerExtension("KHR_mesh_quantization")
1392
- ], KHR_mesh_quantization);
1393
-
1394
- var KHR_texture_transform = /*#__PURE__*/ function(ExtensionParser) {
1395
- _inherits(KHR_texture_transform, ExtensionParser);
1396
- function KHR_texture_transform() {
1397
- return ExtensionParser.apply(this, arguments);
1398
- }
1399
- var _proto = KHR_texture_transform.prototype;
1400
- _proto.parseEngineResource = function parseEngineResource(schema, material, context) {
1401
- var offset = schema.offset, rotation = schema.rotation, scale = schema.scale, texCoord = schema.texCoord;
1402
- if (offset) {
1403
- material.tilingOffset.z = offset[0];
1404
- material.tilingOffset.w = offset[1];
1405
- }
1406
- if (scale) {
1407
- material.tilingOffset.x = scale[0];
1408
- material.tilingOffset.y = scale[1];
1409
- }
1410
- if (rotation) {
1411
- engineCore.Logger.warn("rotation in KHR_texture_transform is not supported now");
1412
- }
1413
- if (texCoord) {
1414
- engineCore.Logger.warn("texCoord in KHR_texture_transform is not supported now");
1415
- }
1416
- };
1417
- return KHR_texture_transform;
1418
- }(ExtensionParser);
1419
- KHR_texture_transform = __decorate([
1420
- registerExtension("KHR_texture_transform")
1421
- ], KHR_texture_transform);
1422
-
1423
- var GalaceanMaterialsRemap = /*#__PURE__*/ function(ExtensionParser) {
1424
- _inherits(GalaceanMaterialsRemap, ExtensionParser);
1425
- function GalaceanMaterialsRemap() {
1426
- return ExtensionParser.apply(this, arguments);
1427
- }
1428
- var _proto = GalaceanMaterialsRemap.prototype;
1429
- _proto.createEngineResource = function createEngineResource(schema, context) {
1430
- var engine = context.glTFResource.engine;
1431
- // @ts-ignore
1432
- return engine.resourceManager.getResourceByRef(schema);
1433
- };
1434
- return GalaceanMaterialsRemap;
1435
- }(ExtensionParser);
1436
- GalaceanMaterialsRemap = __decorate([
1437
- registerExtension("OASIS_materials_remap")
1438
- ], GalaceanMaterialsRemap);
1439
-
1440
- function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1441
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
1442
-
1443
- if (it) return (it = it.call(o)).next.bind(it);
1444
- // Fallback for engines without symbol support
1445
- if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") {
1446
- if (it) o = it;
1447
-
1448
- var i = 0;
1449
-
1450
- return function() {
1451
- if (i >= o.length) return { done: true };
1452
-
1453
- return { done: false, value: o[i++] };
1454
- };
1455
- }
1456
-
1457
- throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1458
- }
1459
-
1460
- var AnimationParser = /*#__PURE__*/ function(Parser) {
1461
- _inherits(AnimationParser, Parser);
1462
- function AnimationParser() {
1463
- return Parser.apply(this, arguments);
1464
- }
1465
- var _proto = AnimationParser.prototype;
1466
- _proto.parse = function parse(context) {
1467
- var gltf = context.gltf; context.buffers; var glTFResource = context.glTFResource;
1468
- var entities = glTFResource.entities;
1469
- var animations = gltf.animations, accessors = gltf.accessors;
1470
- if (!animations) {
1471
- return;
1186
+ var _proto = GLTFAnimationParser.prototype;
1187
+ _proto.parse = function parse(context) {
1188
+ var gltf = context.gltf; context.buffers; var glTFResource = context.glTFResource;
1189
+ var entities = glTFResource.entities;
1190
+ var animations = gltf.animations, accessors = gltf.accessors;
1191
+ if (!animations) {
1192
+ return;
1472
1193
  }
1473
1194
  var animationClipsPromiseInfo = context.animationClipsPromiseInfo;
1474
1195
  var animationClipCount = animations.length;
@@ -1631,15 +1352,15 @@ var AnimationParser = /*#__PURE__*/ function(Parser) {
1631
1352
  }
1632
1353
  }
1633
1354
  };
1634
- return AnimationParser;
1635
- }(Parser);
1355
+ return GLTFAnimationParser;
1356
+ }(GLTFParser);
1636
1357
 
1637
- var BufferParser = /*#__PURE__*/ function(Parser) {
1638
- _inherits(BufferParser, Parser);
1639
- function BufferParser() {
1640
- return Parser.apply(this, arguments);
1358
+ var GLTFBufferParser = /*#__PURE__*/ function(GLTFParser) {
1359
+ _inherits(GLTFBufferParser, GLTFParser);
1360
+ function GLTFBufferParser() {
1361
+ return GLTFParser.apply(this, arguments);
1641
1362
  }
1642
- var _proto = BufferParser.prototype;
1363
+ var _proto = GLTFBufferParser.prototype;
1643
1364
  _proto.parse = function parse(context) {
1644
1365
  var glTFResource = context.glTFResource;
1645
1366
  var url = glTFResource.url;
@@ -1670,15 +1391,15 @@ var BufferParser = /*#__PURE__*/ function(Parser) {
1670
1391
  var index = url.lastIndexOf(".");
1671
1392
  return url.substring(index + 1, index + 4) === "glb";
1672
1393
  };
1673
- return BufferParser;
1674
- }(Parser);
1394
+ return GLTFBufferParser;
1395
+ }(GLTFParser);
1675
1396
 
1676
- var EntityParser = /*#__PURE__*/ function(Parser) {
1677
- _inherits(EntityParser, Parser);
1678
- function EntityParser() {
1679
- return Parser.apply(this, arguments);
1397
+ var GLTFEntityParser = /*#__PURE__*/ function(GLTFParser) {
1398
+ _inherits(GLTFEntityParser, GLTFParser);
1399
+ function GLTFEntityParser() {
1400
+ return GLTFParser.apply(this, arguments);
1680
1401
  }
1681
- var _proto = EntityParser.prototype;
1402
+ var _proto = GLTFEntityParser.prototype;
1682
1403
  _proto.parse = function parse(context) {
1683
1404
  var glTFResource = context.glTFResource, nodes = context.gltf.nodes;
1684
1405
  var engine = glTFResource.engine;
@@ -1687,7 +1408,7 @@ var EntityParser = /*#__PURE__*/ function(Parser) {
1687
1408
  for(var i = 0; i < nodes.length; i++){
1688
1409
  var gltfNode = nodes[i];
1689
1410
  var matrix = gltfNode.matrix, translation = gltfNode.translation, rotation = gltfNode.rotation, scale = gltfNode.scale;
1690
- var entity = new engineCore.Entity(engine, gltfNode.name || "" + EntityParser._defaultName + i);
1411
+ var entity = new engineCore.Entity(engine, gltfNode.name || "" + GLTFEntityParser._defaultName + i);
1691
1412
  var transform = entity.transform;
1692
1413
  if (matrix) {
1693
1414
  var localMatrix = transform.localMatrix;
@@ -1745,43 +1466,153 @@ var EntityParser = /*#__PURE__*/ function(Parser) {
1745
1466
  glTFResource.sceneRoots = sceneRoots;
1746
1467
  glTFResource.defaultSceneRoot = sceneRoots[sceneID];
1747
1468
  };
1748
- return EntityParser;
1749
- }(Parser);
1469
+ return GLTFEntityParser;
1470
+ }(GLTFParser);
1750
1471
  (function() {
1751
- /** @internal */ EntityParser._defaultName = "_GLTF_ENTITY_";
1472
+ /** @internal */ GLTFEntityParser._defaultName = "_GLTF_ENTITY_";
1752
1473
  })();
1753
1474
 
1754
- var MeshParser = /*#__PURE__*/ function(Parser1) {
1755
- _inherits(MeshParser, Parser1);
1756
- function MeshParser() {
1757
- return Parser1.apply(this, arguments);
1475
+ var GLTFMaterialParser = /*#__PURE__*/ function(GLTFParser1) {
1476
+ _inherits(GLTFMaterialParser, GLTFParser1);
1477
+ function GLTFMaterialParser() {
1478
+ return GLTFParser1.apply(this, arguments);
1479
+ }
1480
+ var _proto = GLTFMaterialParser.prototype;
1481
+ _proto.parse = function parse(context) {
1482
+ var gltf = context.gltf, glTFResource = context.glTFResource, materialsPromiseInfo = context.materialsPromiseInfo;
1483
+ if (!gltf.materials) return;
1484
+ var engine = glTFResource.engine;
1485
+ var materialPromises = [];
1486
+ for(var i = 0; i < gltf.materials.length; i++){
1487
+ var materialInfo = gltf.materials[i];
1488
+ var material = GLTFParser.executeExtensionsCreateAndParse(materialInfo.extensions, context, materialInfo);
1489
+ if (!material) {
1490
+ material = new engineCore.PBRMaterial(engine);
1491
+ material.name = materialInfo.name;
1492
+ GLTFMaterialParser._parseStandardProperty(context, material, materialInfo);
1493
+ }
1494
+ materialPromises.push(material);
1495
+ }
1496
+ return engineCore.AssetPromise.all(materialPromises).then(function(materials) {
1497
+ glTFResource.materials = materials;
1498
+ for(var i = 0; i < gltf.materials.length; i++){
1499
+ var materialInfo = gltf.materials[i];
1500
+ GLTFParser.executeExtensionsAdditiveAndParse(materialInfo.extensions, context, materials[i], materialInfo);
1501
+ }
1502
+ materialsPromiseInfo.resolve(materials);
1503
+ return materialsPromiseInfo.promise;
1504
+ });
1505
+ };
1506
+ /**
1507
+ * @internal
1508
+ */ GLTFMaterialParser._checkOtherTextureTransform = function _checkOtherTextureTransform(texture, textureName) {
1509
+ var _texture_extensions;
1510
+ if ((_texture_extensions = texture.extensions) == null ? void 0 : _texture_extensions.KHR_texture_transform) {
1511
+ engineCore.Logger.warn("" + textureName + " texture always use the KHR_texture_transform of the base texture.");
1512
+ }
1513
+ };
1514
+ /**
1515
+ * @internal
1516
+ */ GLTFMaterialParser._parseStandardProperty = function _parseStandardProperty(context, material, materialInfo) {
1517
+ var textures = context.glTFResource.textures;
1518
+ var pbrMetallicRoughness = materialInfo.pbrMetallicRoughness, normalTexture = materialInfo.normalTexture, occlusionTexture = materialInfo.occlusionTexture, emissiveTexture = materialInfo.emissiveTexture, emissiveFactor = materialInfo.emissiveFactor, alphaMode = materialInfo.alphaMode, alphaCutoff = materialInfo.alphaCutoff, doubleSided = materialInfo.doubleSided;
1519
+ if (pbrMetallicRoughness) {
1520
+ var baseColorFactor = pbrMetallicRoughness.baseColorFactor, baseColorTexture = pbrMetallicRoughness.baseColorTexture, metallicFactor = pbrMetallicRoughness.metallicFactor, roughnessFactor = pbrMetallicRoughness.roughnessFactor, metallicRoughnessTexture = pbrMetallicRoughness.metallicRoughnessTexture;
1521
+ if (baseColorFactor) {
1522
+ material.baseColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(baseColorFactor[0]), engineMath.Color.linearToGammaSpace(baseColorFactor[1]), engineMath.Color.linearToGammaSpace(baseColorFactor[2]), baseColorFactor[3]);
1523
+ }
1524
+ if (baseColorTexture) {
1525
+ material.baseTexture = textures[baseColorTexture.index];
1526
+ GLTFParser.executeExtensionsAdditiveAndParse(baseColorTexture.extensions, context, material, baseColorTexture);
1527
+ }
1528
+ if (material.constructor === engineCore.PBRMaterial) {
1529
+ material.metallic = metallicFactor != null ? metallicFactor : 1;
1530
+ material.roughness = roughnessFactor != null ? roughnessFactor : 1;
1531
+ if (metallicRoughnessTexture) {
1532
+ material.roughnessMetallicTexture = textures[metallicRoughnessTexture.index];
1533
+ GLTFMaterialParser._checkOtherTextureTransform(metallicRoughnessTexture, "Roughness metallic");
1534
+ }
1535
+ }
1536
+ }
1537
+ if (material.constructor === engineCore.PBRMaterial || material.constructor === engineCore.PBRSpecularMaterial) {
1538
+ if (emissiveTexture) {
1539
+ material.emissiveTexture = textures[emissiveTexture.index];
1540
+ GLTFMaterialParser._checkOtherTextureTransform(emissiveTexture, "Emissive");
1541
+ }
1542
+ if (emissiveFactor) {
1543
+ material.emissiveColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(emissiveFactor[0]), engineMath.Color.linearToGammaSpace(emissiveFactor[1]), engineMath.Color.linearToGammaSpace(emissiveFactor[2]));
1544
+ }
1545
+ if (normalTexture) {
1546
+ var index = normalTexture.index, scale = normalTexture.scale;
1547
+ material.normalTexture = textures[index];
1548
+ GLTFMaterialParser._checkOtherTextureTransform(normalTexture, "Normal");
1549
+ if (scale !== undefined) {
1550
+ material.normalTextureIntensity = scale;
1551
+ }
1552
+ }
1553
+ if (occlusionTexture) {
1554
+ var index1 = occlusionTexture.index, strength = occlusionTexture.strength, texCoord = occlusionTexture.texCoord;
1555
+ material.occlusionTexture = textures[index1];
1556
+ GLTFMaterialParser._checkOtherTextureTransform(occlusionTexture, "Occlusion");
1557
+ if (strength !== undefined) {
1558
+ material.occlusionTextureIntensity = strength;
1559
+ }
1560
+ if (texCoord === engineCore.TextureCoordinate.UV1) {
1561
+ material.occlusionTextureCoord = engineCore.TextureCoordinate.UV1;
1562
+ } else if (texCoord > engineCore.TextureCoordinate.UV1) {
1563
+ engineCore.Logger.warn("Occlusion texture uv coordinate must be UV0 or UV1.");
1564
+ }
1565
+ }
1566
+ }
1567
+ if (doubleSided) {
1568
+ material.renderFace = engineCore.RenderFace.Double;
1569
+ } else {
1570
+ material.renderFace = engineCore.RenderFace.Front;
1571
+ }
1572
+ switch(alphaMode){
1573
+ case MaterialAlphaMode.OPAQUE:
1574
+ material.isTransparent = false;
1575
+ break;
1576
+ case MaterialAlphaMode.BLEND:
1577
+ material.isTransparent = true;
1578
+ break;
1579
+ case MaterialAlphaMode.MASK:
1580
+ material.alphaCutoff = alphaCutoff != null ? alphaCutoff : 0.5;
1581
+ break;
1582
+ }
1583
+ };
1584
+ return GLTFMaterialParser;
1585
+ }(GLTFParser);
1586
+
1587
+ function _instanceof(left, right) {
1588
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
1589
+ return !!right[Symbol.hasInstance](left);
1590
+ } else return left instanceof right;
1591
+ }
1592
+
1593
+ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1594
+ _inherits(GLTFMeshParser, GLTFParser1);
1595
+ function GLTFMeshParser() {
1596
+ return GLTFParser1.apply(this, arguments);
1758
1597
  }
1759
- var _proto = MeshParser.prototype;
1598
+ var _proto = GLTFMeshParser.prototype;
1760
1599
  _proto.parse = function parse(context) {
1761
1600
  var _loop = function(i) {
1762
1601
  var _loop = function(j) {
1763
1602
  var gltfPrimitive = gltfMesh.primitives[j];
1764
- var _gltfPrimitive_extensions = gltfPrimitive.extensions, extensions = _gltfPrimitive_extensions === void 0 ? {} : _gltfPrimitive_extensions;
1765
- var KHR_draco_mesh_compression = extensions.KHR_draco_mesh_compression;
1766
1603
  primitivePromises[j] = new Promise(function(resolve) {
1767
- var mesh = new engineCore.ModelMesh(engine, gltfMesh.name || j + "");
1768
- if (KHR_draco_mesh_compression) {
1769
- Parser.createEngineResource("KHR_draco_mesh_compression", KHR_draco_mesh_compression, context, gltfPrimitive).then(function(decodedGeometry) {
1770
- return _this._parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, function(attributeSemantic) {
1771
- for(var j = 0; j < decodedGeometry.attributes.length; j++){
1772
- if (decodedGeometry.attributes[j].name === attributeSemantic) {
1773
- return decodedGeometry.attributes[j].array;
1774
- }
1775
- }
1776
- return null;
1777
- }, function(attributeSemantic, shapeIndex) {
1778
- throw "BlendShape animation is not supported when using draco.";
1779
- }, function() {
1780
- return decodedGeometry.index.array;
1781
- }, context.keepMeshData);
1782
- }).then(resolve);
1604
+ var mesh = GLTFParser.executeExtensionsCreateAndParse(gltfPrimitive.extensions, context, gltfPrimitive, gltfMesh);
1605
+ if (mesh) {
1606
+ if (_instanceof(mesh, engineCore.ModelMesh)) {
1607
+ resolve(mesh);
1608
+ } else {
1609
+ mesh.then(function(mesh) {
1610
+ return resolve(mesh);
1611
+ });
1612
+ }
1783
1613
  } else {
1784
- _this._parseMeshFromGLTFPrimitive(context, mesh, gltfMesh, gltfPrimitive, gltf, function(attributeSemantic) {
1614
+ var mesh1 = new engineCore.ModelMesh(engine, gltfMesh.name || j + "");
1615
+ GLTFMeshParser._parseMeshFromGLTFPrimitive(context, mesh1, gltfMesh, gltfPrimitive, gltf, function(attributeSemantic) {
1785
1616
  return null;
1786
1617
  }, function(attributeName, shapeIndex) {
1787
1618
  var shapeAccessorIdx = gltfPrimitive.targets[shapeIndex];
@@ -1804,7 +1635,6 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1804
1635
  for(var j = 0; j < gltfMesh.primitives.length; j++)_loop(j);
1805
1636
  meshPromises[i] = Promise.all(primitivePromises);
1806
1637
  };
1807
- var _this = this;
1808
1638
  var gltf = context.gltf, buffers = context.buffers, glTFResource = context.glTFResource;
1809
1639
  var engine = glTFResource.engine;
1810
1640
  if (!gltf.meshes) return;
@@ -1817,7 +1647,9 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1817
1647
  }).catch(meshesPromiseInfo.reject);
1818
1648
  return meshesPromiseInfo.promise;
1819
1649
  };
1820
- _proto._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
1650
+ /**
1651
+ * @internal
1652
+ */ GLTFMeshParser._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
1821
1653
  var accessors = gltf.accessors;
1822
1654
  context.buffers;
1823
1655
  var attributes = gltfPrimitive.attributes, targets = gltfPrimitive.targets, indices = gltfPrimitive.indices, mode = gltfPrimitive.mode;
@@ -1890,7 +1722,7 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1890
1722
  }
1891
1723
  }
1892
1724
  } else {
1893
- var position1 = MeshParser._tempVector3;
1725
+ var position1 = GLTFMeshParser._tempVector3;
1894
1726
  min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1895
1727
  max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1896
1728
  var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
@@ -1942,7 +1774,7 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1942
1774
  mesh.addSubMesh(0, vertexCount, mode);
1943
1775
  }
1944
1776
  // BlendShapes
1945
- targets && this._createBlendShape(mesh, gltfMesh, targets, getBlendShapeData);
1777
+ targets && GLTFMeshParser._createBlendShape(mesh, gltfMesh, targets, getBlendShapeData);
1946
1778
  mesh.uploadData(!keepMeshData);
1947
1779
  //@ts-ignore
1948
1780
  mesh._positions = positions;
@@ -1952,7 +1784,9 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1952
1784
  mesh._boneWeights = boneWeights;
1953
1785
  return Promise.resolve(mesh);
1954
1786
  };
1955
- _proto._createBlendShape = function _createBlendShape(mesh, glTFMesh, glTFTargets, getBlendShapeData) {
1787
+ /**
1788
+ * @internal
1789
+ */ GLTFMeshParser._createBlendShape = function _createBlendShape(mesh, glTFMesh, glTFTargets, getBlendShapeData) {
1956
1790
  var blendShapeNames = glTFMesh.extras ? glTFMesh.extras.targetNames : null;
1957
1791
  for(var i = 0, n = glTFTargets.length; i < n; i++){
1958
1792
  var name = blendShapeNames ? blendShapeNames[i] : "blendShape" + i;
@@ -1967,151 +1801,40 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1967
1801
  mesh.addBlendShape(blendShape);
1968
1802
  }
1969
1803
  };
1970
- /**
1971
- * @deprecated
1972
- */ _proto._parseMeshFromGLTFPrimitiveDraco = function _parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
1973
- var attributes = gltfPrimitive.attributes, targets = gltfPrimitive.targets, indices = gltfPrimitive.indices, mode = gltfPrimitive.mode;
1974
- var vertexCount;
1975
- var accessors = gltf.accessors;
1976
- var accessor = accessors[attributes["POSITION"]];
1977
- var positionBuffer = getVertexBufferData("POSITION");
1978
- var positions = GLTFUtil.floatBufferToVector3Array(positionBuffer);
1979
- mesh.setPositions(positions);
1980
- var bounds = mesh.bounds;
1981
- vertexCount = accessor.count;
1982
- if (accessor.min && accessor.max) {
1983
- bounds.min.copyFromArray(accessor.min);
1984
- bounds.max.copyFromArray(accessor.max);
1985
- } else {
1986
- var position = MeshParser._tempVector3;
1987
- var min = bounds.min, max = bounds.max;
1988
- min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1989
- max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1990
- var stride = positionBuffer.length / vertexCount;
1991
- for(var j = 0; j < vertexCount; j++){
1992
- var offset = j * stride;
1993
- position.copyFromArray(positionBuffer, offset);
1994
- engineMath.Vector3.min(min, position, min);
1995
- engineMath.Vector3.max(max, position, max);
1996
- }
1997
- }
1998
- for(var attributeSemantic in attributes){
1999
- if (attributeSemantic === "POSITION") {
2000
- continue;
2001
- }
2002
- var bufferData = getVertexBufferData(attributeSemantic);
2003
- switch(attributeSemantic){
2004
- case "NORMAL":
2005
- var normals = GLTFUtil.floatBufferToVector3Array(bufferData);
2006
- mesh.setNormals(normals);
2007
- break;
2008
- case "TEXCOORD_0":
2009
- var texturecoords = GLTFUtil.floatBufferToVector2Array(bufferData);
2010
- mesh.setUVs(texturecoords, 0);
2011
- break;
2012
- case "TEXCOORD_1":
2013
- var texturecoords1 = GLTFUtil.floatBufferToVector2Array(bufferData);
2014
- mesh.setUVs(texturecoords1, 1);
2015
- break;
2016
- case "TEXCOORD_2":
2017
- var texturecoords2 = GLTFUtil.floatBufferToVector2Array(bufferData);
2018
- mesh.setUVs(texturecoords2, 2);
2019
- break;
2020
- case "TEXCOORD_3":
2021
- var texturecoords3 = GLTFUtil.floatBufferToVector2Array(bufferData);
2022
- mesh.setUVs(texturecoords3, 3);
2023
- break;
2024
- case "TEXCOORD_4":
2025
- var texturecoords4 = GLTFUtil.floatBufferToVector2Array(bufferData);
2026
- mesh.setUVs(texturecoords4, 4);
2027
- break;
2028
- case "TEXCOORD_5":
2029
- var texturecoords5 = GLTFUtil.floatBufferToVector2Array(bufferData);
2030
- mesh.setUVs(texturecoords5, 5);
2031
- break;
2032
- case "TEXCOORD_6":
2033
- var texturecoords6 = GLTFUtil.floatBufferToVector2Array(bufferData);
2034
- mesh.setUVs(texturecoords6, 6);
2035
- break;
2036
- case "TEXCOORD_7":
2037
- var texturecoords7 = GLTFUtil.floatBufferToVector2Array(bufferData);
2038
- mesh.setUVs(texturecoords7, 7);
2039
- break;
2040
- case "COLOR_0":
2041
- var colors = GLTFUtil.floatBufferToColorArray(bufferData, accessors[attributes["COLOR_0"]].type === AccessorType.VEC3);
2042
- mesh.setColors(colors);
2043
- break;
2044
- case "TANGENT":
2045
- var tangents = GLTFUtil.floatBufferToVector4Array(bufferData);
2046
- mesh.setTangents(tangents);
2047
- break;
2048
- case "JOINTS_0":
2049
- var joints = GLTFUtil.floatBufferToVector4Array(bufferData);
2050
- mesh.setBoneIndices(joints);
2051
- break;
2052
- case "WEIGHTS_0":
2053
- var weights = GLTFUtil.floatBufferToVector4Array(bufferData);
2054
- mesh.setBoneWeights(weights);
2055
- break;
2056
- }
2057
- }
2058
- // Indices
2059
- if (indices !== undefined) {
2060
- var indexAccessor = gltf.accessors[indices];
2061
- var indexData = getIndexBufferData();
2062
- mesh.setIndices(indexData);
2063
- mesh.addSubMesh(0, indexAccessor.count, mode);
2064
- } else {
2065
- mesh.addSubMesh(0, vertexCount, mode);
2066
- }
2067
- // BlendShapes
2068
- targets && this._createBlendShape(mesh, gltfMesh, targets, getBlendShapeData);
2069
- mesh.uploadData(!keepMeshData);
2070
- return Promise.resolve(mesh);
2071
- };
2072
- return MeshParser;
2073
- }(Parser);
1804
+ return GLTFMeshParser;
1805
+ }(GLTFParser);
2074
1806
  (function() {
2075
- MeshParser._tempVector3 = new engineMath.Vector3();
1807
+ GLTFMeshParser._tempVector3 = new engineMath.Vector3();
2076
1808
  })();
2077
1809
 
2078
- var SceneParser$1 = /*#__PURE__*/ function(Parser1) {
2079
- _inherits(SceneParser, Parser1);
2080
- function SceneParser() {
2081
- return Parser1.apply(this, arguments);
1810
+ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
1811
+ _inherits(GLTFSceneParser, GLTFParser1);
1812
+ function GLTFSceneParser() {
1813
+ return GLTFParser1.apply(this, arguments);
2082
1814
  }
2083
- var _proto = SceneParser.prototype;
1815
+ var _proto = GLTFSceneParser.prototype;
2084
1816
  _proto.parse = function parse(context) {
2085
1817
  var glTFResource = context.glTFResource, gltf = context.gltf;
2086
1818
  var entities = glTFResource.entities;
2087
1819
  var nodes = gltf.nodes, gltfCameras = gltf.cameras;
2088
1820
  if (!nodes) return;
2089
1821
  var defaultSceneRootPromiseInfo = context.defaultSceneRootPromiseInfo;
2090
- var promises = [];
2091
1822
  for(var i = 0; i < nodes.length; i++){
2092
1823
  var gltfNode = nodes[i];
2093
- var cameraID = gltfNode.camera, meshID = gltfNode.mesh, _gltfNode_extensions = gltfNode.extensions, extensions = _gltfNode_extensions === void 0 ? {} : _gltfNode_extensions;
2094
- var KHR_lights_punctual = extensions.KHR_lights_punctual;
1824
+ var cameraID = gltfNode.camera, meshID = gltfNode.mesh, extensions = gltfNode.extensions;
2095
1825
  var entity = entities[i];
2096
1826
  if (cameraID !== undefined) {
2097
1827
  this._createCamera(glTFResource, gltfCameras[cameraID], entity);
2098
1828
  }
2099
1829
  if (meshID !== undefined) {
2100
- promises.push(this._createRenderer(context, gltfNode, entity));
2101
- }
2102
- if (KHR_lights_punctual) {
2103
- var lightIndex = KHR_lights_punctual.light;
2104
- var lights = gltf.extensions.KHR_lights_punctual.lights;
2105
- Parser.parseEngineResource("KHR_lights_punctual", lights[lightIndex], entity, context);
1830
+ this._createRenderer(context, gltfNode, entity);
2106
1831
  }
1832
+ GLTFParser.executeExtensionsAdditiveAndParse(extensions, context, entity, gltfNode);
2107
1833
  }
2108
1834
  if (glTFResource.defaultSceneRoot) {
2109
1835
  this._createAnimator(context);
2110
1836
  }
2111
- gltf.extensions && delete gltf.extensions["OASIS_materials_remap"];
2112
- engineCore.AssetPromise.all(promises).then(function() {
2113
- return defaultSceneRootPromiseInfo.resolve(glTFResource.defaultSceneRoot);
2114
- }).catch(defaultSceneRootPromiseInfo.reject);
1837
+ defaultSceneRootPromiseInfo.resolve(glTFResource.defaultSceneRoot);
2115
1838
  return defaultSceneRootPromiseInfo.promise;
2116
1839
  };
2117
1840
  _proto._createCamera = function _createCamera(context, cameraSchema, entity) {
@@ -2149,6 +1872,7 @@ var SceneParser$1 = /*#__PURE__*/ function(Parser1) {
2149
1872
  };
2150
1873
  _proto._createRenderer = function _createRenderer(context, gltfNode, entity) {
2151
1874
  var _loop = function(i) {
1875
+ var gltfPrimitive = gltfMeshPrimitives[i];
2152
1876
  var mesh = meshes[meshID][i];
2153
1877
  var renderer = void 0;
2154
1878
  if (skinID !== undefined || blendShapeWeights) {
@@ -2166,27 +1890,16 @@ var SceneParser$1 = /*#__PURE__*/ function(Parser1) {
2166
1890
  renderer = entity.addComponent(engineCore.MeshRenderer);
2167
1891
  renderer.mesh = mesh;
2168
1892
  }
2169
- var materialIndex = gltfMeshPrimitives[i].material;
2170
- var remapMaterials = gltf.extensions && gltf.extensions["OASIS_materials_remap"];
2171
- if (remapMaterials && remapMaterials[materialIndex]) {
2172
- promises.push(remapMaterials[materialIndex].then(function(mtl) {
2173
- renderer.setMaterial(mtl);
2174
- }));
2175
- } else {
2176
- var material = (materials == null ? void 0 : materials[materialIndex]) || SceneParser._getDefaultMaterial(engine);
2177
- renderer.setMaterial(material);
2178
- // Enable vertex color if mesh has COLOR_0 vertex element
2179
- mesh.vertexElements.forEach(function(element) {
2180
- if (element.semantic === "COLOR_0") {
2181
- renderer.enableVertexColor = true;
2182
- }
2183
- });
2184
- }
2185
- var _gltfMeshPrimitives_i = gltfMeshPrimitives[i], _gltfMeshPrimitives_i_extensions = _gltfMeshPrimitives_i.extensions, extensions = _gltfMeshPrimitives_i_extensions === void 0 ? {} : _gltfMeshPrimitives_i_extensions;
2186
- var KHR_materials_variants = extensions.KHR_materials_variants;
2187
- if (KHR_materials_variants) {
2188
- Parser.parseEngineResource("KHR_materials_variants", KHR_materials_variants, renderer, context);
2189
- }
1893
+ var materialIndex = gltfPrimitive.material;
1894
+ var material = (materials == null ? void 0 : materials[materialIndex]) || GLTFSceneParser._getDefaultMaterial(engine);
1895
+ renderer.setMaterial(material);
1896
+ // Enable vertex color if mesh has COLOR_0 vertex element
1897
+ mesh.vertexElements.forEach(function(element) {
1898
+ if (element.semantic === "COLOR_0") {
1899
+ renderer.enableVertexColor = true;
1900
+ }
1901
+ });
1902
+ GLTFParser.executeExtensionsAdditiveAndParse(gltfPrimitive.extensions, context, renderer, gltfPrimitive);
2190
1903
  };
2191
1904
  var glTFResource = context.glTFResource, gltf = context.gltf;
2192
1905
  var gltfMeshes = gltf.meshes;
@@ -2195,9 +1908,7 @@ var SceneParser$1 = /*#__PURE__*/ function(Parser1) {
2195
1908
  var glTFMesh = gltfMeshes[meshID];
2196
1909
  var gltfMeshPrimitives = glTFMesh.primitives;
2197
1910
  var blendShapeWeights = gltfNode.weights || glTFMesh.weights;
2198
- var promises = [];
2199
1911
  for(var i = 0; i < gltfMeshPrimitives.length; i++)_loop(i);
2200
- return Promise.all(promises);
2201
1912
  };
2202
1913
  _proto._createAnimator = function _createAnimator(context) {
2203
1914
  if (!context.hasSkinned && !context.glTFResource.animations) {
@@ -2224,21 +1935,21 @@ var SceneParser$1 = /*#__PURE__*/ function(Parser1) {
2224
1935
  }
2225
1936
  }
2226
1937
  };
2227
- SceneParser._getDefaultMaterial = function _getDefaultMaterial(engine) {
2228
- if (!SceneParser._defaultMaterial) {
2229
- SceneParser._defaultMaterial = new engineCore.BlinnPhongMaterial(engine);
1938
+ GLTFSceneParser._getDefaultMaterial = function _getDefaultMaterial(engine) {
1939
+ if (!GLTFSceneParser._defaultMaterial) {
1940
+ GLTFSceneParser._defaultMaterial = new engineCore.BlinnPhongMaterial(engine);
2230
1941
  }
2231
- return SceneParser._defaultMaterial;
1942
+ return GLTFSceneParser._defaultMaterial;
2232
1943
  };
2233
- return SceneParser;
2234
- }(Parser);
1944
+ return GLTFSceneParser;
1945
+ }(GLTFParser);
2235
1946
 
2236
- var SkinParser = /*#__PURE__*/ function(Parser) {
2237
- _inherits(SkinParser, Parser);
2238
- function SkinParser() {
2239
- return Parser.apply(this, arguments);
1947
+ var GLTFSkinParser = /*#__PURE__*/ function(GLTFParser) {
1948
+ _inherits(GLTFSkinParser, GLTFParser);
1949
+ function GLTFSkinParser() {
1950
+ return GLTFParser.apply(this, arguments);
2240
1951
  }
2241
- var _proto = SkinParser.prototype;
1952
+ var _proto = GLTFSkinParser.prototype;
2242
1953
  _proto.parse = function parse(context) {
2243
1954
  var glTFResource = context.glTFResource, gltf = context.gltf; context.buffers;
2244
1955
  var entities = glTFResource.entities;
@@ -2314,15 +2025,15 @@ var SkinParser = /*#__PURE__*/ function(Parser) {
2314
2025
  rootNode = entity1;
2315
2026
  }
2316
2027
  };
2317
- return SkinParser;
2318
- }(Parser);
2028
+ return GLTFSkinParser;
2029
+ }(GLTFParser);
2319
2030
 
2320
- var TextureParser = /*#__PURE__*/ function(Parser) {
2321
- _inherits(TextureParser, Parser);
2322
- function TextureParser() {
2323
- return Parser.apply(this, arguments);
2031
+ var GLTFTextureParser = /*#__PURE__*/ function(GLTFParser) {
2032
+ _inherits(GLTFTextureParser, GLTFParser);
2033
+ function GLTFTextureParser() {
2034
+ return GLTFParser.apply(this, arguments);
2324
2035
  }
2325
- var _proto = TextureParser.prototype;
2036
+ var _proto = GLTFTextureParser.prototype;
2326
2037
  _proto.parse = function parse(context) {
2327
2038
  var _this = this;
2328
2039
  var glTFResource = context.glTFResource, gltf = context.gltf, buffers = context.buffers;
@@ -2382,36 +2093,38 @@ var TextureParser = /*#__PURE__*/ function(Parser) {
2382
2093
  }
2383
2094
  }
2384
2095
  if (wrapS) {
2385
- texture.wrapModeU = TextureParser._wrapMap[wrapS];
2096
+ texture.wrapModeU = GLTFTextureParser._wrapMap[wrapS];
2386
2097
  }
2387
2098
  if (wrapT) {
2388
- texture.wrapModeV = TextureParser._wrapMap[wrapT];
2099
+ texture.wrapModeV = GLTFTextureParser._wrapMap[wrapT];
2389
2100
  }
2390
2101
  };
2391
- return TextureParser;
2392
- }(Parser);
2102
+ return GLTFTextureParser;
2103
+ }(GLTFParser);
2393
2104
  (function() {
2394
2105
  var _obj;
2395
- TextureParser._wrapMap = (_obj = {}, _obj[TextureWrapMode.CLAMP_TO_EDGE] = engineCore.TextureWrapMode.Clamp, _obj[TextureWrapMode.MIRRORED_REPEAT] = engineCore.TextureWrapMode.Mirror, _obj[TextureWrapMode.REPEAT] = engineCore.TextureWrapMode.Repeat, _obj);
2106
+ GLTFTextureParser._wrapMap = (_obj = {}, _obj[TextureWrapMode.CLAMP_TO_EDGE] = engineCore.TextureWrapMode.Clamp, _obj[TextureWrapMode.MIRRORED_REPEAT] = engineCore.TextureWrapMode.Mirror, _obj[TextureWrapMode.REPEAT] = engineCore.TextureWrapMode.Repeat, _obj);
2396
2107
  })();
2397
2108
 
2398
- var Validator = /*#__PURE__*/ function(Parser1) {
2399
- _inherits(Validator, Parser1);
2400
- function Validator() {
2401
- return Parser1.apply(this, arguments);
2109
+ var GLTFValidator = /*#__PURE__*/ function(GLTFParser1) {
2110
+ _inherits(GLTFValidator, GLTFParser1);
2111
+ function GLTFValidator() {
2112
+ return GLTFParser1.apply(this, arguments);
2402
2113
  }
2403
- var _proto = Validator.prototype;
2114
+ var _proto = GLTFValidator.prototype;
2404
2115
  _proto.parse = function parse(context) {
2405
2116
  var _context_gltf = context.gltf, version = _context_gltf.asset.version, extensionsUsed = _context_gltf.extensionsUsed, extensionsRequired = _context_gltf.extensionsRequired;
2406
2117
  var gltfVersion = Number(version);
2407
2118
  if (!(gltfVersion >= 2 && gltfVersion < 3)) {
2408
2119
  throw "Only support gltf 2.x.";
2409
2120
  }
2121
+ var promises = [];
2410
2122
  if (extensionsUsed) {
2411
2123
  engineCore.Logger.info("extensionsUsed: ", extensionsUsed);
2412
2124
  for(var i = 0; i < extensionsUsed.length; i++){
2413
- if (!Parser.hasExtensionParser(extensionsUsed[i])) {
2414
- engineCore.Logger.warn("Extension " + extensionsUsed[i] + " is not implemented, you can customize this extension in gltf.");
2125
+ var extensionUsed = extensionsUsed[i];
2126
+ if (!GLTFParser.hasExtensionParser(extensionUsed)) {
2127
+ engineCore.Logger.warn("Extension " + extensionUsed + " is not implemented, you can customize this extension in gltf.");
2415
2128
  }
2416
2129
  }
2417
2130
  }
@@ -2419,64 +2132,64 @@ var Validator = /*#__PURE__*/ function(Parser1) {
2419
2132
  engineCore.Logger.info("extensionsRequired: " + extensionsRequired);
2420
2133
  for(var i1 = 0; i1 < extensionsRequired.length; i1++){
2421
2134
  var extensionRequired = extensionsRequired[i1];
2422
- if (!Parser.hasExtensionParser(extensionRequired)) {
2135
+ if (!GLTFParser.hasExtensionParser(extensionRequired)) {
2423
2136
  engineCore.Logger.error("GLTF parser has not supported required extension " + extensionRequired + ".");
2424
2137
  } else {
2425
- Parser.initialize(extensionRequired);
2138
+ promises.push(GLTFParser.executeExtensionsInitialize(extensionRequired));
2426
2139
  }
2427
2140
  }
2428
2141
  }
2142
+ return engineCore.AssetPromise.all(promises).then(null);
2429
2143
  };
2430
- return Validator;
2431
- }(Parser);
2144
+ return GLTFValidator;
2145
+ }(GLTFParser);
2432
2146
 
2433
- var GLTFParser = /*#__PURE__*/ function() {
2434
- function GLTFParser(pipes) {
2147
+ /**
2148
+ * GLTF pipeline.
2149
+ */ var GLTFPipeline = /*#__PURE__*/ function() {
2150
+ function GLTFPipeline() {
2151
+ for(var _len = arguments.length, parsers = new Array(_len), _key = 0; _key < _len; _key++){
2152
+ parsers[_key] = arguments[_key];
2153
+ }
2435
2154
  var _this = this;
2436
- this._pipes = [];
2437
- pipes.forEach(function(pipe, index) {
2438
- _this._pipes[index] = new pipe();
2155
+ this._parsers = [];
2156
+ parsers.forEach(function(pipe, index) {
2157
+ _this._parsers[index] = new pipe();
2439
2158
  });
2440
2159
  }
2441
- var _proto = GLTFParser.prototype;
2442
- _proto.parse = function parse(context) {
2160
+ var _proto = GLTFPipeline.prototype;
2161
+ /**
2162
+ * @internal
2163
+ */ _proto._parse = function _parse(context) {
2443
2164
  var _this = this;
2444
2165
  var glTFResource = context.glTFResource;
2445
- var lastPipe;
2166
+ var lastParser;
2446
2167
  return new engineCore.AssetPromise(function(resolve, reject) {
2447
- _this._pipes.forEach(function(parser) {
2448
- if (lastPipe) {
2449
- lastPipe = lastPipe.then(function() {
2168
+ _this._parsers.forEach(function(parser) {
2169
+ if (lastParser) {
2170
+ lastParser = lastParser.then(function() {
2450
2171
  return parser.parse(context);
2451
2172
  });
2452
- if (lastPipe.cancel) {
2453
- context.chainPromises.push(lastPipe);
2173
+ if (lastParser.cancel) {
2174
+ context.chainPromises.push(lastParser);
2454
2175
  }
2455
2176
  } else {
2456
- lastPipe = parser.parse(context);
2177
+ lastParser = parser.parse(context);
2457
2178
  }
2458
2179
  });
2459
- if (lastPipe) {
2460
- lastPipe.then(function() {
2180
+ if (lastParser) {
2181
+ lastParser.then(function() {
2461
2182
  resolve(glTFResource);
2462
2183
  }).catch(reject);
2463
2184
  }
2464
2185
  });
2465
2186
  };
2466
- return GLTFParser;
2187
+ return GLTFPipeline;
2467
2188
  }();
2468
2189
  (function() {
2469
- GLTFParser.defaultPipeline = new GLTFParser([
2470
- BufferParser,
2471
- Validator,
2472
- TextureParser,
2473
- MaterialParser,
2474
- MeshParser,
2475
- EntityParser,
2476
- SkinParser,
2477
- AnimationParser,
2478
- SceneParser$1
2479
- ]);
2190
+ /**
2191
+ * Default pipeline.
2192
+ */ GLTFPipeline.defaultPipeline = new GLTFPipeline(GLTFBufferParser, GLTFValidator, GLTFTextureParser, GLTFMaterialParser, GLTFMeshParser, GLTFEntityParser, GLTFSkinParser, GLTFAnimationParser, GLTFSceneParser);
2480
2193
  })();
2481
2194
 
2482
2195
  /**
@@ -2507,7 +2220,7 @@ var GLTFParser = /*#__PURE__*/ function() {
2507
2220
  this.cameras = null;
2508
2221
  this.lights = null;
2509
2222
  this.sceneRoots = null;
2510
- this.variants = null;
2223
+ this.extensionsData = null;
2511
2224
  };
2512
2225
  return GLTFResource;
2513
2226
  }(engineCore.EngineObject);
@@ -2519,14 +2232,14 @@ var GLTFLoader = /*#__PURE__*/ function(Loader) {
2519
2232
  }
2520
2233
  var _proto = GLTFLoader.prototype;
2521
2234
  _proto.load = function load(item, resourceManager) {
2522
- var _item_params;
2523
2235
  var url = item.url;
2524
- var context = new ParserContext(url);
2236
+ var params = item.params;
2237
+ var context = new GLTFParserContext(url);
2525
2238
  var glTFResource = new GLTFResource(resourceManager.engine, url);
2526
2239
  var masterPromiseInfo = context.masterPromiseInfo;
2527
2240
  context.glTFResource = glTFResource;
2528
- var _item_params_keepMeshData;
2529
- context.keepMeshData = (_item_params_keepMeshData = (_item_params = item.params) == null ? void 0 : _item_params.keepMeshData) != null ? _item_params_keepMeshData : false;
2241
+ var _params_keepMeshData;
2242
+ context.keepMeshData = (_params_keepMeshData = params == null ? void 0 : params.keepMeshData) != null ? _params_keepMeshData : false;
2530
2243
  masterPromiseInfo.onCancel(function() {
2531
2244
  var chainPromises = context.chainPromises;
2532
2245
  for(var _iterator = _create_for_of_iterator_helper_loose(chainPromises), _step; !(_step = _iterator()).done;){
@@ -2534,7 +2247,7 @@ var GLTFLoader = /*#__PURE__*/ function(Loader) {
2534
2247
  promise.cancel();
2535
2248
  }
2536
2249
  });
2537
- GLTFParser.defaultPipeline.parse(context).then(masterPromiseInfo.resolve).catch(function(e) {
2250
+ ((params == null ? void 0 : params.pipeline) || GLTFPipeline.defaultPipeline)._parse(context).then(masterPromiseInfo.resolve).catch(function(e) {
2538
2251
  console.error(e);
2539
2252
  masterPromiseInfo.reject("Error loading glTF model from " + url + " .");
2540
2253
  });
@@ -4558,11 +4271,402 @@ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _asy
4558
4271
  });
4559
4272
  }));
4560
4273
 
4274
+ var _KHR_draco_mesh_compression;
4275
+ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ function(GLTFExtensionParser) {
4276
+ _inherits(KHR_draco_mesh_compression1, GLTFExtensionParser);
4277
+ function KHR_draco_mesh_compression1() {
4278
+ return GLTFExtensionParser.apply(this, arguments);
4279
+ }
4280
+ var _proto = KHR_draco_mesh_compression1.prototype;
4281
+ /**
4282
+ * @override
4283
+ */ _proto.initialize = function initialize() {
4284
+ if (!KHR_draco_mesh_compression._decoder) {
4285
+ KHR_draco_mesh_compression._decoder = new engineDraco.DRACODecoder();
4286
+ }
4287
+ };
4288
+ /**
4289
+ * @override
4290
+ */ _proto.createAndParse = function createAndParse(context, schema, gltfPrimitive, gltfMesh) {
4291
+ var _this = this;
4292
+ var gltf = context.gltf, buffers = context.buffers, engine = context.glTFResource.engine;
4293
+ var bufferViews = gltf.bufferViews, accessors = gltf.accessors;
4294
+ var bufferViewIndex = schema.bufferView, gltfAttributeMap = schema.attributes;
4295
+ var attributeMap = {};
4296
+ var attributeTypeMap = {};
4297
+ for(var attributeName in gltfAttributeMap){
4298
+ attributeMap[attributeName] = gltfAttributeMap[attributeName];
4299
+ }
4300
+ for(var attributeName1 in gltfPrimitive.attributes){
4301
+ if (gltfAttributeMap[attributeName1] !== undefined) {
4302
+ var accessorDef = accessors[gltfPrimitive.attributes[attributeName1]];
4303
+ attributeTypeMap[attributeName1] = GLTFUtil.getComponentType(accessorDef.componentType).name;
4304
+ }
4305
+ }
4306
+ var indexAccessor = accessors[gltfPrimitive.indices];
4307
+ var indexType = GLTFUtil.getComponentType(indexAccessor.componentType).name;
4308
+ var taskConfig = {
4309
+ attributeIDs: attributeMap,
4310
+ attributeTypes: attributeTypeMap,
4311
+ useUniqueIDs: true,
4312
+ indexType: indexType
4313
+ };
4314
+ var buffer = GLTFUtil.getBufferViewData(bufferViews[bufferViewIndex], buffers);
4315
+ return KHR_draco_mesh_compression._decoder.decode(buffer, taskConfig).then(function(decodedGeometry) {
4316
+ var mesh = new engineCore.ModelMesh(engine, gltfMesh.name);
4317
+ return _this._parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, function(attributeSemantic) {
4318
+ for(var j = 0; j < decodedGeometry.attributes.length; j++){
4319
+ if (decodedGeometry.attributes[j].name === attributeSemantic) {
4320
+ return decodedGeometry.attributes[j].array;
4321
+ }
4322
+ }
4323
+ return null;
4324
+ }, function(attributeSemantic, shapeIndex) {
4325
+ throw "BlendShape animation is not supported when using draco.";
4326
+ }, function() {
4327
+ return decodedGeometry.index.array;
4328
+ }, context.keepMeshData);
4329
+ });
4330
+ };
4331
+ _proto._parseMeshFromGLTFPrimitiveDraco = function _parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
4332
+ var attributes = gltfPrimitive.attributes, targets = gltfPrimitive.targets, indices = gltfPrimitive.indices, mode = gltfPrimitive.mode;
4333
+ var vertexCount;
4334
+ var accessors = gltf.accessors;
4335
+ var accessor = accessors[attributes["POSITION"]];
4336
+ var positionBuffer = getVertexBufferData("POSITION");
4337
+ var positions = GLTFUtil.floatBufferToVector3Array(positionBuffer);
4338
+ mesh.setPositions(positions);
4339
+ var bounds = mesh.bounds;
4340
+ vertexCount = accessor.count;
4341
+ if (accessor.min && accessor.max) {
4342
+ bounds.min.copyFromArray(accessor.min);
4343
+ bounds.max.copyFromArray(accessor.max);
4344
+ } else {
4345
+ var position = KHR_draco_mesh_compression._tempVector3;
4346
+ var min = bounds.min, max = bounds.max;
4347
+ min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
4348
+ max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
4349
+ var stride = positionBuffer.length / vertexCount;
4350
+ for(var j = 0; j < vertexCount; j++){
4351
+ var offset = j * stride;
4352
+ position.copyFromArray(positionBuffer, offset);
4353
+ engineMath.Vector3.min(min, position, min);
4354
+ engineMath.Vector3.max(max, position, max);
4355
+ }
4356
+ }
4357
+ for(var attributeSemantic in attributes){
4358
+ if (attributeSemantic === "POSITION") {
4359
+ continue;
4360
+ }
4361
+ var bufferData = getVertexBufferData(attributeSemantic);
4362
+ switch(attributeSemantic){
4363
+ case "NORMAL":
4364
+ var normals = GLTFUtil.floatBufferToVector3Array(bufferData);
4365
+ mesh.setNormals(normals);
4366
+ break;
4367
+ case "TEXCOORD_0":
4368
+ var texturecoords = GLTFUtil.floatBufferToVector2Array(bufferData);
4369
+ mesh.setUVs(texturecoords, 0);
4370
+ break;
4371
+ case "TEXCOORD_1":
4372
+ var texturecoords1 = GLTFUtil.floatBufferToVector2Array(bufferData);
4373
+ mesh.setUVs(texturecoords1, 1);
4374
+ break;
4375
+ case "TEXCOORD_2":
4376
+ var texturecoords2 = GLTFUtil.floatBufferToVector2Array(bufferData);
4377
+ mesh.setUVs(texturecoords2, 2);
4378
+ break;
4379
+ case "TEXCOORD_3":
4380
+ var texturecoords3 = GLTFUtil.floatBufferToVector2Array(bufferData);
4381
+ mesh.setUVs(texturecoords3, 3);
4382
+ break;
4383
+ case "TEXCOORD_4":
4384
+ var texturecoords4 = GLTFUtil.floatBufferToVector2Array(bufferData);
4385
+ mesh.setUVs(texturecoords4, 4);
4386
+ break;
4387
+ case "TEXCOORD_5":
4388
+ var texturecoords5 = GLTFUtil.floatBufferToVector2Array(bufferData);
4389
+ mesh.setUVs(texturecoords5, 5);
4390
+ break;
4391
+ case "TEXCOORD_6":
4392
+ var texturecoords6 = GLTFUtil.floatBufferToVector2Array(bufferData);
4393
+ mesh.setUVs(texturecoords6, 6);
4394
+ break;
4395
+ case "TEXCOORD_7":
4396
+ var texturecoords7 = GLTFUtil.floatBufferToVector2Array(bufferData);
4397
+ mesh.setUVs(texturecoords7, 7);
4398
+ break;
4399
+ case "COLOR_0":
4400
+ var colors = GLTFUtil.floatBufferToColorArray(bufferData, accessors[attributes["COLOR_0"]].type === AccessorType.VEC3);
4401
+ mesh.setColors(colors);
4402
+ break;
4403
+ case "TANGENT":
4404
+ var tangents = GLTFUtil.floatBufferToVector4Array(bufferData);
4405
+ mesh.setTangents(tangents);
4406
+ break;
4407
+ case "JOINTS_0":
4408
+ var joints = GLTFUtil.floatBufferToVector4Array(bufferData);
4409
+ mesh.setBoneIndices(joints);
4410
+ break;
4411
+ case "WEIGHTS_0":
4412
+ var weights = GLTFUtil.floatBufferToVector4Array(bufferData);
4413
+ mesh.setBoneWeights(weights);
4414
+ break;
4415
+ }
4416
+ }
4417
+ // Indices
4418
+ if (indices !== undefined) {
4419
+ var indexAccessor = gltf.accessors[indices];
4420
+ var indexData = getIndexBufferData();
4421
+ mesh.setIndices(indexData);
4422
+ mesh.addSubMesh(0, indexAccessor.count, mode);
4423
+ } else {
4424
+ mesh.addSubMesh(0, vertexCount, mode);
4425
+ }
4426
+ // BlendShapes
4427
+ targets && GLTFMeshParser._createBlendShape(mesh, gltfMesh, targets, getBlendShapeData);
4428
+ mesh.uploadData(!keepMeshData);
4429
+ return Promise.resolve(mesh);
4430
+ };
4431
+ return KHR_draco_mesh_compression1;
4432
+ }(GLTFExtensionParser), function() {
4433
+ _KHR_draco_mesh_compression._tempVector3 = new engineMath.Vector3();
4434
+ }(), _KHR_draco_mesh_compression);
4435
+ KHR_draco_mesh_compression = __decorate([
4436
+ registerGLTFExtension("KHR_draco_mesh_compression", exports.GLTFExtensionMode.CreateAndParse)
4437
+ ], KHR_draco_mesh_compression);
4438
+
4439
+ var KHR_lights_punctual = /*#__PURE__*/ function(GLTFExtensionParser) {
4440
+ _inherits(KHR_lights_punctual, GLTFExtensionParser);
4441
+ function KHR_lights_punctual() {
4442
+ return GLTFExtensionParser.apply(this, arguments);
4443
+ }
4444
+ var _proto = KHR_lights_punctual.prototype;
4445
+ /**
4446
+ * @override
4447
+ */ _proto.additiveParse = function additiveParse(context, entity, extensionSchema) {
4448
+ var lightsSchema = context.gltf.extensions.KHR_lights_punctual.lights;
4449
+ var lightSchema = lightsSchema[extensionSchema.light];
4450
+ var color = lightSchema.color, _lightSchema_intensity = lightSchema.intensity, intensity = _lightSchema_intensity === void 0 ? 1 : _lightSchema_intensity, type = lightSchema.type, range = lightSchema.range, spot = lightSchema.spot;
4451
+ var glTFResource = context.glTFResource;
4452
+ var light;
4453
+ if (type === "directional") {
4454
+ light = entity.addComponent(engineCore.DirectLight);
4455
+ } else if (type === "point") {
4456
+ light = entity.addComponent(engineCore.PointLight);
4457
+ } else if (type === "spot") {
4458
+ light = entity.addComponent(engineCore.SpotLight);
4459
+ }
4460
+ if (color) {
4461
+ light.color.set(color[0], color[1], color[2], 1);
4462
+ }
4463
+ light.intensity = intensity;
4464
+ if (range && !_instanceof(light, engineCore.DirectLight)) {
4465
+ light.distance = range;
4466
+ }
4467
+ if (spot && _instanceof(light, engineCore.SpotLight)) {
4468
+ var _spot_innerConeAngle = spot.innerConeAngle, innerConeAngle = _spot_innerConeAngle === void 0 ? 0 : _spot_innerConeAngle, _spot_outerConeAngle = spot.outerConeAngle, outerConeAngle = _spot_outerConeAngle === void 0 ? Math.PI / 4 : _spot_outerConeAngle;
4469
+ light.angle = innerConeAngle;
4470
+ light.penumbra = outerConeAngle - innerConeAngle;
4471
+ }
4472
+ if (!glTFResource.lights) glTFResource.lights = [];
4473
+ glTFResource.lights.push(light);
4474
+ };
4475
+ return KHR_lights_punctual;
4476
+ }(GLTFExtensionParser);
4477
+ KHR_lights_punctual = __decorate([
4478
+ registerGLTFExtension("KHR_lights_punctual", exports.GLTFExtensionMode.AdditiveParse)
4479
+ ], KHR_lights_punctual);
4480
+
4481
+ var KHR_materials_clearcoat = /*#__PURE__*/ function(GLTFExtensionParser) {
4482
+ _inherits(KHR_materials_clearcoat, GLTFExtensionParser);
4483
+ function KHR_materials_clearcoat() {
4484
+ return GLTFExtensionParser.apply(this, arguments);
4485
+ }
4486
+ var _proto = KHR_materials_clearcoat.prototype;
4487
+ /**
4488
+ * @override
4489
+ */ _proto.additiveParse = function additiveParse(context, material, schema) {
4490
+ var textures = context.glTFResource.textures;
4491
+ var _schema_clearcoatFactor = schema.clearcoatFactor, clearcoatFactor = _schema_clearcoatFactor === void 0 ? 0 : _schema_clearcoatFactor, clearcoatTexture = schema.clearcoatTexture, _schema_clearcoatRoughnessFactor = schema.clearcoatRoughnessFactor, clearcoatRoughnessFactor = _schema_clearcoatRoughnessFactor === void 0 ? 0 : _schema_clearcoatRoughnessFactor, clearcoatRoughnessTexture = schema.clearcoatRoughnessTexture, clearcoatNormalTexture = schema.clearcoatNormalTexture;
4492
+ material.clearCoat = clearcoatFactor;
4493
+ material.clearCoatRoughness = clearcoatRoughnessFactor;
4494
+ if (clearcoatTexture) {
4495
+ material.clearCoatTexture = textures[clearcoatTexture.index];
4496
+ GLTFMaterialParser._checkOtherTextureTransform(clearcoatTexture, "Clear coat");
4497
+ }
4498
+ if (clearcoatRoughnessTexture) {
4499
+ material.clearCoatRoughnessTexture = textures[clearcoatRoughnessTexture.index];
4500
+ GLTFMaterialParser._checkOtherTextureTransform(clearcoatRoughnessTexture, "Clear coat roughness");
4501
+ }
4502
+ if (clearcoatNormalTexture) {
4503
+ material.clearCoatNormalTexture = textures[clearcoatNormalTexture.index];
4504
+ GLTFMaterialParser._checkOtherTextureTransform(clearcoatNormalTexture, "Clear coat normal");
4505
+ }
4506
+ };
4507
+ return KHR_materials_clearcoat;
4508
+ }(GLTFExtensionParser);
4509
+ KHR_materials_clearcoat = __decorate([
4510
+ registerGLTFExtension("KHR_materials_clearcoat", exports.GLTFExtensionMode.AdditiveParse)
4511
+ ], KHR_materials_clearcoat);
4512
+
4513
+ var KHR_materials_ior = /*#__PURE__*/ function(GLTFExtensionParser) {
4514
+ _inherits(KHR_materials_ior, GLTFExtensionParser);
4515
+ function KHR_materials_ior() {
4516
+ return GLTFExtensionParser.apply(this, arguments);
4517
+ }
4518
+ var _proto = KHR_materials_ior.prototype;
4519
+ _proto.parseEngineResource = function parseEngineResource(schema, material, context) {
4520
+ var _schema_ior = schema.ior, ior = _schema_ior === void 0 ? 1.5 : _schema_ior;
4521
+ material.ior = ior;
4522
+ };
4523
+ return KHR_materials_ior;
4524
+ }(GLTFExtensionParser);
4525
+ KHR_materials_ior = __decorate([
4526
+ registerGLTFExtension("KHR_materials_ior", exports.GLTFExtensionMode.AdditiveParse)
4527
+ ], KHR_materials_ior);
4528
+
4529
+ var KHR_materials_pbrSpecularGlossiness = /*#__PURE__*/ function(GLTFExtensionParser) {
4530
+ _inherits(KHR_materials_pbrSpecularGlossiness, GLTFExtensionParser);
4531
+ function KHR_materials_pbrSpecularGlossiness() {
4532
+ return GLTFExtensionParser.apply(this, arguments);
4533
+ }
4534
+ var _proto = KHR_materials_pbrSpecularGlossiness.prototype;
4535
+ /**
4536
+ * @override
4537
+ */ _proto.createAndParse = function createAndParse(context, schema, ownerSchema) {
4538
+ var _context_glTFResource = context.glTFResource, engine = _context_glTFResource.engine, textures = _context_glTFResource.textures;
4539
+ var material = new engineCore.PBRSpecularMaterial(engine);
4540
+ var diffuseFactor = schema.diffuseFactor, diffuseTexture = schema.diffuseTexture, specularFactor = schema.specularFactor, glossinessFactor = schema.glossinessFactor, specularGlossinessTexture = schema.specularGlossinessTexture;
4541
+ if (diffuseFactor) {
4542
+ material.baseColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(diffuseFactor[0]), engineMath.Color.linearToGammaSpace(diffuseFactor[1]), engineMath.Color.linearToGammaSpace(diffuseFactor[2]), diffuseFactor[3]);
4543
+ }
4544
+ if (diffuseTexture) {
4545
+ material.baseTexture = textures[diffuseTexture.index];
4546
+ GLTFParser.executeExtensionsAdditiveAndParse(diffuseTexture.extensions, context, material, diffuseTexture);
4547
+ }
4548
+ if (specularFactor) {
4549
+ material.specularColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(specularFactor[0]), engineMath.Color.linearToGammaSpace(specularFactor[1]), engineMath.Color.linearToGammaSpace(specularFactor[2]));
4550
+ }
4551
+ if (glossinessFactor !== undefined) {
4552
+ material.glossiness = glossinessFactor;
4553
+ }
4554
+ if (specularGlossinessTexture) {
4555
+ material.specularGlossinessTexture = textures[specularGlossinessTexture.index];
4556
+ GLTFMaterialParser._checkOtherTextureTransform(specularGlossinessTexture, "Specular glossiness");
4557
+ }
4558
+ material.name = ownerSchema.name;
4559
+ GLTFMaterialParser._parseStandardProperty(context, material, ownerSchema);
4560
+ return material;
4561
+ };
4562
+ return KHR_materials_pbrSpecularGlossiness;
4563
+ }(GLTFExtensionParser);
4564
+ KHR_materials_pbrSpecularGlossiness = __decorate([
4565
+ registerGLTFExtension("KHR_materials_pbrSpecularGlossiness", exports.GLTFExtensionMode.CreateAndParse)
4566
+ ], KHR_materials_pbrSpecularGlossiness);
4567
+
4568
+ var KHR_materials_unlit = /*#__PURE__*/ function(GLTFExtensionParser) {
4569
+ _inherits(KHR_materials_unlit, GLTFExtensionParser);
4570
+ function KHR_materials_unlit() {
4571
+ return GLTFExtensionParser.apply(this, arguments);
4572
+ }
4573
+ var _proto = KHR_materials_unlit.prototype;
4574
+ /**
4575
+ * @override
4576
+ */ _proto.createAndParse = function createAndParse(context, _, ownerSchema) {
4577
+ var engine = context.glTFResource.engine;
4578
+ var material = new engineCore.UnlitMaterial(engine);
4579
+ material.name = ownerSchema.name;
4580
+ GLTFMaterialParser._parseStandardProperty(context, material, ownerSchema);
4581
+ return material;
4582
+ };
4583
+ return KHR_materials_unlit;
4584
+ }(GLTFExtensionParser);
4585
+ KHR_materials_unlit = __decorate([
4586
+ registerGLTFExtension("KHR_materials_unlit", exports.GLTFExtensionMode.CreateAndParse)
4587
+ ], KHR_materials_unlit);
4588
+
4589
+ var KHR_mesh_quantization = /*#__PURE__*/ function(GLTFExtensionParser) {
4590
+ _inherits(KHR_mesh_quantization, GLTFExtensionParser);
4591
+ function KHR_mesh_quantization() {
4592
+ return GLTFExtensionParser.apply(this, arguments);
4593
+ }
4594
+ return KHR_mesh_quantization;
4595
+ }(GLTFExtensionParser);
4596
+ KHR_mesh_quantization = __decorate([
4597
+ registerGLTFExtension("KHR_mesh_quantization", exports.GLTFExtensionMode.AdditiveParse)
4598
+ ], KHR_mesh_quantization);
4599
+
4600
+ var KHR_texture_transform = /*#__PURE__*/ function(GLTFExtensionParser) {
4601
+ _inherits(KHR_texture_transform, GLTFExtensionParser);
4602
+ function KHR_texture_transform() {
4603
+ return GLTFExtensionParser.apply(this, arguments);
4604
+ }
4605
+ var _proto = KHR_texture_transform.prototype;
4606
+ /**
4607
+ * @override
4608
+ */ _proto.additiveParse = function additiveParse(context, material, schema) {
4609
+ var offset = schema.offset, rotation = schema.rotation, scale = schema.scale, texCoord = schema.texCoord;
4610
+ if (offset) {
4611
+ material.tilingOffset.z = offset[0];
4612
+ material.tilingOffset.w = offset[1];
4613
+ }
4614
+ if (scale) {
4615
+ material.tilingOffset.x = scale[0];
4616
+ material.tilingOffset.y = scale[1];
4617
+ }
4618
+ if (rotation) {
4619
+ engineCore.Logger.warn("rotation in KHR_texture_transform is not supported now");
4620
+ }
4621
+ if (texCoord) {
4622
+ engineCore.Logger.warn("texCoord in KHR_texture_transform is not supported now");
4623
+ }
4624
+ };
4625
+ return KHR_texture_transform;
4626
+ }(GLTFExtensionParser);
4627
+ KHR_texture_transform = __decorate([
4628
+ registerGLTFExtension("KHR_texture_transform", exports.GLTFExtensionMode.AdditiveParse)
4629
+ ], KHR_texture_transform);
4630
+
4631
+ var OasisMaterialsRemap = /*#__PURE__*/ function(GLTFExtensionParser) {
4632
+ _inherits(OasisMaterialsRemap, GLTFExtensionParser);
4633
+ function OasisMaterialsRemap() {
4634
+ return GLTFExtensionParser.apply(this, arguments);
4635
+ }
4636
+ var _proto = OasisMaterialsRemap.prototype;
4637
+ /**
4638
+ * @override
4639
+ */ _proto.createAndParse = function createAndParse(context, schema) {
4640
+ var engine = context.glTFResource.engine;
4641
+ // @ts-ignore
4642
+ return engine.resourceManager.getResourceByRef(schema);
4643
+ };
4644
+ return OasisMaterialsRemap;
4645
+ }(GLTFExtensionParser);
4646
+ OasisMaterialsRemap = __decorate([
4647
+ registerGLTFExtension("OASIS_materials_remap", exports.GLTFExtensionMode.CreateAndParse)
4648
+ ], OasisMaterialsRemap);
4649
+
4561
4650
  exports.ComponentMap = ComponentMap;
4651
+ exports.GLTFAnimationParser = GLTFAnimationParser;
4652
+ exports.GLTFBufferParser = GLTFBufferParser;
4653
+ exports.GLTFEntityParser = GLTFEntityParser;
4654
+ exports.GLTFExtensionParser = GLTFExtensionParser;
4655
+ exports.GLTFMaterialParser = GLTFMaterialParser;
4656
+ exports.GLTFMeshParser = GLTFMeshParser;
4657
+ exports.GLTFParser = GLTFParser;
4658
+ exports.GLTFParserContext = GLTFParserContext;
4659
+ exports.GLTFPipeline = GLTFPipeline;
4562
4660
  exports.GLTFResource = GLTFResource;
4661
+ exports.GLTFSceneParser = GLTFSceneParser;
4662
+ exports.GLTFSkinParser = GLTFSkinParser;
4663
+ exports.GLTFTextureParser = GLTFTextureParser;
4664
+ exports.GLTFUtil = GLTFUtil;
4665
+ exports.GLTFValidator = GLTFValidator;
4563
4666
  exports.PrefabParser = PrefabParser;
4564
4667
  exports.ReflectionParser = ReflectionParser;
4565
4668
  exports.SceneParser = SceneParser;
4566
4669
  exports.decode = decode;
4567
4670
  exports.parseSingleKTX = parseSingleKTX;
4568
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fZXh0ZW5kcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX3NldF9wcm90b3R5cGVfb2YuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbmhlcml0cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS90c2xpYkAyLjUuMC9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwiLi4vc3JjL0FuaW1hdG9yQ29udHJvbGxlckxvYWRlci50cyIsIi4uL3NyYy9CdWZmZXJMb2FkZXIudHMiLCIuLi9zcmMvRW52TG9hZGVyLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fYXN5bmNfdG9fZ2VuZXJhdG9yLmpzIiwiLi4vc3JjL0ZvbnRMb2FkZXIudHMiLCIuLi9zcmMvZ2x0Zi9wYXJzZXIvUGFyc2VyQ29udGV4dC50cyIsIi4uL3NyYy9nbHRmL1NjaGVtYS50cyIsIi4uL3NyYy9nbHRmL0dMVEZVdGlsLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fYXJyYXlfbGlrZV90b19hcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2FycmF5X3dpdGhvdXRfaG9sZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pdGVyYWJsZV90b19hcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX25vbl9pdGVyYWJsZV9zcHJlYWQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL191bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX3RvX2NvbnN1bWFibGVfYXJyYXkuanMiLCIuLi9zcmMvZ2x0Zi9wYXJzZXIvUGFyc2VyLnRzIiwiLi4vc3JjL2dsdGYvZXh0ZW5zaW9ucy9FeHRlbnNpb25QYXJzZXIudHMiLCIuLi9zcmMvZ2x0Zi9leHRlbnNpb25zL0tIUl9kcmFjb19tZXNoX2NvbXByZXNzaW9uLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW5zdGFuY2VvZi5qcyIsIi4uL3NyYy9nbHRmL2V4dGVuc2lvbnMvS0hSX2xpZ2h0c19wdW5jdHVhbC50cyIsIi4uL3NyYy9nbHRmL3BhcnNlci9NYXRlcmlhbFBhcnNlci50cyIsIi4uL3NyYy9nbHRmL2V4dGVuc2lvbnMvS0hSX21hdGVyaWFsc19jbGVhcmNvYXQudHMiLCIuLi9zcmMvZ2x0Zi9leHRlbnNpb25zL0tIUl9tYXRlcmlhbHNfaW9yLnRzIiwiLi4vc3JjL2dsdGYvZXh0ZW5zaW9ucy9LSFJfbWF0ZXJpYWxzX3BiclNwZWN1bGFyR2xvc3NpbmVzcy50cyIsIi4uL3NyYy9nbHRmL2V4dGVuc2lvbnMvS0hSX21hdGVyaWFsc191bmxpdC50cyIsIi4uL3NyYy9nbHRmL2V4dGVuc2lvbnMvS0hSX21hdGVyaWFsc192YXJpYW50cy50cyIsIi4uL3NyYy9nbHRmL2V4dGVuc2lvbnMvS0hSX21lc2hfcXVhbnRpemF0aW9uLnRzIiwiLi4vc3JjL2dsdGYvZXh0ZW5zaW9ucy9LSFJfdGV4dHVyZV90cmFuc2Zvcm0udHMiLCIuLi9zcmMvZ2x0Zi9leHRlbnNpb25zL0dBTEFDRUFOX21hdGVyaWFsc19yZW1hcC50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2NyZWF0ZV9mb3Jfb2ZfaXRlcmF0b3JfaGVscGVyX2xvb3NlLmpzIiwiLi4vc3JjL2dsdGYvcGFyc2VyL0FuaW1hdGlvblBhcnNlci50cyIsIi4uL3NyYy9nbHRmL3BhcnNlci9CdWZmZXJQYXJzZXIudHMiLCIuLi9zcmMvZ2x0Zi9wYXJzZXIvRW50aXR5UGFyc2VyLnRzIiwiLi4vc3JjL2dsdGYvcGFyc2VyL01lc2hQYXJzZXIudHMiLCIuLi9zcmMvZ2x0Zi9wYXJzZXIvU2NlbmVQYXJzZXIudHMiLCIuLi9zcmMvZ2x0Zi9wYXJzZXIvU2tpblBhcnNlci50cyIsIi4uL3NyYy9nbHRmL3BhcnNlci9UZXh0dXJlUGFyc2VyLnRzIiwiLi4vc3JjL2dsdGYvcGFyc2VyL1ZhbGlkYXRvci50cyIsIi4uL3NyYy9nbHRmL0dMVEZQYXJzZXIudHMiLCIuLi9zcmMvZ2x0Zi9HTFRGUmVzb3VyY2UudHMiLCIuLi9zcmMvR0xURkxvYWRlci50cyIsIi4uL3NyYy9IRFJMb2FkZXIudHMiLCIuLi9zcmMvSlNPTkxvYWRlci50cyIsIi4uL3NyYy9jb21wcmVzc2VkLXRleHR1cmUvS2hyb25vc1RleHR1cmVDb250YWluZXIudHMiLCIuLi9zcmMvY29tcHJlc3NlZC10ZXh0dXJlL2luZGV4LnRzIiwiLi4vc3JjL0tUWEN1YmVMb2FkZXIudHMiLCIuLi9zcmMvS1RYTG9hZGVyLnRzIiwiLi4vc3JjL01hdGVyaWFsTG9hZGVyLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fY3JlYXRlX2NsYXNzLmpzIiwiLi4vc3JjL3Jlc291cmNlLWRlc2VyaWFsaXplL3V0aWxzL0J1ZmZlclJlYWRlci50cyIsIi4uL3NyYy9yZXNvdXJjZS1kZXNlcmlhbGl6ZS91dGlscy9EZWNvcmF0b3IudHMiLCIuLi9zcmMvcmVzb3VyY2UtZGVzZXJpYWxpemUvdXRpbHMvRmlsZUhlYWRlci50cyIsIi4uL3NyYy9yZXNvdXJjZS1kZXNlcmlhbGl6ZS9yZXNvdXJjZXMvbWVzaC9NZXNoRGVjb2Rlci50cyIsIi4uL3NyYy9yZXNvdXJjZS1kZXNlcmlhbGl6ZS9yZXNvdXJjZXMvdGV4dHVyZTJEL1RleHR1cmVEZWNvZGVyLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faXNfbmF0aXZlX3JlZmxlY3RfY29uc3RydWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fY29uc3RydWN0LmpzIiwiLi4vc3JjL3Jlc291cmNlLWRlc2VyaWFsaXplL3Jlc291cmNlcy9wcmVmYWIvUmVmbGVjdGlvblBhcnNlci50cyIsIi4uL3NyYy9yZXNvdXJjZS1kZXNlcmlhbGl6ZS9yZXNvdXJjZXMvcHJlZmFiL1ByZWZhYlBhcnNlci50cyIsIi4uL3NyYy9yZXNvdXJjZS1kZXNlcmlhbGl6ZS9yZXNvdXJjZXMvYW5pbWF0aW9uQ2xpcC9Db21wb25lbnRNYXAudHMiLCIuLi9zcmMvcmVzb3VyY2UtZGVzZXJpYWxpemUvcmVzb3VyY2VzL2FuaW1hdGlvbkNsaXAvQW5pbWF0aW9uQ2xpcERlY29kZXIudHMiLCIuLi9zcmMvcmVzb3VyY2UtZGVzZXJpYWxpemUvcmVzb3VyY2VzL3NjZW5lL1NjZW5lUGFyc2VyQ29udGV4dC50cyIsIi4uL3NyYy9yZXNvdXJjZS1kZXNlcmlhbGl6ZS9yZXNvdXJjZXMvc2NlbmUvU2NlbmVQYXJzZXIudHMiLCIuLi9zcmMvcmVzb3VyY2UtZGVzZXJpYWxpemUvcmVzb3VyY2VzL3NjZW5lL01lc2hMb2FkZXIudHMiLCIuLi9zcmMvcmVzb3VyY2UtZGVzZXJpYWxpemUvcmVzb3VyY2VzL3NjZW5lL0VkaXRvclRleHR1cmVMb2FkZXIudHMiLCIuLi9zcmMvcmVzb3VyY2UtZGVzZXJpYWxpemUvaW5kZXgudHMiLCIuLi9zcmMvTWVzaExvYWRlci50cyIsIi4uL3NyYy9Tb3VyY2VGb250TG9hZGVyLnRzIiwiLi4vc3JjL1Nwcml0ZUF0bGFzTG9hZGVyLnRzIiwiLi4vc3JjL1Nwcml0ZUxvYWRlci50cyIsIi4uL3NyYy9UZXh0dXJlMkRMb2FkZXIudHMiLCIuLi9zcmMvVGV4dHVyZUN1YmVMb2FkZXIudHMiLCIuLi9zcmMvQW5pbWF0aW9uQ2xpcExvYWRlci50cyIsIi4uL3NyYy9TY2VuZUxvYWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gICAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgXyB9O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIF9zZXRfcHJvdG90eXBlX29mKG8sIHApIHtcbiAgICBfc2V0X3Byb3RvdHlwZV9vZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcblxuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIF9zZXRfcHJvdG90eXBlX29mKG8sIHApO1xufVxuZXhwb3J0IHsgX3NldF9wcm90b3R5cGVfb2YgYXMgXyB9O1xuIiwiaW1wb3J0IHsgX3NldF9wcm90b3R5cGVfb2YgfSBmcm9tIFwiLi9fc2V0X3Byb3RvdHlwZV9vZi5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pO1xuXG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRfcHJvdG90eXBlX29mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmV4cG9ydCB7IF9pbmhlcml0cyBhcyBfIH07XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7XG4gIHJlc291cmNlTG9hZGVyLFxuICBMb2FkZXIsXG4gIEFzc2V0UHJvbWlzZSxcbiAgQXNzZXRUeXBlLFxuICBMb2FkSXRlbSxcbiAgUmVzb3VyY2VNYW5hZ2VyLFxuICBBbmltYXRvckNvbnRyb2xsZXIsXG4gIEFuaW1hdG9yQ29udHJvbGxlckxheWVyLFxuICBBbmltYXRvclN0YXRlTWFjaGluZSxcbiAgQW5pbWF0b3JTdGF0ZVRyYW5zaXRpb25cbn0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLkFuaW1hdG9yQ29udHJvbGxlciwgW1wianNvblwiXSwgZmFsc2UpXG5jbGFzcyBBbmltYXRvckNvbnRyb2xsZXJMb2FkZXIgZXh0ZW5kcyBMb2FkZXI8QW5pbWF0b3JDb250cm9sbGVyPiB7XG4gIGxvYWQoaXRlbTogTG9hZEl0ZW0sIHJlc291cmNlTWFuYWdlcjogUmVzb3VyY2VNYW5hZ2VyKTogQXNzZXRQcm9taXNlPEFuaW1hdG9yQ29udHJvbGxlcj4ge1xuICAgIHJldHVybiBuZXcgQXNzZXRQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucmVxdWVzdDxhbnk+KGl0ZW0udXJsLCB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6IFwianNvblwiXG4gICAgICB9KVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFuaW1hdG9yQ29udHJvbGxlciA9IG5ldyBBbmltYXRvckNvbnRyb2xsZXIoKTtcbiAgICAgICAgICBjb25zdCB7IGxheWVycyB9ID0gZGF0YTtcbiAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgIGxheWVycy5mb3JFYWNoKChsYXllckRhdGEsIGxheWVySW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBibGVuZGluZ01vZGUsIHdlaWdodCwgc3RhdGVNYWNoaW5lOiBzdGF0ZU1hY2hpbmVEYXRhIH0gPSBsYXllckRhdGE7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBBbmltYXRvckNvbnRyb2xsZXJMYXllcihuYW1lKTtcbiAgICAgICAgICAgIGxheWVyLmJsZW5kaW5nTW9kZSA9IGJsZW5kaW5nTW9kZTtcbiAgICAgICAgICAgIGxheWVyLndlaWdodCA9IHdlaWdodDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU1hY2hpbmVEYXRhKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgc3RhdGVzIH0gPSBzdGF0ZU1hY2hpbmVEYXRhO1xuICAgICAgICAgICAgICBjb25zdCBzdGF0ZU1hY2hpbmUgPSAobGF5ZXIuc3RhdGVNYWNoaW5lID0gbmV3IEFuaW1hdG9yU3RhdGVNYWNoaW5lKCkpO1xuICAgICAgICAgICAgICBzdGF0ZXMuZm9yRWFjaCgoc3RhdGVEYXRhLCBzdGF0ZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgc3BlZWQsXG4gICAgICAgICAgICAgICAgICB3cmFwTW9kZSxcbiAgICAgICAgICAgICAgICAgIGNsaXBTdGFydE5vcm1hbGl6ZWRUaW1lLFxuICAgICAgICAgICAgICAgICAgY2xpcEVuZE5vcm1hbGl6ZWRUaW1lLFxuICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0U3RhdGUsXG4gICAgICAgICAgICAgICAgICBjbGlwOiBjbGlwRGF0YVxuICAgICAgICAgICAgICAgIH0gPSBzdGF0ZURhdGE7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBzdGF0ZU1hY2hpbmUuYWRkU3RhdGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaXNEZWZhdWx0U3RhdGUgJiYgKHN0YXRlTWFjaGluZS5kZWZhdWx0U3RhdGUgPSBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgc3RhdGUuc3BlZWQgPSBzcGVlZDtcbiAgICAgICAgICAgICAgICBzdGF0ZS53cmFwTW9kZSA9IHdyYXBNb2RlO1xuICAgICAgICAgICAgICAgIHN0YXRlLmNsaXBTdGFydFRpbWUgPSBjbGlwU3RhcnROb3JtYWxpemVkVGltZTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jbGlwRW5kVGltZSA9IGNsaXBFbmROb3JtYWxpemVkVGltZTtcbiAgICAgICAgICAgICAgICBpZiAoY2xpcERhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VNYW5hZ2VyLmdldFJlc291cmNlQnlSZWYoY2xpcERhdGEpLnRoZW4oKGNsaXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgc3RhdGVzLmZvckVhY2goKHN0YXRlRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgdHJhbnNpdGlvbnMgfSA9IHN0YXRlRGF0YTtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5mb3JFYWNoKCh0cmFuc2l0aW9uRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgeyB0YXJnZXRTdGF0ZU5hbWUsIGR1cmF0aW9uLCBvZmZzZXQsIGV4aXRUaW1lIH0gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZVN0YXRlID0gc3RhdGVNYWNoaW5lLmZpbmRTdGF0ZUJ5TmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc3RTdGF0ZSA9IHN0YXRlTWFjaGluZS5maW5kU3RhdGVCeU5hbWUodGFyZ2V0U3RhdGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb24gPSBuZXcgQW5pbWF0b3JTdGF0ZVRyYW5zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uZGVzdGluYXRpb25TdGF0ZSA9IGRlc3RTdGF0ZTtcbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uZXhpdFRpbWUgPSBleGl0VGltZTtcbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24ub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUuYWRkVHJhbnNpdGlvbih0cmFuc2l0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmltYXRvckNvbnRyb2xsZXIuYWRkTGF5ZXIobGF5ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKChjbGlwRGF0YSkgPT4ge1xuICAgICAgICAgICAgY2xpcERhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7IGxheWVySW5kZXgsIHN0YXRlSW5kZXgsIGNsaXAgfSA9IGRhdGE7XG4gICAgICAgICAgICAgIGFuaW1hdG9yQ29udHJvbGxlci5sYXllcnNbbGF5ZXJJbmRleF0uc3RhdGVNYWNoaW5lLnN0YXRlc1tzdGF0ZUluZGV4XS5jbGlwID0gY2xpcDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZShhbmltYXRvckNvbnRyb2xsZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVzb3VyY2VMb2FkZXIsIExvYWRlciwgQXNzZXRQcm9taXNlLCBBc3NldFR5cGUsIExvYWRJdGVtIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuXG5mdW5jdGlvbiBpc0Jhc2U2NCh1cmwpIHtcbiAgcmV0dXJuIC9eZGF0YTooLis/KTtiYXNlNjQsLy50ZXN0KHVybCk7XG59XG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLkJ1ZmZlciwgW1wiYmluXCIsIFwicjNiaW5cIl0sIGZhbHNlKVxuY2xhc3MgQnVmZmVyTG9hZGVyIGV4dGVuZHMgTG9hZGVyPEFycmF5QnVmZmVyPiB7XG4gIGxvYWQoaXRlbTogTG9hZEl0ZW0pOiBBc3NldFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICBjb25zdCB1cmwgPSBpdGVtLnVybDtcbiAgICBpZiAoaXNCYXNlNjQodXJsKSkge1xuICAgICAgcmV0dXJuIG5ldyBBc3NldFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZTY0U3RyID0gdXJsLnNsaWNlKDEzICsgUmVnRXhwLiQxLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFVpbnQ4QXJyYXkuZnJvbShhdG9iKGJhc2U2NFN0ciksIChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICByZXNvbHZlKHJlc3VsdC5idWZmZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgdHlwZTogXCJhcnJheWJ1ZmZlclwiXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFtYmllbnRMaWdodCxcbiAgQXNzZXRQcm9taXNlLFxuICBBc3NldFR5cGUsXG4gIERpZmZ1c2VNb2RlLFxuICBMb2FkZXIsXG4gIExvYWRJdGVtLFxuICByZXNvdXJjZUxvYWRlcixcbiAgUmVzb3VyY2VNYW5hZ2VyLFxuICBUZXh0dXJlQ3ViZSxcbiAgVGV4dHVyZUN1YmVGYWNlLFxuICBUZXh0dXJlRmlsdGVyTW9kZVxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBTcGhlcmljYWxIYXJtb25pY3MzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtbWF0aFwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLkVudiwgW1wiZW52XCJdKVxuY2xhc3MgRW52TG9hZGVyIGV4dGVuZHMgTG9hZGVyPEFtYmllbnRMaWdodD4ge1xuICBsb2FkKGl0ZW06IExvYWRJdGVtLCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IEFzc2V0UHJvbWlzZTxBbWJpZW50TGlnaHQ+IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnJlcXVlc3Q8QXJyYXlCdWZmZXI+KGl0ZW0udXJsLCB7IHR5cGU6IFwiYXJyYXlidWZmZXJcIiB9KVxuICAgICAgICAudGhlbigoYXJyYXlidWZmZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBzaEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShhcnJheWJ1ZmZlciwgMCwgMjcpO1xuICAgICAgICAgIGNvbnN0IHNoQnl0ZUxlbmd0aCA9IDI3ICogNDtcbiAgICAgICAgICBjb25zdCBzaXplID0gbmV3IFVpbnQxNkFycmF5KGFycmF5YnVmZmVyLCBzaEJ5dGVMZW5ndGgsIDEpPy5bMF07XG5cbiAgICAgICAgICBjb25zdCB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKHJlc291cmNlTWFuYWdlci5lbmdpbmUsIHNpemUpO1xuICAgICAgICAgIHRleHR1cmUuZmlsdGVyTW9kZSA9IFRleHR1cmVGaWx0ZXJNb2RlLlRyaWxpbmVhcjtcbiAgICAgICAgICBjb25zdCBtaXBtYXBDb3VudCA9IHRleHR1cmUubWlwbWFwQ291bnQ7XG4gICAgICAgICAgbGV0IG9mZnNldCA9IHNoQnl0ZUxlbmd0aCArIDI7XG5cbiAgICAgICAgICBmb3IgKGxldCBtaXBMZXZlbCA9IDA7IG1pcExldmVsIDwgbWlwbWFwQ291bnQ7IG1pcExldmVsKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1pcFNpemUgPSBzaXplID4+IG1pcExldmVsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2l6ZSA9IG1pcFNpemUgKiBtaXBTaXplICogNDtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyLCBvZmZzZXQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgb2Zmc2V0ICs9IGRhdGFTaXplO1xuICAgICAgICAgICAgICB0ZXh0dXJlLnNldFBpeGVsQnVmZmVyKFRleHR1cmVDdWJlRmFjZS5Qb3NpdGl2ZVggKyBmYWNlLCBkYXRhLCBtaXBMZXZlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYW1iaWVudExpZ2h0ID0gbmV3IEFtYmllbnRMaWdodCgpO1xuICAgICAgICAgIGNvbnN0IHNoID0gbmV3IFNwaGVyaWNhbEhhcm1vbmljczMoKTtcblxuICAgICAgICAgIGFtYmllbnRMaWdodC5kaWZmdXNlTW9kZSA9IERpZmZ1c2VNb2RlLlNwaGVyaWNhbEhhcm1vbmljcztcbiAgICAgICAgICBzaC5jb3B5RnJvbUFycmF5KHNoQXJyYXkpO1xuICAgICAgICAgIGFtYmllbnRMaWdodC5kaWZmdXNlU3BoZXJpY2FsSGFybW9uaWNzID0gc2g7XG4gICAgICAgICAgYW1iaWVudExpZ2h0LnNwZWN1bGFyVGV4dHVyZSA9IHRleHR1cmU7XG4gICAgICAgICAgYW1iaWVudExpZ2h0LnNwZWN1bGFyVGV4dHVyZURlY29kZVJHQk0gPSB0cnVlO1xuXG4gICAgICAgICAgcmVzb2x2ZShhbWJpZW50TGlnaHQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgICAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGluZm8uZG9uZSkgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgZWxzZSBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG59XG5leHBvcnQgZnVuY3Rpb24gX2FzeW5jX3RvX2dlbmVyYXRvcihmbikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmV4cG9ydCB7IF9hc3luY190b19nZW5lcmF0b3IgYXMgXyB9O1xuIiwiaW1wb3J0IHsgQXNzZXRQcm9taXNlLCBBc3NldFR5cGUsIEZvbnQsIExvYWRlciwgTG9hZEl0ZW0sIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZU1hbmFnZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5cbkByZXNvdXJjZUxvYWRlcihBc3NldFR5cGUuRm9udCwgW1wiZm9udFwiXSwgZmFsc2UpXG5jbGFzcyBGb250TG9hZGVyIGV4dGVuZHMgTG9hZGVyPEZvbnQ+IHtcbiAgbG9hZChpdGVtOiBMb2FkSXRlbSwgcmVzb3VyY2VNYW5hZ2VyOiBSZXNvdXJjZU1hbmFnZXIpOiBBc3NldFByb21pc2U8Rm9udD4ge1xuICAgIHJldHVybiBuZXcgQXNzZXRQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucmVxdWVzdDxhbnk+KGl0ZW0udXJsLCB7IHR5cGU6IFwianNvblwiIH0pXG4gICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBmb250TmFtZSwgZm9udFVybCB9ID0gZGF0YTtcblxuICAgICAgICAgIGlmIChmb250VXJsKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RlckZvbnQoZm9udE5hbWUsIGZvbnRVcmwpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb250ID0gbmV3IEZvbnQocmVzb3VyY2VNYW5hZ2VyLmVuZ2luZSwgZm9udE5hbWUpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZm9udCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChgbG9hZCBmb250ICR7Zm9udFVybH0gZmFpbGApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZm9udCA9IG5ldyBGb250KHJlc291cmNlTWFuYWdlci5lbmdpbmUsIGZvbnROYW1lKTtcbiAgICAgICAgICAgIHJlc29sdmUoZm9udCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfcmVnaXN0ZXJGb250KGZvbnROYW1lOiBzdHJpbmcsIGZvbnRVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZvbnRGYWNlID0gbmV3IEZvbnRGYWNlKGZvbnROYW1lLCBgdXJsKCR7Zm9udFVybH0pYCk7XG4gICAgYXdhaXQgZm9udEZhY2UubG9hZCgpO1xuICAgIGRvY3VtZW50LmZvbnRzLmFkZChmb250RmFjZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFuaW1hdGlvbkNsaXAsXG4gIEFzc2V0UHJvbWlzZSxcbiAgQnVmZmVyLFxuICBFbnRpdHksXG4gIE1hdGVyaWFsLFxuICBNb2RlbE1lc2gsXG4gIFRleHR1cmUyRCxcbiAgVHlwZWRBcnJheVxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBHTFRGUmVzb3VyY2UgfSBmcm9tIFwiLi4vR0xURlJlc291cmNlXCI7XG5pbXBvcnQgeyBJR0xURiB9IGZyb20gXCIuLi9TY2hlbWFcIjtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFBhcnNlckNvbnRleHQge1xuICBnbHRmOiBJR0xURjtcbiAgYnVmZmVyczogQXJyYXlCdWZmZXJbXTtcbiAgZ2xURlJlc291cmNlOiBHTFRGUmVzb3VyY2U7XG4gIGtlZXBNZXNoRGF0YTogYm9vbGVhbjtcbiAgaGFzU2tpbm5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogY2hhaW4gYXNzZXQgcHJvbWlzZSAqL1xuICBjaGFpblByb21pc2VzOiBBc3NldFByb21pc2U8YW55PltdID0gW107XG4gIGFjY2Vzc29yQnVmZmVyQ2FjaGU6IFJlY29yZDxzdHJpbmcsIEJ1ZmZlckluZm8+ID0ge307XG5cbiAgdGV4dHVyZXNQcm9taXNlSW5mbzogUHJvbWlzZUluZm88VGV4dHVyZTJEW10+ID0gbmV3IFByb21pc2VJbmZvPFRleHR1cmUyRFtdPigpO1xuICBtYXRlcmlhbHNQcm9taXNlSW5mbzogUHJvbWlzZUluZm88TWF0ZXJpYWxbXT4gPSBuZXcgUHJvbWlzZUluZm88TWF0ZXJpYWxbXT4oKTtcbiAgbWVzaGVzUHJvbWlzZUluZm86IFByb21pc2VJbmZvPE1vZGVsTWVzaFtdW10+ID0gbmV3IFByb21pc2VJbmZvPE1vZGVsTWVzaFtdW10+KCk7XG4gIGFuaW1hdGlvbkNsaXBzUHJvbWlzZUluZm86IFByb21pc2VJbmZvPEFuaW1hdGlvbkNsaXBbXT4gPSBuZXcgUHJvbWlzZUluZm88QW5pbWF0aW9uQ2xpcFtdPigpO1xuICBkZWZhdWx0U2NlbmVSb290UHJvbWlzZUluZm86IFByb21pc2VJbmZvPEVudGl0eT4gPSBuZXcgUHJvbWlzZUluZm88RW50aXR5PigpO1xuICBtYXN0ZXJQcm9taXNlSW5mbzogUHJvbWlzZUluZm88R0xURlJlc291cmNlPiA9IG5ldyBQcm9taXNlSW5mbzxHTFRGUmVzb3VyY2U+KCk7XG4gIHByb21pc2VNYXA6IFJlY29yZDxzdHJpbmcsIEFzc2V0UHJvbWlzZTxhbnk+PiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvbWlzZU1hcCA9IHRoaXMucHJvbWlzZU1hcDtcbiAgICBwcm9taXNlTWFwW2Ake3VybH0/cT10ZXh0dXJlc2BdID0gdGhpcy5faW5pdFByb21pc2VJbmZvKHRoaXMudGV4dHVyZXNQcm9taXNlSW5mbyk7XG4gICAgcHJvbWlzZU1hcFtgJHt1cmx9P3E9bWF0ZXJpYWxzYF0gPSB0aGlzLl9pbml0UHJvbWlzZUluZm8odGhpcy5tYXRlcmlhbHNQcm9taXNlSW5mbyk7XG4gICAgcHJvbWlzZU1hcFtgJHt1cmx9P3E9bWVzaGVzYF0gPSB0aGlzLl9pbml0UHJvbWlzZUluZm8odGhpcy5tZXNoZXNQcm9taXNlSW5mbyk7XG4gICAgcHJvbWlzZU1hcFtgJHt1cmx9P3E9YW5pbWF0aW9uc2BdID0gdGhpcy5faW5pdFByb21pc2VJbmZvKHRoaXMuYW5pbWF0aW9uQ2xpcHNQcm9taXNlSW5mbyk7XG4gICAgcHJvbWlzZU1hcFtgJHt1cmx9P3E9ZGVmYXVsdFNjZW5lUm9vdGBdID0gdGhpcy5faW5pdFByb21pc2VJbmZvKHRoaXMuZGVmYXVsdFNjZW5lUm9vdFByb21pc2VJbmZvKTtcbiAgICBwcm9taXNlTWFwW2Ake3VybH1gXSA9IHRoaXMuX2luaXRQcm9taXNlSW5mbyh0aGlzLm1hc3RlclByb21pc2VJbmZvKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRQcm9taXNlSW5mbyhwcm9taXNlSW5mbyk6IEFzc2V0UHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IEFzc2V0UHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QsIHNldFByb2dyZXNzLCBvbkNhbmNlbCkgPT4ge1xuICAgICAgcHJvbWlzZUluZm8ucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBwcm9taXNlSW5mby5yZWplY3QgPSByZWplY3Q7XG4gICAgICBwcm9taXNlSW5mby5zZXRQcm9ncmVzcyA9IHNldFByb2dyZXNzO1xuICAgICAgcHJvbWlzZUluZm8ub25DYW5jZWwgPSBvbkNhbmNlbDtcbiAgICB9KTtcbiAgICBwcm9taXNlSW5mby5wcm9taXNlID0gcHJvbWlzZTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgQnVmZmVySW5mbyB7XG4gIHZlcnRleEJ1ZmZlcjogQnVmZmVyO1xuICB2ZXJ0ZXhCaW5kaW5nSW5mb3M6IFJlY29yZDxudW1iZXIsIG51bWJlcj4gPSB7fTtcbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFR5cGVkQXJyYXksIHB1YmxpYyBpbnRlcmxlYXZlZDogYm9vbGVhbiwgcHVibGljIHN0cmlkZTogbnVtYmVyKSB7fVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgUHJvbWlzZUluZm88VD4ge1xuICBwdWJsaWMgcHJvbWlzZTogQXNzZXRQcm9taXNlPFQ+O1xuICBwdWJsaWMgcmVzb2x2ZTogKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkO1xuICBwdWJsaWMgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuICBwdWJsaWMgc2V0UHJvZ3Jlc3M6IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuICBwdWJsaWMgb25DYW5jZWw6IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4gdm9pZDtcbn1cbiIsIi8qKlxuICogTW9kdWxlIGZvciBnbFRGIDIuMCBJbnRlcmZhY2VcbiAqL1xuXG5pbXBvcnQgeyBNZXNoVG9wb2xvZ3kgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5cbi8qKlxuICogVGhlIGRhdGF0eXBlIG9mIHRoZSBjb21wb25lbnRzIGluIHRoZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGVudW0gQWNjZXNzb3JDb21wb25lbnRUeXBlIHtcbiAgLyoqXG4gICAqIEJ5dGVcbiAgICovXG4gIEJZVEUgPSA1MTIwLFxuICAvKipcbiAgICogVW5zaWduZWQgQnl0ZVxuICAgKi9cbiAgVU5TSUdORURfQllURSA9IDUxMjEsXG4gIC8qKlxuICAgKiBTaG9ydFxuICAgKi9cbiAgU0hPUlQgPSA1MTIyLFxuICAvKipcbiAgICogVW5zaWduZWQgU2hvcnRcbiAgICovXG4gIFVOU0lHTkVEX1NIT1JUID0gNTEyMyxcbiAgLyoqXG4gICAqIFVuc2lnbmVkIEludFxuICAgKi9cbiAgVU5TSUdORURfSU5UID0gNTEyNSxcbiAgLyoqXG4gICAqIEZsb2F0XG4gICAqL1xuICBGTE9BVCA9IDUxMjZcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgaWYgdGhlIGF0dGlyYnV0ZSBpcyBhIHNjYWxhciwgdmVjdG9yLCBvciBtYXRyaXhcbiAqL1xuZXhwb3J0IGVudW0gQWNjZXNzb3JUeXBlIHtcbiAgLyoqXG4gICAqIFNjYWxhclxuICAgKi9cbiAgU0NBTEFSID0gXCJTQ0FMQVJcIixcbiAgLyoqXG4gICAqIFZlY3RvcjJcbiAgICovXG4gIFZFQzIgPSBcIlZFQzJcIixcbiAgLyoqXG4gICAqIFZlY3RvcjNcbiAgICovXG4gIFZFQzMgPSBcIlZFQzNcIixcbiAgLyoqXG4gICAqIFZlY3RvcjRcbiAgICovXG4gIFZFQzQgPSBcIlZFQzRcIixcbiAgLyoqXG4gICAqIE1hdHJpeDJ4MlxuICAgKi9cbiAgTUFUMiA9IFwiTUFUMlwiLFxuICAvKipcbiAgICogTWF0cml4M3gzXG4gICAqL1xuICBNQVQzID0gXCJNQVQzXCIsXG4gIC8qKlxuICAgKiBNYXRyaXg0eDRcbiAgICovXG4gIE1BVDQgPSBcIk1BVDRcIlxufVxuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBub2RlJ3MgVFJTIHByb3BlcnR5IHRvIG1vZGlmeSwgb3IgdGhlIHdlaWdodHMgb2YgdGhlIE1vcnBoIFRhcmdldHMgaXQgaW5zdGFudGlhdGVzXG4gKi9cbmV4cG9ydCBlbnVtIEFuaW1hdGlvbkNoYW5uZWxUYXJnZXRQYXRoIHtcbiAgLyoqXG4gICAqIFRyYW5zbGF0aW9uXG4gICAqL1xuICBUUkFOU0xBVElPTiA9IFwidHJhbnNsYXRpb25cIixcbiAgLyoqXG4gICAqIFJvdGF0aW9uXG4gICAqL1xuICBST1RBVElPTiA9IFwicm90YXRpb25cIixcbiAgLyoqXG4gICAqIFNjYWxlXG4gICAqL1xuICBTQ0FMRSA9IFwic2NhbGVcIixcbiAgLyoqXG4gICAqIFdlaWdodHNcbiAgICovXG4gIFdFSUdIVFMgPSBcIndlaWdodHNcIlxufVxuXG4vKipcbiAqIEludGVycG9sYXRpb24gYWxnb3JpdGhtXG4gKi9cbmV4cG9ydCBlbnVtIEFuaW1hdGlvblNhbXBsZXJJbnRlcnBvbGF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRlZCB2YWx1ZXMgYXJlIGxpbmVhcmx5IGludGVycG9sYXRlZCBiZXR3ZWVuIGtleWZyYW1lc1xuICAgKi9cbiAgTGluZWFyID0gXCJMSU5FQVJcIixcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRlZCB2YWx1ZXMgcmVtYWluIGNvbnN0YW50IHRvIHRoZSBvdXRwdXQgb2YgdGhlIGZpcnN0IGtleWZyYW1lLCB1bnRpbCB0aGUgbmV4dCBrZXlmcmFtZVxuICAgKi9cbiAgU3RlcCA9IFwiU1RFUFwiLFxuICAvKipcbiAgICogVGhlIGFuaW1hdGlvbidzIGludGVycG9sYXRpb24gaXMgY29tcHV0ZWQgdXNpbmcgYSBjdWJpYyBzcGxpbmUgd2l0aCBzcGVjaWZpZWQgdGFuZ2VudHNcbiAgICovXG4gIEN1YmljU3BpbmUgPSBcIkNVQklDU1BMSU5FXCJcbn1cblxuLyoqXG4gKiBBIGNhbWVyYSdzIHByb2plY3Rpb24uICBBIG5vZGUgY2FuIHJlZmVyZW5jZSBhIGNhbWVyYSB0byBhcHBseSBhIHRyYW5zZm9ybSB0byBwbGFjZSB0aGUgY2FtZXJhIGluIHRoZSBzY2VuZVxuICovXG5leHBvcnQgZW51bSBDYW1lcmFUeXBlIHtcbiAgLyoqXG4gICAqIEEgcGVyc3BlY3RpdmUgY2FtZXJhIGNvbnRhaW5pbmcgcHJvcGVydGllcyB0byBjcmVhdGUgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgKi9cbiAgUEVSU1BFQ1RJVkUgPSBcInBlcnNwZWN0aXZlXCIsXG4gIC8qKlxuICAgKiBBbiBvcnRob2dyYXBoaWMgY2FtZXJhIGNvbnRhaW5pbmcgcHJvcGVydGllcyB0byBjcmVhdGUgYW4gb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4XG4gICAqL1xuICBPUlRIT0dSQVBISUMgPSBcIm9ydGhvZ3JhcGhpY1wiXG59XG5cbi8qKlxuICogVGhlIG1pbWUtdHlwZSBvZiB0aGUgaW1hZ2VcbiAqL1xuZXhwb3J0IGVudW0gSW1hZ2VNaW1lVHlwZSB7XG4gIC8qKlxuICAgKiBKUEVHIE1pbWUtdHlwZVxuICAgKi9cbiAgSlBFRyA9IFwiaW1hZ2UvanBlZ1wiLFxuICAvKipcbiAgICogUE5HIE1pbWUtdHlwZVxuICAgKi9cbiAgUE5HID0gXCJpbWFnZS9wbmdcIlxufVxuXG4vKipcbiAqIFRoZSBhbHBoYSByZW5kZXJpbmcgbW9kZSBvZiB0aGUgbWF0ZXJpYWxcbiAqL1xuZXhwb3J0IGVudW0gTWF0ZXJpYWxBbHBoYU1vZGUge1xuICAvKipcbiAgICogVGhlIGFscGhhIHZhbHVlIGlzIGlnbm9yZWQgYW5kIHRoZSByZW5kZXJlZCBvdXRwdXQgaXMgZnVsbHkgb3BhcXVlXG4gICAqL1xuICBPUEFRVUUgPSBcIk9QQVFVRVwiLFxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIG91dHB1dCBpcyBlaXRoZXIgZnVsbHkgb3BhcXVlIG9yIGZ1bGx5IHRyYW5zcGFyZW50IGRlcGVuZGluZyBvbiB0aGUgYWxwaGEgdmFsdWUgYW5kIHRoZSBzcGVjaWZpZWQgYWxwaGEgY3V0b2ZmIHZhbHVlXG4gICAqL1xuICBNQVNLID0gXCJNQVNLXCIsXG4gIC8qKlxuICAgKiBUaGUgYWxwaGEgdmFsdWUgaXMgdXNlZCB0byBjb21wb3NpdGUgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlYXMuIFRoZSByZW5kZXJlZCBvdXRwdXQgaXMgY29tYmluZWQgd2l0aCB0aGUgYmFja2dyb3VuZCB1c2luZyB0aGUgbm9ybWFsIHBhaW50aW5nIG9wZXJhdGlvbiAoaS5lLiB0aGUgUG9ydGVyIGFuZCBEdWZmIG92ZXIgb3BlcmF0b3IpXG4gICAqL1xuICBCTEVORCA9IFwiQkxFTkRcIlxufVxuXG4vKipcbiAqIE1hZ25pZmljYXRpb24gZmlsdGVyLiAgVmFsaWQgdmFsdWVzIGNvcnJlc3BvbmQgdG8gV2ViR0wgZW51bXM6IDk3MjggKE5FQVJFU1QpIGFuZCA5NzI5IChMSU5FQVIpXG4gKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVNYWdGaWx0ZXIge1xuICAvKipcbiAgICogTmVhcmVzdFxuICAgKi9cbiAgTkVBUkVTVCA9IDk3MjgsXG4gIC8qKlxuICAgKiBMaW5lYXJcbiAgICovXG4gIExJTkVBUiA9IDk3Mjlcbn1cblxuLyoqXG4gKiBNaW5pZmljYXRpb24gZmlsdGVyLiAgQWxsIHZhbGlkIHZhbHVlcyBjb3JyZXNwb25kIHRvIFdlYkdMIGVudW1zXG4gKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVNaW5GaWx0ZXIge1xuICAvKipcbiAgICogTmVhcmVzdFxuICAgKi9cbiAgTkVBUkVTVCA9IDk3MjgsXG4gIC8qKlxuICAgKiBMaW5lYXJcbiAgICovXG4gIExJTkVBUiA9IDk3MjksXG4gIC8qKlxuICAgKiBOZWFyZXN0IE1pcC1NYXAgTmVhcmVzdFxuICAgKi9cbiAgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCA9IDk5ODQsXG4gIC8qKlxuICAgKiBMaW5lYXIgTWlwbWFwIE5lYXJlc3RcbiAgICovXG4gIExJTkVBUl9NSVBNQVBfTkVBUkVTVCA9IDk5ODUsXG4gIC8qKlxuICAgKiBOZWFyZXN0IE1pcG1hcCBMaW5lYXJcbiAgICovXG4gIE5FQVJFU1RfTUlQTUFQX0xJTkVBUiA9IDk5ODYsXG4gIC8qKlxuICAgKiBMaW5lYXIgTWlwbWFwIExpbmVhclxuICAgKi9cbiAgTElORUFSX01JUE1BUF9MSU5FQVIgPSA5OTg3XG59XG5cbi8qKlxuICogUyAoVSkgd3JhcHBpbmcgbW9kZS4gIEFsbCB2YWxpZCB2YWx1ZXMgY29ycmVzcG9uZCB0byBXZWJHTCBlbnVtc1xuICovXG5leHBvcnQgZW51bSBUZXh0dXJlV3JhcE1vZGUge1xuICAvKipcbiAgICogQ2xhbXAgdG8gRWRnZVxuICAgKi9cbiAgQ0xBTVBfVE9fRURHRSA9IDMzMDcxLFxuICAvKipcbiAgICogTWlycm9yZWQgUmVwZWF0XG4gICAqL1xuICBNSVJST1JFRF9SRVBFQVQgPSAzMzY0OCxcbiAgLyoqXG4gICAqIFJlcGVhdFxuICAgKi9cbiAgUkVQRUFUID0gMTA0OTdcbn1cblxuLyoqXG4gKiBnbFRGIFByb3BlcnR5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVByb3BlcnR5IHtcbiAgLyoqXG4gICAqIERpY3Rpb25hcnkgb2JqZWN0IHdpdGggZXh0ZW5zaW9uLXNwZWNpZmljIG9iamVjdHNcbiAgICovXG4gIGV4dGVuc2lvbnM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xuICAvKipcbiAgICogQXBwbGljYXRpb24tU3BlY2lmaWMgZGF0YVxuICAgKi9cbiAgZXh0cmFzPzogYW55O1xufVxuXG4vKipcbiAqIGdsVEYgQ2hpbGQgb2YgUm9vdCBQcm9wZXJ0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDaGlsZFJvb3RQcm9wZXJ0eSBleHRlbmRzIElQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBUaGUgdXNlci1kZWZpbmVkIG5hbWUgb2YgdGhpcyBvYmplY3RcbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW5kaWNlcyBvZiB0aG9zZSBhdHRyaWJ1dGVzIHRoYXQgZGV2aWF0ZSBmcm9tIHRoZWlyIGluaXRpYWxpemF0aW9uIHZhbHVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFjY2Vzc29yU3BhcnNlSW5kaWNlcyBleHRlbmRzIElQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGJ1ZmZlclZpZXcgd2l0aCBzcGFyc2UgaW5kaWNlcy4gUmVmZXJlbmNlZCBidWZmZXJWaWV3IGNhbid0IGhhdmUgQVJSQVlfQlVGRkVSIG9yIEVMRU1FTlRfQVJSQVlfQlVGRkVSIHRhcmdldFxuICAgKi9cbiAgYnVmZmVyVmlldzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlclZpZXcgaW4gYnl0ZXMuIE11c3QgYmUgYWxpZ25lZFxuICAgKi9cbiAgYnl0ZU9mZnNldD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBpbmRpY2VzIGRhdGEgdHlwZS4gIFZhbGlkIHZhbHVlcyBjb3JyZXNwb25kIHRvIFdlYkdMIGVudW1zOiA1MTIxIChVTlNJR05FRF9CWVRFKSwgNTEyMyAoVU5TSUdORURfU0hPUlQpLCA1MTI1IChVTlNJR05FRF9JTlQpXG4gICAqL1xuICBjb21wb25lbnRUeXBlOiBBY2Nlc3NvckNvbXBvbmVudFR5cGU7XG59XG5cbi8qKlxuICogQXJyYXkgb2Ygc2l6ZSBhY2Nlc3Nvci5zcGFyc2UuY291bnQgdGltZXMgbnVtYmVyIG9mIGNvbXBvbmVudHMgc3RvcmluZyB0aGUgZGlzcGxhY2VkIGFjY2Vzc29yIGF0dHJpYnV0ZXMgcG9pbnRlZCBieSBhY2Nlc3Nvci5zcGFyc2UuaW5kaWNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElBY2Nlc3NvclNwYXJzZVZhbHVlcyBleHRlbmRzIElQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGJ1ZmZlclZpZXcgd2l0aCBzcGFyc2UgdmFsdWVzLiBSZWZlcmVuY2VkIGJ1ZmZlclZpZXcgY2FuJ3QgaGF2ZSBBUlJBWV9CVUZGRVIgb3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIgdGFyZ2V0XG4gICAqL1xuICBidWZmZXJWaWV3OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyVmlldyBpbiBieXRlcy4gTXVzdCBiZSBhbGlnbmVkXG4gICAqL1xuICBieXRlT2Zmc2V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFNwYXJzZSBzdG9yYWdlIG9mIGF0dHJpYnV0ZXMgdGhhdCBkZXZpYXRlIGZyb20gdGhlaXIgaW5pdGlhbGl6YXRpb24gdmFsdWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWNjZXNzb3JTcGFyc2UgZXh0ZW5kcyBJUHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGVuY29kZWQgaW4gdGhpcyBzcGFyc2UgYWNjZXNzb3JcbiAgICovXG4gIGNvdW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBJbmRleCBhcnJheSBvZiBzaXplIGNvdW50IHRoYXQgcG9pbnRzIHRvIHRob3NlIGFjY2Vzc29yIGF0dHJpYnV0ZXMgdGhhdCBkZXZpYXRlIGZyb20gdGhlaXIgaW5pdGlhbGl6YXRpb24gdmFsdWUuIEluZGljZXMgbXVzdCBzdHJpY3RseSBpbmNyZWFzZVxuICAgKi9cbiAgaW5kaWNlczogSUFjY2Vzc29yU3BhcnNlSW5kaWNlcztcbiAgLyoqXG4gICAqIEFycmF5IG9mIHNpemUgY291bnQgdGltZXMgbnVtYmVyIG9mIGNvbXBvbmVudHMsIHN0b3JpbmcgdGhlIGRpc3BsYWNlZCBhY2Nlc3NvciBhdHRyaWJ1dGVzIHBvaW50ZWQgYnkgaW5kaWNlcy4gU3Vic3RpdHV0ZWQgdmFsdWVzIG11c3QgaGF2ZSB0aGUgc2FtZSBjb21wb25lbnRUeXBlIGFuZCBudW1iZXIgb2YgY29tcG9uZW50cyBhcyB0aGUgYmFzZSBhY2Nlc3NvclxuICAgKi9cbiAgdmFsdWVzOiBJQWNjZXNzb3JTcGFyc2VWYWx1ZXM7XG59XG5cbi8qKlxuICogQSB0eXBlZCB2aWV3IGludG8gYSBidWZmZXJWaWV3LiAgQSBidWZmZXJWaWV3IGNvbnRhaW5zIHJhdyBiaW5hcnkgZGF0YS4gIEFuIGFjY2Vzc29yIHByb3ZpZGVzIGEgdHlwZWQgdmlldyBpbnRvIGEgYnVmZmVyVmlldyBvciBhIHN1YnNldCBvZiBhIGJ1ZmZlclZpZXcgc2ltaWxhciB0byBob3cgV2ViR0wncyB2ZXJ0ZXhBdHRyaWJQb2ludGVyKCkgZGVmaW5lcyBhbiBhdHRyaWJ1dGUgaW4gYSBidWZmZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWNjZXNzb3IgZXh0ZW5kcyBJQ2hpbGRSb290UHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBidWZmZXJ2aWV3XG4gICAqL1xuICBidWZmZXJWaWV3PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlclZpZXcgaW4gYnl0ZXNcbiAgICovXG4gIGJ5dGVPZmZzZXQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZGF0YXR5cGUgb2YgY29tcG9uZW50cyBpbiB0aGUgYXR0cmlidXRlXG4gICAqL1xuICBjb21wb25lbnRUeXBlOiBBY2Nlc3NvckNvbXBvbmVudFR5cGU7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciBpbnRlZ2VyIGRhdGEgdmFsdWVzIHNob3VsZCBiZSBub3JtYWxpemVkXG4gICAqL1xuICBub3JtYWxpemVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5IHRoaXMgYWNjZXNzb3JcbiAgICovXG4gIGNvdW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaWYgdGhlIGF0dHJpYnV0ZSBpcyBhIHNjYWxhciwgdmVjdG9yLCBvciBtYXRyaXhcbiAgICovXG4gIHR5cGU6IEFjY2Vzc29yVHlwZTtcbiAgLyoqXG4gICAqIE1heGltdW0gdmFsdWUgb2YgZWFjaCBjb21wb25lbnQgaW4gdGhpcyBhdHRyaWJ1dGVcbiAgICovXG4gIG1heD86IG51bWJlcltdO1xuICAvKipcbiAgICogTWluaW11bSB2YWx1ZSBvZiBlYWNoIGNvbXBvbmVudCBpbiB0aGlzIGF0dHJpYnV0ZVxuICAgKi9cbiAgbWluPzogbnVtYmVyW107XG4gIC8qKlxuICAgKiBTcGFyc2Ugc3RvcmFnZSBvZiBhdHRyaWJ1dGVzIHRoYXQgZGV2aWF0ZSBmcm9tIHRoZWlyIGluaXRpYWxpemF0aW9uIHZhbHVlXG4gICAqL1xuICBzcGFyc2U/OiBJQWNjZXNzb3JTcGFyc2U7XG59XG5cbi8qKlxuICogVGFyZ2V0cyBhbiBhbmltYXRpb24ncyBzYW1wbGVyIGF0IGEgbm9kZSdzIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFuaW1hdGlvbkNoYW5uZWwgZXh0ZW5kcyBJUHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIGEgc2FtcGxlciBpbiB0aGlzIGFuaW1hdGlvbiB1c2VkIHRvIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdGFyZ2V0XG4gICAqL1xuICBzYW1wbGVyOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG5vZGUgYW5kIFRSUyBwcm9wZXJ0eSB0byB0YXJnZXRcbiAgICovXG4gIHRhcmdldDogSUFuaW1hdGlvbkNoYW5uZWxUYXJnZXQ7XG59XG5cbi8qKlxuICogVGhlIGluZGV4IG9mIHRoZSBub2RlIGFuZCBUUlMgcHJvcGVydHkgdGhhdCBhbiBhbmltYXRpb24gY2hhbm5lbCB0YXJnZXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFuaW1hdGlvbkNoYW5uZWxUYXJnZXQgZXh0ZW5kcyBJUHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBub2RlIHRvIHRhcmdldFxuICAgKi9cbiAgbm9kZTogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG5vZGUncyBUUlMgcHJvcGVydHkgdG8gbW9kaWZ5LCBvciB0aGUgd2VpZ2h0cyBvZiB0aGUgTW9ycGggVGFyZ2V0cyBpdCBpbnN0YW50aWF0ZXNcbiAgICovXG4gIHBhdGg6IEFuaW1hdGlvbkNoYW5uZWxUYXJnZXRQYXRoO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIGlucHV0IGFuZCBvdXRwdXQgYWNjZXNzb3JzIHdpdGggYW4gaW50ZXJwb2xhdGlvbiBhbGdvcml0aG0gdG8gZGVmaW5lIGEga2V5ZnJhbWUgZ3JhcGggKGJ1dCBub3QgaXRzIHRhcmdldClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQW5pbWF0aW9uU2FtcGxlciBleHRlbmRzIElQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgYW4gYWNjZXNzb3IgY29udGFpbmluZyBrZXlmcmFtZSBpbnB1dCB2YWx1ZXMsIGUuZy4sIHRpbWVcbiAgICovXG4gIGlucHV0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBJbnRlcnBvbGF0aW9uIGFsZ29yaXRobVxuICAgKi9cbiAgaW50ZXJwb2xhdGlvbj86IEFuaW1hdGlvblNhbXBsZXJJbnRlcnBvbGF0aW9uO1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIGFuIGFjY2Vzc29yLCBjb250YWluaW5nIGtleWZyYW1lIG91dHB1dCB2YWx1ZXNcbiAgICovXG4gIG91dHB1dDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEga2V5ZnJhbWUgYW5pbWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFuaW1hdGlvbiBleHRlbmRzIElDaGlsZFJvb3RQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBjaGFubmVscywgZWFjaCBvZiB3aGljaCB0YXJnZXRzIGFuIGFuaW1hdGlvbidzIHNhbXBsZXIgYXQgYSBub2RlJ3MgcHJvcGVydHlcbiAgICovXG4gIGNoYW5uZWxzOiBJQW5pbWF0aW9uQ2hhbm5lbFtdO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygc2FtcGxlcnMgdGhhdCBjb21iaW5lcyBpbnB1dCBhbmQgb3V0cHV0IGFjY2Vzc29ycyB3aXRoIGFuIGludGVycG9sYXRpb24gYWxnb3JpdGhtIHRvIGRlZmluZSBhIGtleWZyYW1lIGdyYXBoIChidXQgbm90IGl0cyB0YXJnZXQpXG4gICAqL1xuICBzYW1wbGVyczogSUFuaW1hdGlvblNhbXBsZXJbXTtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBhYm91dCB0aGUgZ2xURiBhc3NldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldCBleHRlbmRzIElDaGlsZFJvb3RQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBBIGNvcHlyaWdodCBtZXNzYWdlIHN1aXRhYmxlIGZvciBkaXNwbGF5IHRvIGNyZWRpdCB0aGUgY29udGVudCBjcmVhdG9yXG4gICAqL1xuICBjb3B5cmlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUb29sIHRoYXQgZ2VuZXJhdGVkIHRoaXMgZ2xURiBtb2RlbC4gIFVzZWZ1bCBmb3IgZGVidWdnaW5nXG4gICAqL1xuICBnZW5lcmF0b3I/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZ2xURiB2ZXJzaW9uIHRoYXQgdGhpcyBhc3NldCB0YXJnZXRzXG4gICAqL1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBnbFRGIHZlcnNpb24gdGhhdCB0aGlzIGFzc2V0IHRhcmdldHNcbiAgICovXG4gIG1pblZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBidWZmZXIgcG9pbnRzIHRvIGJpbmFyeSBnZW9tZXRyeSwgYW5pbWF0aW9uLCBvciBza2luc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElCdWZmZXIgZXh0ZW5kcyBJQ2hpbGRSb290UHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIHVyaSBvZiB0aGUgYnVmZmVyLiAgUmVsYXRpdmUgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSAuZ2x0ZiBmaWxlLiAgSW5zdGVhZCBvZiByZWZlcmVuY2luZyBhbiBleHRlcm5hbCBmaWxlLCB0aGUgdXJpIGNhbiBhbHNvIGJlIGEgZGF0YS11cmlcbiAgICovXG4gIHVyaT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBieXRlc1xuICAgKi9cbiAgYnl0ZUxlbmd0aDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgdmlldyBpbnRvIGEgYnVmZmVyIGdlbmVyYWxseSByZXByZXNlbnRpbmcgYSBzdWJzZXQgb2YgdGhlIGJ1ZmZlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIElCdWZmZXJWaWV3IGV4dGVuZHMgSUNoaWxkUm9vdFByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgYnVmZmVyXG4gICAqL1xuICBidWZmZXI6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBvZmZzZXQgaW50byB0aGUgYnVmZmVyIGluIGJ5dGVzXG4gICAqL1xuICBieXRlT2Zmc2V0PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGxlbnRoIG9mIHRoZSBidWZmZXJWaWV3IGluIGJ5dGVzXG4gICAqL1xuICBieXRlTGVuZ3RoOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc3RyaWRlLCBpbiBieXRlc1xuICAgKi9cbiAgYnl0ZVN0cmlkZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBbiBvcnRob2dyYXBoaWMgY2FtZXJhIGNvbnRhaW5pbmcgcHJvcGVydGllcyB0byBjcmVhdGUgYW4gb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNhbWVyYU9ydGhvZ3JhcGhpYyBleHRlbmRzIElQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBUaGUgZmxvYXRpbmctcG9pbnQgaG9yaXpvbnRhbCBtYWduaWZpY2F0aW9uIG9mIHRoZSB2aWV3LiBNdXN0IG5vdCBiZSB6ZXJvXG4gICAqL1xuICB4bWFnOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZmxvYXRpbmctcG9pbnQgdmVydGljYWwgbWFnbmlmaWNhdGlvbiBvZiB0aGUgdmlldy4gTXVzdCBub3QgYmUgemVyb1xuICAgKi9cbiAgeW1hZzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGZsb2F0aW5nLXBvaW50IGRpc3RhbmNlIHRvIHRoZSBmYXIgY2xpcHBpbmcgcGxhbmUuIHpmYXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gem5lYXJcbiAgICovXG4gIHpmYXI6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBmbG9hdGluZy1wb2ludCBkaXN0YW5jZSB0byB0aGUgbmVhciBjbGlwcGluZyBwbGFuZVxuICAgKi9cbiAgem5lYXI6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIHBlcnNwZWN0aXZlIGNhbWVyYSBjb250YWluaW5nIHByb3BlcnRpZXMgdG8gY3JlYXRlIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2FtZXJhUGVyc3BlY3RpdmUgZXh0ZW5kcyBJUHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIGZsb2F0aW5nLXBvaW50IGFzcGVjdCByYXRpbyBvZiB0aGUgZmllbGQgb2Ygdmlld1xuICAgKi9cbiAgYXNwZWN0UmF0aW8/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZmxvYXRpbmctcG9pbnQgdmVydGljYWwgZmllbGQgb2YgdmlldyBpbiByYWRpYW5zXG4gICAqL1xuICB5Zm92OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZmxvYXRpbmctcG9pbnQgZGlzdGFuY2UgdG8gdGhlIGZhciBjbGlwcGluZyBwbGFuZVxuICAgKi9cbiAgemZhcj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBmbG9hdGluZy1wb2ludCBkaXN0YW5jZSB0byB0aGUgbmVhciBjbGlwcGluZyBwbGFuZVxuICAgKi9cbiAgem5lYXI6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIGNhbWVyYSdzIHByb2plY3Rpb24uICBBIG5vZGUgY2FuIHJlZmVyZW5jZSBhIGNhbWVyYSB0byBhcHBseSBhIHRyYW5zZm9ybSB0byBwbGFjZSB0aGUgY2FtZXJhIGluIHRoZSBzY2VuZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDYW1lcmEgZXh0ZW5kcyBJQ2hpbGRSb290UHJvcGVydHkge1xuICAvKipcbiAgICogQW4gb3J0aG9ncmFwaGljIGNhbWVyYSBjb250YWluaW5nIHByb3BlcnRpZXMgdG8gY3JlYXRlIGFuIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeFxuICAgKi9cbiAgb3J0aG9ncmFwaGljPzogSUNhbWVyYU9ydGhvZ3JhcGhpYztcbiAgLyoqXG4gICAqIEEgcGVyc3BlY3RpdmUgY2FtZXJhIGNvbnRhaW5pbmcgcHJvcGVydGllcyB0byBjcmVhdGUgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgKi9cbiAgcGVyc3BlY3RpdmU/OiBJQ2FtZXJhUGVyc3BlY3RpdmU7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaWYgdGhlIGNhbWVyYSB1c2VzIGEgcGVyc3BlY3RpdmUgb3Igb3J0aG9ncmFwaGljIHByb2plY3Rpb25cbiAgICovXG4gIHR5cGU6IENhbWVyYVR5cGU7XG59XG5cbi8qKlxuICogSW1hZ2UgZGF0YSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmUuIEltYWdlIGNhbiBiZSByZWZlcmVuY2VkIGJ5IFVSSSBvciBidWZmZXJWaWV3IGluZGV4LiBtaW1lVHlwZSBpcyByZXF1aXJlZCBpbiB0aGUgbGF0dGVyIGNhc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2UgZXh0ZW5kcyBJQ2hpbGRSb290UHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIHVyaSBvZiB0aGUgaW1hZ2UuICBSZWxhdGl2ZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIC5nbHRmIGZpbGUuICBJbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIGFuIGV4dGVybmFsIGZpbGUsIHRoZSB1cmkgY2FuIGFsc28gYmUgYSBkYXRhLXVyaS4gIFRoZSBpbWFnZSBmb3JtYXQgbXVzdCBiZSBqcGcgb3IgcG5nXG4gICAqL1xuICB1cmk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UncyBNSU1FIHR5cGVcbiAgICovXG4gIG1pbWVUeXBlPzogSW1hZ2VNaW1lVHlwZTtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgYnVmZmVyVmlldyB0aGF0IGNvbnRhaW5zIHRoZSBpbWFnZS4gVXNlIHRoaXMgaW5zdGVhZCBvZiB0aGUgaW1hZ2UncyB1cmkgcHJvcGVydHlcbiAgICovXG4gIGJ1ZmZlclZpZXc/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTWF0ZXJpYWwgTm9ybWFsIFRleHR1cmUgSW5mb1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElNYXRlcmlhbE5vcm1hbFRleHR1cmVJbmZvIGV4dGVuZHMgSVRleHR1cmVJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBzY2FsYXIgbXVsdGlwbGllciBhcHBsaWVkIHRvIGVhY2ggbm9ybWFsIHZlY3RvciBvZiB0aGUgbm9ybWFsIHRleHR1cmVcbiAgICovXG4gIHNjYWxlPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1hdGVyaWFsIE9jY2x1c2lvbiBUZXh0dXJlIEluZm9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWF0ZXJpYWxPY2NsdXNpb25UZXh0dXJlSW5mbyBleHRlbmRzIElUZXh0dXJlSW5mbyB7XG4gIC8qKlxuICAgKiBBIHNjYWxhciBtdWx0aXBsaWVyIGNvbnRyb2xsaW5nIHRoZSBhbW91bnQgb2Ygb2NjbHVzaW9uIGFwcGxpZWRcbiAgICovXG4gIHN0cmVuZ3RoPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgc2V0IG9mIHBhcmFtZXRlciB2YWx1ZXMgdGhhdCBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIG1ldGFsbGljLXJvdWdobmVzcyBtYXRlcmlhbCBtb2RlbCBmcm9tIFBoeXNpY2FsbHktQmFzZWQgUmVuZGVyaW5nIChQQlIpIG1ldGhvZG9sb2d5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU1hdGVyaWFsUGJyTWV0YWxsaWNSb3VnaG5lc3Mge1xuICAvKipcbiAgICogVGhlIG1hdGVyaWFsJ3MgYmFzZSBjb2xvciBmYWN0b3JcbiAgICovXG4gIGJhc2VDb2xvckZhY3Rvcj86IG51bWJlcltdO1xuICAvKipcbiAgICogVGhlIGJhc2UgY29sb3IgdGV4dHVyZVxuICAgKi9cbiAgYmFzZUNvbG9yVGV4dHVyZT86IElUZXh0dXJlSW5mbztcbiAgLyoqXG4gICAqIFRoZSBtZXRhbG5lc3Mgb2YgdGhlIG1hdGVyaWFsXG4gICAqL1xuICBtZXRhbGxpY0ZhY3Rvcj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSByb3VnaG5lc3Mgb2YgdGhlIG1hdGVyaWFsXG4gICAqL1xuICByb3VnaG5lc3NGYWN0b3I/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbWV0YWxsaWMtcm91Z2huZXNzIHRleHR1cmVcbiAgICovXG4gIG1ldGFsbGljUm91Z2huZXNzVGV4dHVyZT86IElUZXh0dXJlSW5mbztcbn1cblxuLyoqXG4gKiBUaGUgbWF0ZXJpYWwgYXBwZWFyYW5jZSBvZiBhIHByaW1pdGl2ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNYXRlcmlhbCBleHRlbmRzIElDaGlsZFJvb3RQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBBIHNldCBvZiBwYXJhbWV0ZXIgdmFsdWVzIHRoYXQgYXJlIHVzZWQgdG8gZGVmaW5lIHRoZSBtZXRhbGxpYy1yb3VnaG5lc3MgbWF0ZXJpYWwgbW9kZWwgZnJvbSBQaHlzaWNhbGx5LUJhc2VkIFJlbmRlcmluZyAoUEJSKSBtZXRob2RvbG9neS4gV2hlbiBub3Qgc3BlY2lmaWVkLCBhbGwgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHBick1ldGFsbGljUm91Z2huZXNzIGFwcGx5XG4gICAqL1xuICBwYnJNZXRhbGxpY1JvdWdobmVzcz86IElNYXRlcmlhbFBick1ldGFsbGljUm91Z2huZXNzO1xuICAvKipcbiAgICogVGhlIG5vcm1hbCBtYXAgdGV4dHVyZVxuICAgKi9cbiAgbm9ybWFsVGV4dHVyZT86IElNYXRlcmlhbE5vcm1hbFRleHR1cmVJbmZvO1xuICAvKipcbiAgICogVGhlIG9jY2x1c2lvbiBtYXAgdGV4dHVyZVxuICAgKi9cbiAgb2NjbHVzaW9uVGV4dHVyZT86IElNYXRlcmlhbE9jY2x1c2lvblRleHR1cmVJbmZvO1xuICAvKipcbiAgICogVGhlIGVtaXNzaXZlIG1hcCB0ZXh0dXJlXG4gICAqL1xuICBlbWlzc2l2ZVRleHR1cmU/OiBJVGV4dHVyZUluZm87XG4gIC8qKlxuICAgKiBUaGUgUkdCIGNvbXBvbmVudHMgb2YgdGhlIGVtaXNzaXZlIGNvbG9yIG9mIHRoZSBtYXRlcmlhbC4gVGhlc2UgdmFsdWVzIGFyZSBsaW5lYXIuIElmIGFuIGVtaXNzaXZlVGV4dHVyZSBpcyBzcGVjaWZpZWQsIHRoaXMgdmFsdWUgaXMgbXVsdGlwbGllZCB3aXRoIHRoZSB0ZXhlbCB2YWx1ZXNcbiAgICovXG4gIGVtaXNzaXZlRmFjdG9yPzogbnVtYmVyW107XG4gIC8qKlxuICAgKiBUaGUgYWxwaGEgcmVuZGVyaW5nIG1vZGUgb2YgdGhlIG1hdGVyaWFsXG4gICAqL1xuICBhbHBoYU1vZGU/OiBNYXRlcmlhbEFscGhhTW9kZTtcbiAgLyoqXG4gICAqIFRoZSBhbHBoYSBjdXRvZmYgdmFsdWUgb2YgdGhlIG1hdGVyaWFsXG4gICAqL1xuICBhbHBoYUN1dG9mZj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBtYXRlcmlhbCBpcyBkb3VibGUgc2lkZWRcbiAgICovXG4gIGRvdWJsZVNpZGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBHZW9tZXRyeSB0byBiZSByZW5kZXJlZCB3aXRoIHRoZSBnaXZlbiBtYXRlcmlhbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNZXNoUHJpbWl0aXZlIGV4dGVuZHMgSVByb3BlcnR5IHtcbiAgLyoqXG4gICAqIEEgZGljdGlvbmFyeSBvYmplY3QsIHdoZXJlIGVhY2gga2V5IGNvcnJlc3BvbmRzIHRvIG1lc2ggYXR0cmlidXRlIHNlbWFudGljIGFuZCBlYWNoIHZhbHVlIGlzIHRoZSBpbmRleCBvZiB0aGUgYWNjZXNzb3IgY29udGFpbmluZyBhdHRyaWJ1dGUncyBkYXRhXG4gICAqL1xuICBhdHRyaWJ1dGVzOiB7XG4gICAgW25hbWU6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgYWNjZXNzb3IgdGhhdCBjb250YWlucyB0aGUgaW5kaWNlc1xuICAgKi9cbiAgaW5kaWNlcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgbWF0ZXJpYWwgdG8gYXBwbHkgdG8gdGhpcyBwcmltaXRpdmUgd2hlbiByZW5kZXJpbmdcbiAgICovXG4gIG1hdGVyaWFsPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcHJpbWl0aXZlcyB0byByZW5kZXIuIEFsbCB2YWxpZCB2YWx1ZXMgY29ycmVzcG9uZCB0byBXZWJHTCBlbnVtc1xuICAgKi9cbiAgbW9kZT86IE1lc2hUb3BvbG9neTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIE1vcnBoIFRhcmdldHMsIGVhY2ggIE1vcnBoIFRhcmdldCBpcyBhIGRpY3Rpb25hcnkgbWFwcGluZyBhdHRyaWJ1dGVzIChvbmx5IFBPU0lUSU9OLCBOT1JNQUwsIGFuZCBUQU5HRU5UIHN1cHBvcnRlZCkgdG8gdGhlaXIgZGV2aWF0aW9ucyBpbiB0aGUgTW9ycGggVGFyZ2V0XG4gICAqL1xuICB0YXJnZXRzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBudW1iZXI7XG4gIH1bXTtcbn1cblxuLyoqXG4gKiBBIHNldCBvZiBwcmltaXRpdmVzIHRvIGJlIHJlbmRlcmVkLiAgQSBub2RlIGNhbiBjb250YWluIG9uZSBtZXNoLiAgQSBub2RlJ3MgdHJhbnNmb3JtIHBsYWNlcyB0aGUgbWVzaCBpbiB0aGUgc2NlbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWVzaCBleHRlbmRzIElDaGlsZFJvb3RQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmltaXRpdmVzLCBlYWNoIGRlZmluaW5nIGdlb21ldHJ5IHRvIGJlIHJlbmRlcmVkIHdpdGggYSBtYXRlcmlhbFxuICAgKi9cbiAgcHJpbWl0aXZlczogSU1lc2hQcmltaXRpdmVbXTtcbiAgLyoqXG4gICAqIEFycmF5IG9mIHdlaWdodHMgdG8gYmUgYXBwbGllZCB0byB0aGUgTW9ycGggVGFyZ2V0c1xuICAgKi9cbiAgd2VpZ2h0cz86IG51bWJlcltdO1xufVxuXG4vKipcbiAqIEEgbm9kZSBpbiB0aGUgbm9kZSBoaWVyYXJjaHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTm9kZSBleHRlbmRzIElDaGlsZFJvb3RQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNhbWVyYSByZWZlcmVuY2VkIGJ5IHRoaXMgbm9kZVxuICAgKi9cbiAgY2FtZXJhPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGluZGljZXMgb2YgdGhpcyBub2RlJ3MgY2hpbGRyZW5cbiAgICovXG4gIGNoaWxkcmVuPzogbnVtYmVyW107XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIHNraW4gcmVmZXJlbmNlZCBieSB0aGlzIG5vZGVcbiAgICovXG4gIHNraW4/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBIGZsb2F0aW5nLXBvaW50IDR4NCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggc3RvcmVkIGluIGNvbHVtbi1tYWpvciBvcmRlclxuICAgKi9cbiAgbWF0cml4PzogbnVtYmVyW107XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG1lc2ggaW4gdGhpcyBub2RlXG4gICAqL1xuICBtZXNoPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG5vZGUncyB1bml0IHF1YXRlcm5pb24gcm90YXRpb24gaW4gdGhlIG9yZGVyICh4LCB5LCB6LCB3KSwgd2hlcmUgdyBpcyB0aGUgc2NhbGFyXG4gICAqL1xuICByb3RhdGlvbj86IG51bWJlcltdO1xuICAvKipcbiAgICogVGhlIG5vZGUncyBub24tdW5pZm9ybSBzY2FsZSwgZ2l2ZW4gYXMgdGhlIHNjYWxpbmcgZmFjdG9ycyBhbG9uZyB0aGUgeCwgeSwgYW5kIHogYXhlc1xuICAgKi9cbiAgc2NhbGU/OiBudW1iZXJbXTtcbiAgLyoqXG4gICAqIFRoZSBub2RlJ3MgdHJhbnNsYXRpb24gYWxvbmcgdGhlIHgsIHksIGFuZCB6IGF4ZXNcbiAgICovXG4gIHRyYW5zbGF0aW9uPzogbnVtYmVyW107XG4gIC8qKlxuICAgKiBUaGUgd2VpZ2h0cyBvZiB0aGUgaW5zdGFudGlhdGVkIE1vcnBoIFRhcmdldC4gTnVtYmVyIG9mIGVsZW1lbnRzIG11c3QgbWF0Y2ggbnVtYmVyIG9mIE1vcnBoIFRhcmdldHMgb2YgdXNlZCBtZXNoXG4gICAqL1xuICB3ZWlnaHRzPzogbnVtYmVyW107XG59XG5cbi8qKlxuICogVGV4dHVyZSBzYW1wbGVyIHByb3BlcnRpZXMgZm9yIGZpbHRlcmluZyBhbmQgd3JhcHBpbmcgbW9kZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2FtcGxlciBleHRlbmRzIElDaGlsZFJvb3RQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBNYWduaWZpY2F0aW9uIGZpbHRlci4gIFZhbGlkIHZhbHVlcyBjb3JyZXNwb25kIHRvIFdlYkdMIGVudW1zOiA5NzI4IChORUFSRVNUKSBhbmQgOTcyOSAoTElORUFSKVxuICAgKi9cbiAgbWFnRmlsdGVyPzogVGV4dHVyZU1hZ0ZpbHRlcjtcbiAgLyoqXG4gICAqIE1pbmlmaWNhdGlvbiBmaWx0ZXIuICBBbGwgdmFsaWQgdmFsdWVzIGNvcnJlc3BvbmQgdG8gV2ViR0wgZW51bXNcbiAgICovXG4gIG1pbkZpbHRlcj86IFRleHR1cmVNaW5GaWx0ZXI7XG4gIC8qKlxuICAgKiBTIChVKSB3cmFwcGluZyBtb2RlLiAgQWxsIHZhbGlkIHZhbHVlcyBjb3JyZXNwb25kIHRvIFdlYkdMIGVudW1zXG4gICAqL1xuICB3cmFwUz86IFRleHR1cmVXcmFwTW9kZTtcbiAgLyoqXG4gICAqIFQgKFYpIHdyYXBwaW5nIG1vZGUuICBBbGwgdmFsaWQgdmFsdWVzIGNvcnJlc3BvbmQgdG8gV2ViR0wgZW51bXNcbiAgICovXG4gIHdyYXBUPzogVGV4dHVyZVdyYXBNb2RlO1xufVxuXG4vKipcbiAqIFRoZSByb290IG5vZGVzIG9mIGEgc2NlbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2NlbmUgZXh0ZW5kcyBJQ2hpbGRSb290UHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIGluZGljZXMgb2YgZWFjaCByb290IG5vZGVcbiAgICovXG4gIG5vZGVzOiBudW1iZXJbXTtcbn1cblxuLyoqXG4gKiBKb2ludHMgYW5kIG1hdHJpY2VzIGRlZmluaW5nIGEgc2tpblxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTa2luIGV4dGVuZHMgSUNoaWxkUm9vdFByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgYWNjZXNzb3IgY29udGFpbmluZyB0aGUgZmxvYXRpbmctcG9pbnQgNHg0IGludmVyc2UtYmluZCBtYXRyaWNlcy4gIFRoZSBkZWZhdWx0IGlzIHRoYXQgZWFjaCBtYXRyaXggaXMgYSA0eDQgaWRlbnRpdHkgbWF0cml4LCB3aGljaCBpbXBsaWVzIHRoYXQgaW52ZXJzZS1iaW5kIG1hdHJpY2VzIHdlcmUgcHJlLWFwcGxpZWRcbiAgICovXG4gIGludmVyc2VCaW5kTWF0cmljZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIG5vZGUgdXNlZCBhcyBhIHNrZWxldG9uIHJvb3QuIFdoZW4gdW5kZWZpbmVkLCBqb2ludHMgdHJhbnNmb3JtcyByZXNvbHZlIHRvIHNjZW5lIHJvb3RcbiAgICovXG4gIHNrZWxldG9uPzogbnVtYmVyO1xuICAvKipcbiAgICogSW5kaWNlcyBvZiBza2VsZXRvbiBub2RlcywgdXNlZCBhcyBqb2ludHMgaW4gdGhpcyBza2luLiAgVGhlIGFycmF5IGxlbmd0aCBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBjb3VudCBwcm9wZXJ0eSBvZiB0aGUgaW52ZXJzZUJpbmRNYXRyaWNlcyBhY2Nlc3NvciAod2hlbiBkZWZpbmVkKVxuICAgKi9cbiAgam9pbnRzOiBudW1iZXJbXTtcbn1cblxuLyoqXG4gKiBBIHRleHR1cmUgYW5kIGl0cyBzYW1wbGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRleHR1cmUgZXh0ZW5kcyBJQ2hpbGRSb290UHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBzYW1wbGVyIHVzZWQgYnkgdGhpcyB0ZXh0dXJlLiBXaGVuIHVuZGVmaW5lZCwgYSBzYW1wbGVyIHdpdGggcmVwZWF0IHdyYXBwaW5nIGFuZCBhdXRvIGZpbHRlcmluZyBzaG91bGQgYmUgdXNlZFxuICAgKi9cbiAgc2FtcGxlcj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgaW1hZ2UgdXNlZCBieSB0aGlzIHRleHR1cmVcbiAgICovXG4gIHNvdXJjZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlZmVyZW5jZSB0byBhIHRleHR1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVGV4dHVyZUluZm8gZXh0ZW5kcyBJUHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHNldCBpbmRleCBvZiB0ZXh0dXJlJ3MgVEVYQ09PUkQgYXR0cmlidXRlIHVzZWQgZm9yIHRleHR1cmUgY29vcmRpbmF0ZSBtYXBwaW5nXG4gICAqL1xuICB0ZXhDb29yZD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgcm9vdCBvYmplY3QgZm9yIGEgZ2xURiBhc3NldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElHTFRGIGV4dGVuZHMgSVByb3BlcnR5IHtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGFjY2Vzc29ycy4gQW4gYWNjZXNzb3IgaXMgYSB0eXBlZCB2aWV3IGludG8gYSBidWZmZXJWaWV3XG4gICAqL1xuICBhY2Nlc3NvcnM/OiBJQWNjZXNzb3JbXTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGtleWZyYW1lIGFuaW1hdGlvbnNcbiAgICovXG4gIGFuaW1hdGlvbnM/OiBJQW5pbWF0aW9uW107XG4gIC8qKlxuICAgKiBNZXRhZGF0YSBhYm91dCB0aGUgZ2xURiBhc3NldFxuICAgKi9cbiAgYXNzZXQ6IElBc3NldDtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGJ1ZmZlcnMuICBBIGJ1ZmZlciBwb2ludHMgdG8gYmluYXJ5IGdlb21ldHJ5LCBhbmltYXRpb24sIG9yIHNraW5zXG4gICAqL1xuICBidWZmZXJzPzogSUJ1ZmZlcltdO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgYnVmZmVyVmlld3MuICBBIGJ1ZmZlclZpZXcgaXMgYSB2aWV3IGludG8gYSBidWZmZXIgZ2VuZXJhbGx5IHJlcHJlc2VudGluZyBhIHN1YnNldCBvZiB0aGUgYnVmZmVyXG4gICAqL1xuICBidWZmZXJWaWV3cz86IElCdWZmZXJWaWV3W107XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBjYW1lcmFzXG4gICAqL1xuICBjYW1lcmFzPzogSUNhbWVyYVtdO1xuICAvKipcbiAgICogTmFtZXMgb2YgZ2xURiBleHRlbnNpb25zIHVzZWQgc29tZXdoZXJlIGluIHRoaXMgYXNzZXRcbiAgICovXG4gIGV4dGVuc2lvbnNVc2VkPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBOYW1lcyBvZiBnbFRGIGV4dGVuc2lvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgbG9hZCB0aGlzIGFzc2V0XG4gICAqL1xuICBleHRlbnNpb25zUmVxdWlyZWQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGltYWdlcy4gIEFuIGltYWdlIGRlZmluZXMgZGF0YSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAgICovXG4gIGltYWdlcz86IElJbWFnZVtdO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgbWF0ZXJpYWxzLiAgQSBtYXRlcmlhbCBkZWZpbmVzIHRoZSBhcHBlYXJhbmNlIG9mIGEgcHJpbWl0aXZlXG4gICAqL1xuICBtYXRlcmlhbHM/OiBJTWF0ZXJpYWxbXTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG1lc2hlcy4gIEEgbWVzaCBpcyBhIHNldCBvZiBwcmltaXRpdmVzIHRvIGJlIHJlbmRlcmVkXG4gICAqL1xuICBtZXNoZXM/OiBJTWVzaFtdO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygbm9kZXNcbiAgICovXG4gIG5vZGVzPzogSU5vZGVbXTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHNhbXBsZXJzLiAgQSBzYW1wbGVyIGNvbnRhaW5zIHByb3BlcnRpZXMgZm9yIHRleHR1cmUgZmlsdGVyaW5nIGFuZCB3cmFwcGluZyBtb2Rlc1xuICAgKi9cbiAgc2FtcGxlcnM/OiBJU2FtcGxlcltdO1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBkZWZhdWx0IHNjZW5lXG4gICAqL1xuICBzY2VuZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHNjZW5lc1xuICAgKi9cbiAgc2NlbmVzPzogSVNjZW5lW107XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBza2lucy4gIEEgc2tpbiBpcyBkZWZpbmVkIGJ5IGpvaW50cyBhbmQgbWF0cmljZXNcbiAgICovXG4gIHNraW5zPzogSVNraW5bXTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHRleHR1cmVzXG4gICAqL1xuICB0ZXh0dXJlcz86IElUZXh0dXJlW107XG59XG4iLCJpbXBvcnQgeyBJbmRleEZvcm1hdCwgVHlwZWRBcnJheSwgVmVydGV4RWxlbWVudEZvcm1hdCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IENvbG9yLCBWZWN0b3IyLCBWZWN0b3IzLCBWZWN0b3I0IH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtbWF0aFwiO1xuaW1wb3J0IHsgQnVmZmVySW5mbywgUGFyc2VyQ29udGV4dCB9IGZyb20gXCIuL3BhcnNlci9QYXJzZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBBY2Nlc3NvckNvbXBvbmVudFR5cGUsIEFjY2Vzc29yVHlwZSwgSUFjY2Vzc29yLCBJQnVmZmVyVmlldywgSUdMVEYgfSBmcm9tIFwiLi9TY2hlbWFcIjtcblxuY29uc3QgY2hhckNvZGVPZkRvdCA9IFwiLlwiLmNoYXJDb2RlQXQoMCk7XG5jb25zdCByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcbmNvbnN0IHJlUHJvcE5hbWUgPSBSZWdFeHAoXG4gIC8vIE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBkb3Qgb3IgYnJhY2tldC5cbiAgXCJbXi5bXFxcXF1dK1wiICtcbiAgICBcInxcIiArXG4gICAgLy8gT3IgbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIGJyYWNrZXRzLlxuICAgIFwiXFxcXFsoPzpcIiArXG4gICAgLy8gTWF0Y2ggYSBub24tc3RyaW5nIGV4cHJlc3Npb24uXG4gICAgXCIoW15cXFwiJ11bXltdKilcIiArXG4gICAgXCJ8XCIgK1xuICAgIC8vIE9yIG1hdGNoIHN0cmluZ3MgKHN1cHBvcnRzIGVzY2FwaW5nIGNoYXJhY3RlcnMpLlxuICAgIFwiKFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMlwiICtcbiAgICBcIilcXFxcXVwiICtcbiAgICBcInxcIiArXG4gICAgLy8gT3IgbWF0Y2ggXCJcIiBhcyB0aGUgc3BhY2UgYmV0d2VlbiBjb25zZWN1dGl2ZSBkb3RzIG9yIGVtcHR5IGJyYWNrZXRzLlxuICAgIFwiKD89KD86XFxcXC58XFxcXFtcXFxcXSkoPzpcXFxcLnxcXFxcW1xcXFxdfCQpKVwiLFxuICBcImdcIlxuKTtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEdMVEZVdGlsIHtcbiAgcHVibGljIHN0YXRpYyBmbG9hdEJ1ZmZlclRvVmVjdG9yMkFycmF5KGJ1ZmZlcjogRmxvYXQzMkFycmF5KTogVmVjdG9yMltdIHtcbiAgICBjb25zdCBidWZmZXJMZW4gPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IEFycmF5PFZlY3RvcjI+KGJ1ZmZlckxlbiAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVyTGVuOyBpICs9IDIpIHtcbiAgICAgIGFycmF5W2kgLyAyXSA9IG5ldyBWZWN0b3IyKGJ1ZmZlcltpXSwgYnVmZmVyW2kgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZmxvYXRCdWZmZXJUb1ZlY3RvcjNBcnJheShidWZmZXI6IEZsb2F0MzJBcnJheSk6IFZlY3RvcjNbXSB7XG4gICAgY29uc3QgYnVmZmVyTGVuID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBBcnJheTxWZWN0b3IzPihidWZmZXJMZW4gLyAzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlckxlbjsgaSArPSAzKSB7XG4gICAgICBhcnJheVtpIC8gM10gPSBuZXcgVmVjdG9yMyhidWZmZXJbaV0sIGJ1ZmZlcltpICsgMV0sIGJ1ZmZlcltpICsgMl0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZsb2F0QnVmZmVyVG9WZWN0b3I0QXJyYXkoYnVmZmVyOiBGbG9hdDMyQXJyYXkpOiBWZWN0b3I0W10ge1xuICAgIGNvbnN0IGJ1ZmZlckxlbiA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgQXJyYXk8VmVjdG9yND4oYnVmZmVyTGVuIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJMZW47IGkgKz0gNCkge1xuICAgICAgYXJyYXlbaSAvIDRdID0gbmV3IFZlY3RvcjQoYnVmZmVyW2ldLCBidWZmZXJbaSArIDFdLCBidWZmZXJbaSArIDJdLCBidWZmZXJbaSArIDNdKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmbG9hdEJ1ZmZlclRvQ29sb3JBcnJheShidWZmZXI6IEZsb2F0MzJBcnJheSwgaXNDb2xvcjM6IGJvb2xlYW4pOiBDb2xvcltdIHtcbiAgICBjb25zdCBidWZmZXJMZW4gPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IGNvbG9ycyA9IG5ldyBBcnJheTxDb2xvcj4oYnVmZmVyTGVuIC8gKGlzQ29sb3IzID8gMyA6IDQpKTtcblxuICAgIGlmIChpc0NvbG9yMykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJMZW47IGkgKz0gMykge1xuICAgICAgICBjb2xvcnNbaSAvIDNdID0gbmV3IENvbG9yKGJ1ZmZlcltpXSwgYnVmZmVyW2kgKyAxXSwgYnVmZmVyW2kgKyAyXSwgMS4wKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJMZW47IGkgKz0gNCkge1xuICAgICAgICBjb2xvcnNbaSAvIDRdID0gbmV3IENvbG9yKGJ1ZmZlcltpXSwgYnVmZmVyW2kgKyAxXSwgYnVmZmVyW2kgKyAyXSwgYnVmZmVyW2kgKyAzXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbG9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBiaW5hcnkgdGV4dCBmb3IgZ2xiIGxvYWRlci5cbiAgICovXG4gIHN0YXRpYyBkZWNvZGVUZXh0KGFycmF5OiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIFRleHREZWNvZGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGFycmF5KTtcbiAgICB9XG5cbiAgICAvLyBUZXh0RGVjb2RlciBwb2x5ZmlsbFxuICAgIGxldCBzID0gXCJcIjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhcnJheVtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQocykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9jY3VwaWVkIGJ5IGFjY2Vzc29yIHR5cGUuXG4gICAqL1xuICBzdGF0aWMgZ2V0QWNjZXNzb3JUeXBlU2l6ZShhY2Nlc3NvclR5cGU6IEFjY2Vzc29yVHlwZSk6IG51bWJlciB7XG4gICAgc3dpdGNoIChhY2Nlc3NvclR5cGUpIHtcbiAgICAgIGNhc2UgQWNjZXNzb3JUeXBlLlNDQUxBUjpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBjYXNlIEFjY2Vzc29yVHlwZS5WRUMyOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGNhc2UgQWNjZXNzb3JUeXBlLlZFQzM6XG4gICAgICAgIHJldHVybiAzO1xuICAgICAgY2FzZSBBY2Nlc3NvclR5cGUuVkVDNDpcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBjYXNlIEFjY2Vzc29yVHlwZS5NQVQyOlxuICAgICAgICByZXR1cm4gNDtcbiAgICAgIGNhc2UgQWNjZXNzb3JUeXBlLk1BVDM6XG4gICAgICAgIHJldHVybiA5O1xuICAgICAgY2FzZSBBY2Nlc3NvclR5cGUuTUFUNDpcbiAgICAgICAgcmV0dXJuIDE2O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFR5cGVkQXJyYXkgY29ycmVzcG9uZGluZyB0byB0aGUgY29tcG9uZW50IHR5cGUuXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29tcG9uZW50VHlwZShjb21wb25lbnRUeXBlOiBBY2Nlc3NvckNvbXBvbmVudFR5cGUpIHtcbiAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpIHtcbiAgICAgIGNhc2UgQWNjZXNzb3JDb21wb25lbnRUeXBlLkJZVEU6XG4gICAgICAgIHJldHVybiBJbnQ4QXJyYXk7XG4gICAgICBjYXNlIEFjY2Vzc29yQ29tcG9uZW50VHlwZS5VTlNJR05FRF9CWVRFOlxuICAgICAgICByZXR1cm4gVWludDhBcnJheTtcbiAgICAgIGNhc2UgQWNjZXNzb3JDb21wb25lbnRUeXBlLlNIT1JUOlxuICAgICAgICByZXR1cm4gSW50MTZBcnJheTtcbiAgICAgIGNhc2UgQWNjZXNzb3JDb21wb25lbnRUeXBlLlVOU0lHTkVEX1NIT1JUOlxuICAgICAgICByZXR1cm4gVWludDE2QXJyYXk7XG4gICAgICBjYXNlIEFjY2Vzc29yQ29tcG9uZW50VHlwZS5VTlNJR05FRF9JTlQ6XG4gICAgICAgIHJldHVybiBVaW50MzJBcnJheTtcbiAgICAgIGNhc2UgQWNjZXNzb3JDb21wb25lbnRUeXBlLkZMT0FUOlxuICAgICAgICByZXR1cm4gRmxvYXQzMkFycmF5O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXROb3JtYWxpemVkQ29tcG9uZW50U2NhbGUoY29tcG9uZW50VHlwZTogQWNjZXNzb3JDb21wb25lbnRUeXBlKSB7XG4gICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvdHJlZS9tYXN0ZXIvZXh0ZW5zaW9ucy8yLjAvS2hyb25vcy9LSFJfbWVzaF9xdWFudGl6YXRpb24jZW5jb2RpbmctcXVhbnRpemVkLWRhdGFcbiAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpIHtcbiAgICAgIGNhc2UgQWNjZXNzb3JDb21wb25lbnRUeXBlLkJZVEU6XG4gICAgICAgIHJldHVybiAxIC8gMTI3O1xuICAgICAgY2FzZSBBY2Nlc3NvckNvbXBvbmVudFR5cGUuVU5TSUdORURfQllURTpcbiAgICAgICAgcmV0dXJuIDEgLyAyNTU7XG4gICAgICBjYXNlIEFjY2Vzc29yQ29tcG9uZW50VHlwZS5TSE9SVDpcbiAgICAgICAgcmV0dXJuIDEgLyAzMjc2NztcbiAgICAgIGNhc2UgQWNjZXNzb3JDb21wb25lbnRUeXBlLlVOU0lHTkVEX1NIT1JUOlxuICAgICAgICByZXR1cm4gMSAvIDY1NTM1O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2FsYWNlYW4uR0xURkxvYWRlcjogVW5zdXBwb3J0ZWQgbm9ybWFsaXplZCBhY2Nlc3NvciBjb21wb25lbnQgdHlwZS5cIik7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEFjY2Vzc29yQnVmZmVyKGNvbnRleHQ6IFBhcnNlckNvbnRleHQsIGdsdGY6IElHTFRGLCBhY2Nlc3NvcjogSUFjY2Vzc29yKTogQnVmZmVySW5mbyB7XG4gICAgY29uc3QgeyBidWZmZXJzIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IGJ1ZmZlclZpZXdzID0gZ2x0Zi5idWZmZXJWaWV3cztcblxuICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBhY2Nlc3Nvci5jb21wb25lbnRUeXBlO1xuICAgIGNvbnN0IGJ1ZmZlclZpZXcgPSBidWZmZXJWaWV3c1thY2Nlc3Nvci5idWZmZXJWaWV3XTtcblxuICAgIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcnNbYnVmZmVyVmlldy5idWZmZXJdO1xuICAgIGNvbnN0IGJ1ZmZlckJ5dGVPZmZzZXQgPSBidWZmZXJWaWV3LmJ5dGVPZmZzZXQgfHwgMDtcbiAgICBjb25zdCBieXRlT2Zmc2V0ID0gYWNjZXNzb3IuYnl0ZU9mZnNldCB8fCAwO1xuXG4gICAgY29uc3QgVHlwZWRBcnJheSA9IEdMVEZVdGlsLmdldENvbXBvbmVudFR5cGUoY29tcG9uZW50VHlwZSk7XG4gICAgY29uc3QgZGF0YUVsbWVudFNpemUgPSBHTFRGVXRpbC5nZXRBY2Nlc3NvclR5cGVTaXplKGFjY2Vzc29yLnR5cGUpO1xuICAgIGNvbnN0IGRhdGFFbGVtZW50Qnl0ZXMgPSBUeXBlZEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgIGNvbnN0IGVsZW1lbnRTdHJpZGUgPSBkYXRhRWxtZW50U2l6ZSAqIGRhdGFFbGVtZW50Qnl0ZXM7XG4gICAgY29uc3QgYWNjZXNzb3JDb3VudCA9IGFjY2Vzc29yLmNvdW50O1xuICAgIGNvbnN0IGJ1ZmZlclN0cmlkZSA9IGJ1ZmZlclZpZXcuYnl0ZVN0cmlkZTtcblxuICAgIGxldCBidWZmZXJJbmZvOiBCdWZmZXJJbmZvO1xuICAgIC8vIEFjY29yZGluZyB0byB0aGUgZ2xURiBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9ubHkgYnl0ZVN0cmlkZSBub3QgdW5kZWZpbmVkIGlzIGFsbG93ZWRcbiAgICBpZiAoYnVmZmVyU3RyaWRlICE9PSB1bmRlZmluZWQgJiYgYnVmZmVyU3RyaWRlICE9PSBlbGVtZW50U3RyaWRlKSB7XG4gICAgICBjb25zdCBidWZmZXJTbGljZSA9IE1hdGguZmxvb3IoYnl0ZU9mZnNldCAvIGJ1ZmZlclN0cmlkZSk7XG4gICAgICBjb25zdCBidWZmZXJDYWNoZUtleSA9IGFjY2Vzc29yLmJ1ZmZlclZpZXcgKyBcIjpcIiArIGNvbXBvbmVudFR5cGUgKyBcIjpcIiArIGJ1ZmZlclNsaWNlICsgXCI6XCIgKyBhY2Nlc3NvckNvdW50O1xuICAgICAgY29uc3QgYWNjZXNzb3JCdWZmZXJDYWNoZSA9IGNvbnRleHQuYWNjZXNzb3JCdWZmZXJDYWNoZTtcbiAgICAgIGJ1ZmZlckluZm8gPSBhY2Nlc3NvckJ1ZmZlckNhY2hlW2J1ZmZlckNhY2hlS2V5XTtcbiAgICAgIGlmICghYnVmZmVySW5mbykge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXJCeXRlT2Zmc2V0ICsgYnVmZmVyU2xpY2UgKiBidWZmZXJTdHJpZGU7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gYWNjZXNzb3JDb3VudCAqIChidWZmZXJTdHJpZGUgLyBkYXRhRWxlbWVudEJ5dGVzKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBUeXBlZEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBjb3VudCk7XG4gICAgICAgIGFjY2Vzc29yQnVmZmVyQ2FjaGVbYnVmZmVyQ2FjaGVLZXldID0gYnVmZmVySW5mbyA9IG5ldyBCdWZmZXJJbmZvKGRhdGEsIHRydWUsIGJ1ZmZlclN0cmlkZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGJ1ZmZlckJ5dGVPZmZzZXQgKyBieXRlT2Zmc2V0O1xuICAgICAgY29uc3QgY291bnQgPSBhY2Nlc3NvckNvdW50ICogZGF0YUVsbWVudFNpemU7XG4gICAgICBjb25zdCBkYXRhID0gbmV3IFR5cGVkQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGNvdW50KTtcbiAgICAgIGJ1ZmZlckluZm8gPSBuZXcgQnVmZmVySW5mbyhkYXRhLCBmYWxzZSwgZWxlbWVudFN0cmlkZSk7XG4gICAgfVxuXG4gICAgaWYgKGFjY2Vzc29yLnNwYXJzZSkge1xuICAgICAgY29uc3QgZGF0YSA9IEdMVEZVdGlsLnByb2Nlc3NpbmdTcGFyc2VEYXRhKGdsdGYsIGFjY2Vzc29yLCBidWZmZXJzLCBidWZmZXJJbmZvLmRhdGEpO1xuICAgICAgYnVmZmVySW5mbyA9IG5ldyBCdWZmZXJJbmZvKGRhdGEsIGZhbHNlLCBidWZmZXJJbmZvLnN0cmlkZSk7XG4gICAgfVxuICAgIHJldHVybiBidWZmZXJJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIEdldCBhY2Nlc3NvciBkYXRhLlxuICAgKi9cbiAgc3RhdGljIGdldEFjY2Vzc29yRGF0YShnbHRmOiBJR0xURiwgYWNjZXNzb3I6IElBY2Nlc3NvciwgYnVmZmVyczogQXJyYXlCdWZmZXJbXSk6IFR5cGVkQXJyYXkge1xuICAgIGNvbnN0IGJ1ZmZlclZpZXdzID0gZ2x0Zi5idWZmZXJWaWV3cztcbiAgICBjb25zdCBidWZmZXJWaWV3ID0gYnVmZmVyVmlld3NbYWNjZXNzb3IuYnVmZmVyVmlld107XG4gICAgY29uc3QgYXJyYXlCdWZmZXIgPSBidWZmZXJzW2J1ZmZlclZpZXcuYnVmZmVyXTtcbiAgICBjb25zdCBhY2Nlc3NvckJ5dGVPZmZzZXQgPSBhY2Nlc3Nvci5oYXNPd25Qcm9wZXJ0eShcImJ5dGVPZmZzZXRcIikgPyBhY2Nlc3Nvci5ieXRlT2Zmc2V0IDogMDtcbiAgICBjb25zdCBidWZmZXJWaWV3Qnl0ZU9mZnNldCA9IGJ1ZmZlclZpZXcuaGFzT3duUHJvcGVydHkoXCJieXRlT2Zmc2V0XCIpID8gYnVmZmVyVmlldy5ieXRlT2Zmc2V0IDogMDtcbiAgICBjb25zdCBieXRlT2Zmc2V0ID0gYWNjZXNzb3JCeXRlT2Zmc2V0ICsgYnVmZmVyVmlld0J5dGVPZmZzZXQ7XG4gICAgY29uc3QgYWNjZXNzb3JUeXBlU2l6ZSA9IEdMVEZVdGlsLmdldEFjY2Vzc29yVHlwZVNpemUoYWNjZXNzb3IudHlwZSk7XG4gICAgY29uc3QgbGVuZ3RoID0gYWNjZXNzb3JUeXBlU2l6ZSAqIGFjY2Vzc29yLmNvdW50O1xuICAgIGNvbnN0IGJ5dGVTdHJpZGUgPSBidWZmZXJWaWV3LmJ5dGVTdHJpZGUgPz8gMDtcbiAgICBjb25zdCBhcnJheVR5cGUgPSBHTFRGVXRpbC5nZXRDb21wb25lbnRUeXBlKGFjY2Vzc29yLmNvbXBvbmVudFR5cGUpO1xuICAgIGxldCB1aW50OEFycmF5O1xuICAgIGlmIChieXRlU3RyaWRlKSB7XG4gICAgICBjb25zdCBhY2Nlc3NvckJ5dGVTaXplID0gYWNjZXNzb3JUeXBlU2l6ZSAqIGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgIHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhY2Nlc3Nvci5jb3VudCAqIGFjY2Vzc29yQnl0ZVNpemUpO1xuICAgICAgY29uc3Qgb3JpZ2luYWxCdWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIGJ1ZmZlclZpZXdCeXRlT2Zmc2V0LCBidWZmZXJWaWV3LmJ5dGVMZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY2Nlc3Nvci5jb3VudDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYWNjZXNzb3JCeXRlU2l6ZTsgaisrKSB7XG4gICAgICAgICAgdWludDhBcnJheVtpICogYWNjZXNzb3JCeXRlU2l6ZSArIGpdID0gb3JpZ2luYWxCdWZmZXJWaWV3W2kgKiBieXRlU3RyaWRlICsgYWNjZXNzb3JCeXRlT2Zmc2V0ICsgal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLnNsaWNlKGJ5dGVPZmZzZXQsIGJ5dGVPZmZzZXQgKyBsZW5ndGggKiBhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlZEFycmF5ID0gbmV3IGFycmF5VHlwZSh1aW50OEFycmF5LmJ1ZmZlcik7XG5cbiAgICBpZiAoYWNjZXNzb3Iuc3BhcnNlKSB7XG4gICAgICBjb25zdCB7IGNvdW50LCBpbmRpY2VzLCB2YWx1ZXMgfSA9IGFjY2Vzc29yLnNwYXJzZTtcbiAgICAgIGNvbnN0IGluZGljZXNCdWZmZXJWaWV3ID0gYnVmZmVyVmlld3NbaW5kaWNlcy5idWZmZXJWaWV3XTtcbiAgICAgIGNvbnN0IHZhbHVlc0J1ZmZlclZpZXcgPSBidWZmZXJWaWV3c1t2YWx1ZXMuYnVmZmVyVmlld107XG4gICAgICBjb25zdCBpbmRpY2VzQXJyYXlCdWZmZXIgPSBidWZmZXJzW2luZGljZXNCdWZmZXJWaWV3LmJ1ZmZlcl07XG4gICAgICBjb25zdCB2YWx1ZXNBcnJheUJ1ZmZlciA9IGJ1ZmZlcnNbdmFsdWVzQnVmZmVyVmlldy5idWZmZXJdO1xuICAgICAgY29uc3QgaW5kaWNlc0J5dGVPZmZzZXQgPSAoaW5kaWNlcy5ieXRlT2Zmc2V0ID8/IDApICsgKGluZGljZXNCdWZmZXJWaWV3LmJ5dGVPZmZzZXQgPz8gMCk7XG4gICAgICBjb25zdCBpbmRpY2VzQnl0ZUxlbmd0aCA9IGluZGljZXNCdWZmZXJWaWV3LmJ5dGVMZW5ndGg7XG4gICAgICBjb25zdCB2YWx1ZXNCeXRlT2Zmc2V0ID0gKHZhbHVlcy5ieXRlT2Zmc2V0ID8/IDApICsgKHZhbHVlc0J1ZmZlclZpZXcuYnl0ZU9mZnNldCA/PyAwKTtcbiAgICAgIGNvbnN0IHZhbHVlc0J5dGVMZW5ndGggPSB2YWx1ZXNCdWZmZXJWaWV3LmJ5dGVMZW5ndGg7XG5cbiAgICAgIGNvbnN0IGluZGljZXNUeXBlID0gR0xURlV0aWwuZ2V0Q29tcG9uZW50VHlwZShpbmRpY2VzLmNvbXBvbmVudFR5cGUpO1xuICAgICAgY29uc3QgaW5kaWNlc0FycmF5ID0gbmV3IGluZGljZXNUeXBlKFxuICAgICAgICBpbmRpY2VzQXJyYXlCdWZmZXIsXG4gICAgICAgIGluZGljZXNCeXRlT2Zmc2V0LFxuICAgICAgICBpbmRpY2VzQnl0ZUxlbmd0aCAvIGluZGljZXNUeXBlLkJZVEVTX1BFUl9FTEVNRU5UXG4gICAgICApO1xuICAgICAgY29uc3QgdmFsdWVzQXJyYXkgPSBuZXcgYXJyYXlUeXBlKFxuICAgICAgICB2YWx1ZXNBcnJheUJ1ZmZlcixcbiAgICAgICAgdmFsdWVzQnl0ZU9mZnNldCxcbiAgICAgICAgdmFsdWVzQnl0ZUxlbmd0aCAvIGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVFxuICAgICAgKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VJbmRleCA9IGluZGljZXNBcnJheVtpXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBhY2Nlc3NvclR5cGVTaXplOyBqKyspIHtcbiAgICAgICAgICB0eXBlZEFycmF5W3JlcGxhY2VJbmRleCAqIGFjY2Vzc29yVHlwZVNpemUgKyBqXSA9IHZhbHVlc0FycmF5W2kgKiBhY2Nlc3NvclR5cGVTaXplICsgal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZWRBcnJheTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRCdWZmZXJWaWV3RGF0YShidWZmZXJWaWV3OiBJQnVmZmVyVmlldywgYnVmZmVyczogQXJyYXlCdWZmZXJbXSk6IEFycmF5QnVmZmVyIHtcbiAgICBjb25zdCB7IGJ1ZmZlciwgYnl0ZU9mZnNldCA9IDAsIGJ5dGVMZW5ndGggfSA9IGJ1ZmZlclZpZXc7XG4gICAgY29uc3QgYXJyYXlCdWZmZXIgPSBidWZmZXJzW2J1ZmZlcl07XG5cbiAgICByZXR1cm4gYXJyYXlCdWZmZXIuc2xpY2UoYnl0ZU9mZnNldCwgYnl0ZU9mZnNldCArIGJ5dGVMZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhY2Nlc3NvciBkYXRhLlxuICAgKi9cbiAgc3RhdGljIHByb2Nlc3NpbmdTcGFyc2VEYXRhKFxuICAgIGdsdGY6IElHTFRGLFxuICAgIGFjY2Vzc29yOiBJQWNjZXNzb3IsXG4gICAgYnVmZmVyczogQXJyYXlCdWZmZXJbXSxcbiAgICBvcmlnaW5EYXRhOiBUeXBlZEFycmF5XG4gICk6IFR5cGVkQXJyYXkge1xuICAgIGNvbnN0IGJ1ZmZlclZpZXdzID0gZ2x0Zi5idWZmZXJWaWV3cztcbiAgICBjb25zdCBhY2Nlc3NvclR5cGVTaXplID0gR0xURlV0aWwuZ2V0QWNjZXNzb3JUeXBlU2l6ZShhY2Nlc3Nvci50eXBlKTtcbiAgICBjb25zdCBUeXBlZEFycmF5ID0gR0xURlV0aWwuZ2V0Q29tcG9uZW50VHlwZShhY2Nlc3Nvci5jb21wb25lbnRUeXBlKTtcbiAgICBjb25zdCBkYXRhID0gb3JpZ2luRGF0YS5zbGljZSgpO1xuXG4gICAgY29uc3QgeyBjb3VudCwgaW5kaWNlcywgdmFsdWVzIH0gPSBhY2Nlc3Nvci5zcGFyc2U7XG4gICAgY29uc3QgaW5kaWNlc0J1ZmZlclZpZXcgPSBidWZmZXJWaWV3c1tpbmRpY2VzLmJ1ZmZlclZpZXddO1xuICAgIGNvbnN0IHZhbHVlc0J1ZmZlclZpZXcgPSBidWZmZXJWaWV3c1t2YWx1ZXMuYnVmZmVyVmlld107XG4gICAgY29uc3QgaW5kaWNlc0FycmF5QnVmZmVyID0gYnVmZmVyc1tpbmRpY2VzQnVmZmVyVmlldy5idWZmZXJdO1xuICAgIGNvbnN0IHZhbHVlc0FycmF5QnVmZmVyID0gYnVmZmVyc1t2YWx1ZXNCdWZmZXJWaWV3LmJ1ZmZlcl07XG4gICAgY29uc3QgaW5kaWNlc0J5dGVPZmZzZXQgPSAoaW5kaWNlcy5ieXRlT2Zmc2V0ID8/IDApICsgKGluZGljZXNCdWZmZXJWaWV3LmJ5dGVPZmZzZXQgPz8gMCk7XG4gICAgY29uc3QgaW5kaWNlc0J5dGVMZW5ndGggPSBpbmRpY2VzQnVmZmVyVmlldy5ieXRlTGVuZ3RoO1xuICAgIGNvbnN0IHZhbHVlc0J5dGVPZmZzZXQgPSAodmFsdWVzLmJ5dGVPZmZzZXQgPz8gMCkgKyAodmFsdWVzQnVmZmVyVmlldy5ieXRlT2Zmc2V0ID8/IDApO1xuICAgIGNvbnN0IHZhbHVlc0J5dGVMZW5ndGggPSB2YWx1ZXNCdWZmZXJWaWV3LmJ5dGVMZW5ndGg7XG5cbiAgICBjb25zdCBJbmRleFR5cGVBcnJheSA9IEdMVEZVdGlsLmdldENvbXBvbmVudFR5cGUoaW5kaWNlcy5jb21wb25lbnRUeXBlKTtcbiAgICBjb25zdCBpbmRpY2VzQXJyYXkgPSBuZXcgSW5kZXhUeXBlQXJyYXkoXG4gICAgICBpbmRpY2VzQXJyYXlCdWZmZXIsXG4gICAgICBpbmRpY2VzQnl0ZU9mZnNldCxcbiAgICAgIGluZGljZXNCeXRlTGVuZ3RoIC8gSW5kZXhUeXBlQXJyYXkuQllURVNfUEVSX0VMRU1FTlRcbiAgICApO1xuICAgIGNvbnN0IHZhbHVlc0FycmF5ID0gbmV3IFR5cGVkQXJyYXkoXG4gICAgICB2YWx1ZXNBcnJheUJ1ZmZlcixcbiAgICAgIHZhbHVlc0J5dGVPZmZzZXQsXG4gICAgICB2YWx1ZXNCeXRlTGVuZ3RoIC8gVHlwZWRBcnJheS5CWVRFU19QRVJfRUxFTUVOVFxuICAgICk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcGxhY2VJbmRleCA9IGluZGljZXNBcnJheVtpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYWNjZXNzb3JUeXBlU2l6ZTsgaisrKSB7XG4gICAgICAgIGRhdGFbcmVwbGFjZUluZGV4ICogYWNjZXNzb3JUeXBlU2l6ZSArIGpdID0gdmFsdWVzQXJyYXlbaSAqIGFjY2Vzc29yVHlwZVNpemUgKyBqXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRJbmRleEZvcm1hdCh0eXBlOiBBY2Nlc3NvckNvbXBvbmVudFR5cGUpOiBJbmRleEZvcm1hdCB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEFjY2Vzc29yQ29tcG9uZW50VHlwZS5VTlNJR05FRF9CWVRFOlxuICAgICAgICByZXR1cm4gSW5kZXhGb3JtYXQuVUludDg7XG4gICAgICBjYXNlIEFjY2Vzc29yQ29tcG9uZW50VHlwZS5VTlNJR05FRF9TSE9SVDpcbiAgICAgICAgcmV0dXJuIEluZGV4Rm9ybWF0LlVJbnQxNjtcbiAgICAgIGNhc2UgQWNjZXNzb3JDb21wb25lbnRUeXBlLlVOU0lHTkVEX0lOVDpcbiAgICAgICAgcmV0dXJuIEluZGV4Rm9ybWF0LlVJbnQzMjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RWxlbWVudEZvcm1hdCh0eXBlOiBBY2Nlc3NvckNvbXBvbmVudFR5cGUsIHNpemU6IG51bWJlciwgbm9ybWFsaXplZDogYm9vbGVhbiA9IGZhbHNlKTogVmVydGV4RWxlbWVudEZvcm1hdCB7XG4gICAgaWYgKHR5cGUgPT0gQWNjZXNzb3JDb21wb25lbnRUeXBlLkZMT0FUKSB7XG4gICAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBWZXJ0ZXhFbGVtZW50Rm9ybWF0LkZsb2F0O1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFZlcnRleEVsZW1lbnRGb3JtYXQuVmVjdG9yMjtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBWZXJ0ZXhFbGVtZW50Rm9ybWF0LlZlY3RvcjM7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gVmVydGV4RWxlbWVudEZvcm1hdC5WZWN0b3I0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09IEFjY2Vzc29yQ29tcG9uZW50VHlwZS5TSE9SVCkge1xuICAgICAgc3dpdGNoIChzaXplKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZCA/IFZlcnRleEVsZW1lbnRGb3JtYXQuTm9ybWFsaXplZFNob3J0MiA6IFZlcnRleEVsZW1lbnRGb3JtYXQuU2hvcnQyO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZCA/IFZlcnRleEVsZW1lbnRGb3JtYXQuTm9ybWFsaXplZFNob3J0NCA6IFZlcnRleEVsZW1lbnRGb3JtYXQuU2hvcnQ0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09IEFjY2Vzc29yQ29tcG9uZW50VHlwZS5VTlNJR05FRF9TSE9SVCkge1xuICAgICAgc3dpdGNoIChzaXplKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZCA/IFZlcnRleEVsZW1lbnRGb3JtYXQuTm9ybWFsaXplZFVTaG9ydDIgOiBWZXJ0ZXhFbGVtZW50Rm9ybWF0LlVTaG9ydDI7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBub3JtYWxpemVkID8gVmVydGV4RWxlbWVudEZvcm1hdC5Ob3JtYWxpemVkVVNob3J0NCA6IFZlcnRleEVsZW1lbnRGb3JtYXQuVVNob3J0NDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBBY2Nlc3NvckNvbXBvbmVudFR5cGUuQllURSkge1xuICAgICAgc3dpdGNoIChzaXplKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQgPyBWZXJ0ZXhFbGVtZW50Rm9ybWF0Lk5vcm1hbGl6ZWRCeXRlNCA6IFZlcnRleEVsZW1lbnRGb3JtYXQuQnl0ZTQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT0gQWNjZXNzb3JDb21wb25lbnRUeXBlLlVOU0lHTkVEX0JZVEUpIHtcbiAgICAgIHN3aXRjaCAoc2l6ZSkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBub3JtYWxpemVkID8gVmVydGV4RWxlbWVudEZvcm1hdC5Ob3JtYWxpemVkVUJ5dGU0IDogVmVydGV4RWxlbWVudEZvcm1hdC5VQnl0ZTQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgaW1hZ2UgYnVmZmVyXG4gICAqL1xuICBzdGF0aWMgbG9hZEltYWdlQnVmZmVyKGltYWdlQnVmZmVyOiBBcnJheUJ1ZmZlciwgdHlwZTogc3RyaW5nKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IoW2ltYWdlQnVmZmVyXSwgeyB0eXBlIH0pO1xuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIGltYWdlIGJ1ZmZlclwiKSk7XG4gICAgICB9O1xuICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQ2FsbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gYXZvaWQgaU9TJ3MgYnVnLlxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoaW1nKTtcbiAgICAgICAgICBpbWcub25sb2FkID0gbnVsbDtcbiAgICAgICAgICBpbWcub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgaW1nLm9uYWJvcnQgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBpbWcuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiO1xuICAgICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgaXNBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXig/Omh0dHB8YmxvYnxkYXRhOnxcXC8pLy50ZXN0KHVybCk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VSZWxhdGl2ZVVybChiYXNlVXJsOiBzdHJpbmcsIHJlbGF0aXZlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChHTFRGVXRpbC5pc0Fic29sdXRlVXJsKHJlbGF0aXZlVXJsKSkge1xuICAgICAgcmV0dXJuIHJlbGF0aXZlVXJsO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVXJsLnN1YnN0cmluZygwLCBiYXNlVXJsLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpICsgR0xURlV0aWwuX2Zvcm1hdFJlbGF0aXZlUGF0aChyZWxhdGl2ZVVybCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGhlIGdsYiBmb3JtYXQuXG4gICAqL1xuICBzdGF0aWMgcGFyc2VHTEIoZ2xiOiBBcnJheUJ1ZmZlcik6IHtcbiAgICBnbHRmOiBJR0xURjtcbiAgICBidWZmZXJzOiBBcnJheUJ1ZmZlcltdO1xuICB9IHtcbiAgICBjb25zdCBVSU5UMzJfTEVOR1RIID0gNDtcbiAgICBjb25zdCBHTEJfSEVBREVSX01BR0lDID0gMHg0NjU0NmM2NzsgLy8gJ2dsVEYnXG4gICAgY29uc3QgR0xCX0hFQURFUl9MRU5HVEggPSAxMjtcbiAgICBjb25zdCBHTEJfQ0hVTktfVFlQRVMgPSB7IEpTT046IDB4NGU0ZjUzNGEsIEJJTjogMHgwMDRlNDk0MiB9O1xuXG4gICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoZ2xiKTtcblxuICAgIC8vIHJlYWQgaGVhZGVyXG4gICAgY29uc3QgaGVhZGVyID0ge1xuICAgICAgbWFnaWM6IGRhdGFWaWV3LmdldFVpbnQzMigwLCB0cnVlKSxcbiAgICAgIHZlcnNpb246IGRhdGFWaWV3LmdldFVpbnQzMihVSU5UMzJfTEVOR1RILCB0cnVlKSxcbiAgICAgIGxlbmd0aDogZGF0YVZpZXcuZ2V0VWludDMyKDIgKiBVSU5UMzJfTEVOR1RILCB0cnVlKVxuICAgIH07XG5cbiAgICBpZiAoaGVhZGVyLm1hZ2ljICE9PSBHTEJfSEVBREVSX01BR0lDKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBnbGIgbWFnaWMgbnVtYmVyLiBFeHBlY3RlZCAweDQ2NTQ2QzY3LCBmb3VuZCAweFwiICsgaGVhZGVyLm1hZ2ljLnRvU3RyaW5nKDE2KSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyByZWFkIG1haW4gZGF0YVxuICAgIGxldCBjaHVua0xlbmd0aCA9IGRhdGFWaWV3LmdldFVpbnQzMihHTEJfSEVBREVSX0xFTkdUSCwgdHJ1ZSk7XG4gICAgbGV0IGNodW5rVHlwZSA9IGRhdGFWaWV3LmdldFVpbnQzMihHTEJfSEVBREVSX0xFTkdUSCArIFVJTlQzMl9MRU5HVEgsIHRydWUpO1xuXG4gICAgLy8gcmVhZCBnbFRGIGpzb25cbiAgICBpZiAoY2h1bmtUeXBlICE9PSBHTEJfQ0hVTktfVFlQRVMuSlNPTikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgZ2xiIGNodW5rIHR5cGUuIEV4cGVjdGVkIDB4NEU0RjUzNEEsIGZvdW5kIDB4XCIgKyBjaHVua1R5cGUudG9TdHJpbmcoMTYpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGdsVEZEYXRhID0gbmV3IFVpbnQ4QXJyYXkoZ2xiLCBHTEJfSEVBREVSX0xFTkdUSCArIDIgKiBVSU5UMzJfTEVOR1RILCBjaHVua0xlbmd0aCk7XG4gICAgY29uc3QgZ2x0ZjogSUdMVEYgPSBKU09OLnBhcnNlKEdMVEZVdGlsLmRlY29kZVRleHQoZ2xURkRhdGEpKTtcblxuICAgIC8vIHJlYWQgYWxsIGJ1ZmZlcnNcbiAgICBjb25zdCBidWZmZXJzOiBBcnJheUJ1ZmZlcltdID0gW107XG4gICAgbGV0IGJ5dGVPZmZzZXQgPSBHTEJfSEVBREVSX0xFTkdUSCArIDIgKiBVSU5UMzJfTEVOR1RIICsgY2h1bmtMZW5ndGg7XG5cbiAgICB3aGlsZSAoYnl0ZU9mZnNldCA8IGhlYWRlci5sZW5ndGgpIHtcbiAgICAgIGNodW5rTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKGJ5dGVPZmZzZXQsIHRydWUpO1xuICAgICAgY2h1bmtUeXBlID0gZGF0YVZpZXcuZ2V0VWludDMyKGJ5dGVPZmZzZXQgKyBVSU5UMzJfTEVOR1RILCB0cnVlKTtcblxuICAgICAgaWYgKGNodW5rVHlwZSAhPT0gR0xCX0NIVU5LX1RZUEVTLkJJTikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBnbGIgY2h1bmsgdHlwZS4gRXhwZWN0ZWQgMHgwMDRFNDk0MiwgZm91bmQgMHhcIiArIGNodW5rVHlwZS50b1N0cmluZygxNikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudE9mZnNldCA9IGJ5dGVPZmZzZXQgKyAyICogVUlOVDMyX0xFTkdUSDtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGdsYi5zbGljZShjdXJyZW50T2Zmc2V0LCBjdXJyZW50T2Zmc2V0ICsgY2h1bmtMZW5ndGgpO1xuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG5cbiAgICAgIGJ5dGVPZmZzZXQgKz0gY2h1bmtMZW5ndGggKyAyICogVUlOVDMyX0xFTkdUSDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2x0ZixcbiAgICAgIGJ1ZmZlcnNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX2Zvcm1hdFJlbGF0aXZlUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEZvciBleGFtcGxlIGlucHV0IGlzIFwiYS9iXCIsIFwiL2EvYlwiLCBcIi4vYS9iXCIsIFwiLi9hLy4vYlwiLCBcIi4vYS8uLi9hL2JcIiwgb3V0cHV0IGlzIFwiYS9iXCJcbiAgICByZXR1cm4gcGF0aFxuICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcbiAgICAgICAgaWYgKGN1ciA9PT0gXCIuLlwiKSBhY2MucG9wKCk7XG4gICAgICAgIGVsc2UgaWYgKGN1ciAhPT0gXCIuXCIpIGFjYy5wdXNoKGN1cik7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSlcbiAgICAgIC5qb2luKFwiL1wiKTtcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIF9hcnJheV9saWtlX3RvX2FycmF5KGFyciwgbGVuKSB7XG4gICAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbn1cbmV4cG9ydCB7IF9hcnJheV9saWtlX3RvX2FycmF5IGFzIF8gfTtcbiIsImltcG9ydCB7IF9hcnJheV9saWtlX3RvX2FycmF5IH0gZnJvbSBcIi4vX2FycmF5X2xpa2VfdG9fYXJyYXkuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIF9hcnJheV93aXRob3V0X2hvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlfbGlrZV90b19hcnJheShhcnIpO1xufVxuZXhwb3J0IHsgX2FycmF5X3dpdGhvdXRfaG9sZXMgYXMgXyB9O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIF9pdGVyYWJsZV90b19hcnJheShpdGVyKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbiAgICB9XG59XG5leHBvcnQgeyBfaXRlcmFibGVfdG9fYXJyYXkgYXMgXyB9O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIF9ub25faXRlcmFibGVfc3ByZWFkKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZXhwb3J0IHsgX25vbl9pdGVyYWJsZV9zcHJlYWQgYXMgXyB9O1xuIiwiaW1wb3J0IHsgX2FycmF5X2xpa2VfdG9fYXJyYXkgfSBmcm9tIFwiLi9fYXJyYXlfbGlrZV90b19hcnJheS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheV9saWtlX3RvX2FycmF5KG8sIG1pbkxlbik7XG5cbiAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG5cbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5X2xpa2VfdG9fYXJyYXkobywgbWluTGVuKTtcbn1cbmV4cG9ydCB7IF91bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheSBhcyBfIH07XG4iLCJpbXBvcnQgeyBfYXJyYXlfd2l0aG91dF9ob2xlcyB9IGZyb20gXCIuL19hcnJheV93aXRob3V0X2hvbGVzLmpzXCI7XG5pbXBvcnQgeyBfaXRlcmFibGVfdG9fYXJyYXkgfSBmcm9tIFwiLi9faXRlcmFibGVfdG9fYXJyYXkuanNcIjtcbmltcG9ydCB7IF9ub25faXRlcmFibGVfc3ByZWFkIH0gZnJvbSBcIi4vX25vbl9pdGVyYWJsZV9zcHJlYWQuanNcIjtcbmltcG9ydCB7IF91bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheSB9IGZyb20gXCIuL191bnN1cHBvcnRlZF9pdGVyYWJsZV90b19hcnJheS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gX3RvX2NvbnN1bWFibGVfYXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheV93aXRob3V0X2hvbGVzKGFycikgfHwgX2l0ZXJhYmxlX3RvX2FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5KGFycikgfHwgX25vbl9pdGVyYWJsZV9zcHJlYWQoKTtcbn1cbmV4cG9ydCB7IF90b19jb25zdW1hYmxlX2FycmF5IGFzIF8gfTtcbiIsImltcG9ydCB7IEFuaW1hdGlvbkNsaXAsIEFzc2V0UHJvbWlzZSwgRW5naW5lT2JqZWN0LCBNYXRlcmlhbCwgTWVzaCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IEV4dGVuc2lvblBhcnNlciB9IGZyb20gXCIuLi9leHRlbnNpb25zL0V4dGVuc2lvblBhcnNlclwiO1xuaW1wb3J0IHsgRXh0ZW5zaW9uU2NoZW1hIH0gZnJvbSBcIi4uL2V4dGVuc2lvbnMvU2NoZW1hXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4vUGFyc2VyQ29udGV4dFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2V4dGVuc2lvblBhcnNlcnM6IFJlY29yZDxzdHJpbmcsIEV4dGVuc2lvblBhcnNlcltdPiA9IHt9O1xuXG4gIHN0YXRpYyBwYXJzZUVuZ2luZVJlc291cmNlKFxuICAgIGV4dGVuc2lvbk5hbWU6IHN0cmluZyxcbiAgICBleHRlbnNpb25TY2hlbWE6IEV4dGVuc2lvblNjaGVtYSxcbiAgICBwYXJzZVJlc291cmNlOiBFbmdpbmVPYmplY3QsXG4gICAgY29udGV4dDogUGFyc2VyQ29udGV4dCxcbiAgICAuLi5leHRyYVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwYXJzZXJzID0gUGFyc2VyLl9leHRlbnNpb25QYXJzZXJzW2V4dGVuc2lvbk5hbWVdO1xuXG4gICAgaWYgKHBhcnNlcnM/Lmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBhcnNlcnNbaV0ucGFyc2VFbmdpbmVSZXNvdXJjZShleHRlbnNpb25TY2hlbWEsIHBhcnNlUmVzb3VyY2UsIGNvbnRleHQsIC4uLmV4dHJhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRW5naW5lUmVzb3VyY2U8VCBleHRlbmRzIEVuZ2luZU9iamVjdD4oXG4gICAgZXh0ZW5zaW9uTmFtZTogc3RyaW5nLFxuICAgIGV4dGVuc2lvblNjaGVtYTogRXh0ZW5zaW9uU2NoZW1hLFxuICAgIGNvbnRleHQ6IFBhcnNlckNvbnRleHQsXG4gICAgLi4uZXh0cmFcbiAgKTogVCB8IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHBhcnNlcnMgPSBQYXJzZXIuX2V4dGVuc2lvblBhcnNlcnNbZXh0ZW5zaW9uTmFtZV07XG5cbiAgICBpZiAocGFyc2Vycz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcGFyc2Vyc1swXS5jcmVhdGVFbmdpbmVSZXNvdXJjZShleHRlbnNpb25TY2hlbWEsIGNvbnRleHQsIC4uLmV4dHJhKSBhcyBUO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBoYXNFeHRlbnNpb25QYXJzZXIoZXh0ZW5zaW9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VycyA9IFBhcnNlci5fZXh0ZW5zaW9uUGFyc2Vyc1tleHRlbnNpb25OYW1lXTtcbiAgICByZXR1cm4gISFwYXJzZXJzPy5sZW5ndGg7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhbGl6ZShleHRlbnNpb25OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZXJzID0gUGFyc2VyLl9leHRlbnNpb25QYXJzZXJzW2V4dGVuc2lvbk5hbWVdO1xuXG4gICAgaWYgKHBhcnNlcnM/Lmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBhcnNlcnNbaV0uaW5pdGlhbGl6ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHN0YXRpYyBfYWRkRXh0ZW5zaW9uUGFyc2VyKGV4dGVuc2lvbk5hbWU6IHN0cmluZywgZXh0ZW5zaW9uUGFyc2VyOiBFeHRlbnNpb25QYXJzZXIpIHtcbiAgICBpZiAoIVBhcnNlci5fZXh0ZW5zaW9uUGFyc2Vyc1tleHRlbnNpb25OYW1lXSkge1xuICAgICAgUGFyc2VyLl9leHRlbnNpb25QYXJzZXJzW2V4dGVuc2lvbk5hbWVdID0gW107XG4gICAgfVxuICAgIFBhcnNlci5fZXh0ZW5zaW9uUGFyc2Vyc1tleHRlbnNpb25OYW1lXS5wdXNoKGV4dGVuc2lvblBhcnNlcik7XG4gIH1cblxuICBhYnN0cmFjdCBwYXJzZShjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogQXNzZXRQcm9taXNlPGFueT4gfCB2b2lkIHwgTWF0ZXJpYWwgfCBBbmltYXRpb25DbGlwIHwgTWVzaDtcbn1cblxuLyoqXG4gKiBEZWNsYXJlIEV4dGVuc2lvblBhcnNlcidzIGRlY29yYXRvci5cbiAqIEBwYXJhbSBleHRlbnNpb25OYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lvbk5hbWU6IHN0cmluZykge1xuICByZXR1cm4gKHBhcnNlcjogbmV3ICgpID0+IEV4dGVuc2lvblBhcnNlcikgPT4ge1xuICAgIGNvbnN0IGV4dGVuc2lvblBhcnNlciA9IG5ldyBwYXJzZXIoKTtcblxuICAgIFBhcnNlci5fYWRkRXh0ZW5zaW9uUGFyc2VyKGV4dGVuc2lvbk5hbWUsIGV4dGVuc2lvblBhcnNlcik7XG4gIH07XG59XG4iLCJpbXBvcnQgeyBFbmdpbmVPYmplY3QgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBFeHRlbnNpb25TY2hlbWEgfSBmcm9tIFwiLi9TY2hlbWFcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEV4dGVuc2lvblBhcnNlciB7XG4gIGluaXRpYWxpemUoKTogdm9pZCB7fVxuXG4gIHBhcnNlRW5naW5lUmVzb3VyY2UoXG4gICAgc2NoZW1hOiBFeHRlbnNpb25TY2hlbWEsXG4gICAgcGFyc2VSZXNvdXJjZTogRW5naW5lT2JqZWN0LFxuICAgIGNvbnRleHQ6IFBhcnNlckNvbnRleHQsXG4gICAgLi4uZXh0cmFcbiAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge31cblxuICBjcmVhdGVFbmdpbmVSZXNvdXJjZShcbiAgICBzY2hlbWE6IEV4dGVuc2lvblNjaGVtYSxcbiAgICBjb250ZXh0OiBQYXJzZXJDb250ZXh0LFxuICAgIC4uLmV4dHJhXG4gICk6IEVuZ2luZU9iamVjdCB8IFByb21pc2U8RW5naW5lT2JqZWN0PiB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiIsImltcG9ydCB7IERSQUNPRGVjb2RlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRyYWNvXCI7XG5pbXBvcnQgeyBHTFRGVXRpbCB9IGZyb20gXCIuLi9HTFRGVXRpbFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJFeHRlbnNpb24gfSBmcm9tIFwiLi4vcGFyc2VyL1BhcnNlclwiO1xuaW1wb3J0IHsgUGFyc2VyQ29udGV4dCB9IGZyb20gXCIuLi9wYXJzZXIvUGFyc2VyQ29udGV4dFwiO1xuaW1wb3J0IHsgSU1lc2hQcmltaXRpdmUgfSBmcm9tIFwiLi4vU2NoZW1hXCI7XG5pbXBvcnQgeyBFeHRlbnNpb25QYXJzZXIgfSBmcm9tIFwiLi9FeHRlbnNpb25QYXJzZXJcIjtcbmltcG9ydCB7IElLSFJEcmFjb01lc2hDb21wcmVzc2lvbiB9IGZyb20gXCIuL1NjaGVtYVwiO1xuXG5AcmVnaXN0ZXJFeHRlbnNpb24oXCJLSFJfZHJhY29fbWVzaF9jb21wcmVzc2lvblwiKVxuY2xhc3MgS0hSX2RyYWNvX21lc2hfY29tcHJlc3Npb24gZXh0ZW5kcyBFeHRlbnNpb25QYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVjb2RlcjogRFJBQ09EZWNvZGVyO1xuXG4gIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgaWYgKCFLSFJfZHJhY29fbWVzaF9jb21wcmVzc2lvbi5fZGVjb2Rlcikge1xuICAgICAgS0hSX2RyYWNvX21lc2hfY29tcHJlc3Npb24uX2RlY29kZXIgPSBuZXcgRFJBQ09EZWNvZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRW5naW5lUmVzb3VyY2Uoc2NoZW1hOiBJS0hSRHJhY29NZXNoQ29tcHJlc3Npb24sIGNvbnRleHQ6IFBhcnNlckNvbnRleHQsIGdsdGZQcmltaXRpdmU6IElNZXNoUHJpbWl0aXZlKSB7XG4gICAgY29uc3QgeyBnbHRmLCBidWZmZXJzIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgYnVmZmVyVmlld3MsIGFjY2Vzc29ycyB9ID0gZ2x0ZjtcbiAgICBjb25zdCB7IGJ1ZmZlclZpZXc6IGJ1ZmZlclZpZXdJbmRleCwgYXR0cmlidXRlczogZ2x0ZkF0dHJpYnV0ZU1hcCB9ID0gc2NoZW1hO1xuXG4gICAgY29uc3QgYXR0cmlidXRlTWFwID0ge307XG4gICAgY29uc3QgYXR0cmlidXRlVHlwZU1hcCA9IHt9O1xuICAgIGZvciAobGV0IGF0dHJpYnV0ZU5hbWUgaW4gZ2x0ZkF0dHJpYnV0ZU1hcCkge1xuICAgICAgYXR0cmlidXRlTWFwW2F0dHJpYnV0ZU5hbWVdID0gZ2x0ZkF0dHJpYnV0ZU1hcFthdHRyaWJ1dGVOYW1lXTtcbiAgICB9XG4gICAgZm9yIChsZXQgYXR0cmlidXRlTmFtZSBpbiBnbHRmUHJpbWl0aXZlLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChnbHRmQXR0cmlidXRlTWFwW2F0dHJpYnV0ZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3JEZWYgPSBhY2Nlc3NvcnNbZ2x0ZlByaW1pdGl2ZS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdXTtcbiAgICAgICAgYXR0cmlidXRlVHlwZU1hcFthdHRyaWJ1dGVOYW1lXSA9IEdMVEZVdGlsLmdldENvbXBvbmVudFR5cGUoYWNjZXNzb3JEZWYuY29tcG9uZW50VHlwZSkubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW5kZXhBY2Nlc3NvciA9IGFjY2Vzc29yc1tnbHRmUHJpbWl0aXZlLmluZGljZXNdO1xuICAgIGNvbnN0IGluZGV4VHlwZSA9IEdMVEZVdGlsLmdldENvbXBvbmVudFR5cGUoaW5kZXhBY2Nlc3Nvci5jb21wb25lbnRUeXBlKS5uYW1lO1xuICAgIGNvbnN0IHRhc2tDb25maWcgPSB7XG4gICAgICBhdHRyaWJ1dGVJRHM6IGF0dHJpYnV0ZU1hcCxcbiAgICAgIGF0dHJpYnV0ZVR5cGVzOiBhdHRyaWJ1dGVUeXBlTWFwLFxuICAgICAgdXNlVW5pcXVlSURzOiB0cnVlLFxuICAgICAgaW5kZXhUeXBlXG4gICAgfTtcbiAgICBjb25zdCBidWZmZXIgPSBHTFRGVXRpbC5nZXRCdWZmZXJWaWV3RGF0YShidWZmZXJWaWV3c1tidWZmZXJWaWV3SW5kZXhdLCBidWZmZXJzKTtcbiAgICByZXR1cm4gS0hSX2RyYWNvX21lc2hfY29tcHJlc3Npb24uX2RlY29kZXIuZGVjb2RlKGJ1ZmZlciwgdGFza0NvbmZpZykudGhlbigocGFyc2VkR2VvbWV0cnkpID0+IHBhcnNlZEdlb21ldHJ5KTtcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIF9pbnN0YW5jZW9mKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKHJpZ2h0ICE9IG51bGwgJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiByaWdodFtTeW1ib2wuaGFzSW5zdGFuY2VdKSB7XG4gICAgICAgIHJldHVybiAhIXJpZ2h0W1N5bWJvbC5oYXNJbnN0YW5jZV0obGVmdCk7XG4gICAgfSBlbHNlIHJldHVybiBsZWZ0IGluc3RhbmNlb2YgcmlnaHQ7XG59XG5leHBvcnQgeyBfaW5zdGFuY2VvZiBhcyBfIH07XG4iLCJpbXBvcnQgeyBEaXJlY3RMaWdodCwgRW50aXR5LCBQb2ludExpZ2h0LCBTcG90TGlnaHQgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyByZWdpc3RlckV4dGVuc2lvbiB9IGZyb20gXCIuLi9wYXJzZXIvUGFyc2VyXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBFeHRlbnNpb25QYXJzZXIgfSBmcm9tIFwiLi9FeHRlbnNpb25QYXJzZXJcIjtcbmltcG9ydCB7IElLSFJMaWdodHNQdW5jdHVhbF9MaWdodCB9IGZyb20gXCIuL1NjaGVtYVwiO1xuXG5AcmVnaXN0ZXJFeHRlbnNpb24oXCJLSFJfbGlnaHRzX3B1bmN0dWFsXCIpXG5jbGFzcyBLSFJfbGlnaHRzX3B1bmN0dWFsIGV4dGVuZHMgRXh0ZW5zaW9uUGFyc2VyIHtcbiAgcGFyc2VFbmdpbmVSZXNvdXJjZShzY2hlbWE6IElLSFJMaWdodHNQdW5jdHVhbF9MaWdodCwgZW50aXR5OiBFbnRpdHksIGNvbnRleHQ6IFBhcnNlckNvbnRleHQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbG9yLCBpbnRlbnNpdHkgPSAxLCB0eXBlLCByYW5nZSwgc3BvdCB9ID0gc2NoZW1hO1xuICAgIGNvbnN0IGdsVEZSZXNvdXJjZSA9IGNvbnRleHQuZ2xURlJlc291cmNlO1xuICAgIGxldCBsaWdodDogRGlyZWN0TGlnaHQgfCBQb2ludExpZ2h0IHwgU3BvdExpZ2h0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZGlyZWN0aW9uYWxcIikge1xuICAgICAgbGlnaHQgPSBlbnRpdHkuYWRkQ29tcG9uZW50KERpcmVjdExpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwicG9pbnRcIikge1xuICAgICAgbGlnaHQgPSBlbnRpdHkuYWRkQ29tcG9uZW50KFBvaW50TGlnaHQpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzcG90XCIpIHtcbiAgICAgIGxpZ2h0ID0gZW50aXR5LmFkZENvbXBvbmVudChTcG90TGlnaHQpO1xuICAgIH1cblxuICAgIGlmIChjb2xvcikge1xuICAgICAgbGlnaHQuY29sb3Iuc2V0KGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIDEpO1xuICAgIH1cblxuICAgIGxpZ2h0LmludGVuc2l0eSA9IGludGVuc2l0eTtcblxuICAgIGlmIChyYW5nZSAmJiAhKGxpZ2h0IGluc3RhbmNlb2YgRGlyZWN0TGlnaHQpKSB7XG4gICAgICBsaWdodC5kaXN0YW5jZSA9IHJhbmdlO1xuICAgIH1cblxuICAgIGlmIChzcG90ICYmIGxpZ2h0IGluc3RhbmNlb2YgU3BvdExpZ2h0KSB7XG4gICAgICBjb25zdCB7IGlubmVyQ29uZUFuZ2xlID0gMCwgb3V0ZXJDb25lQW5nbGUgPSBNYXRoLlBJIC8gNCB9ID0gc3BvdDtcblxuICAgICAgbGlnaHQuYW5nbGUgPSBpbm5lckNvbmVBbmdsZTtcbiAgICAgIGxpZ2h0LnBlbnVtYnJhID0gb3V0ZXJDb25lQW5nbGUgLSBpbm5lckNvbmVBbmdsZTtcbiAgICB9XG5cbiAgICBpZiAoIWdsVEZSZXNvdXJjZS5saWdodHMpIGdsVEZSZXNvdXJjZS5saWdodHMgPSBbXTtcbiAgICBnbFRGUmVzb3VyY2UubGlnaHRzLnB1c2gobGlnaHQpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBc3NldFByb21pc2UsXG4gIExvZ2dlcixcbiAgTWF0ZXJpYWwsXG4gIFBCUk1hdGVyaWFsLFxuICBQQlJTcGVjdWxhck1hdGVyaWFsLFxuICBSZW5kZXJGYWNlLFxuICBUZXh0dXJlQ29vcmRpbmF0ZSxcbiAgVW5saXRNYXRlcmlhbFxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLW1hdGhcIjtcbmltcG9ydCB7IE1hdGVyaWFsQWxwaGFNb2RlIH0gZnJvbSBcIi4uL1NjaGVtYVwiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4vUGFyc2VyXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4vUGFyc2VyQ29udGV4dFwiO1xuXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICAvKiogQGludGVybmFsICovXG4gIHN0YXRpYyBfcGFyc2VUZXh0dXJlVHJhbnNmb3JtKG1hdGVyaWFsOiBNYXRlcmlhbCwgZXh0ZW5zaW9uczogYW55ID0ge30sIGNvbnRleHQ6IFBhcnNlckNvbnRleHQpOiB2b2lkIHtcbiAgICBjb25zdCBzY2hlbWEgPSBleHRlbnNpb25zLktIUl90ZXh0dXJlX3RyYW5zZm9ybTtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBQYXJzZXIucGFyc2VFbmdpbmVSZXNvdXJjZShcIktIUl90ZXh0dXJlX3RyYW5zZm9ybVwiLCBzY2hlbWEsIG1hdGVyaWFsLCBjb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICBwYXJzZShjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogQXNzZXRQcm9taXNlPE1hdGVyaWFsW10+IHtcbiAgICBjb25zdCB7IGdsdGYsIGdsVEZSZXNvdXJjZSB9ID0gY29udGV4dDtcblxuICAgIGNvbnN0IHsgZW5naW5lLCB0ZXh0dXJlcyB9ID0gZ2xURlJlc291cmNlO1xuICAgIGlmICghZ2x0Zi5tYXRlcmlhbHMpIHJldHVybjtcblxuICAgIGNvbnN0IG1hdGVyaWFsc1Byb21pc2VJbmZvID0gY29udGV4dC5tYXRlcmlhbHNQcm9taXNlSW5mbztcbiAgICBjb25zdCBtYXRlcmlhbHM6IE1hdGVyaWFsW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2x0Zi5tYXRlcmlhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZXh0ZW5zaW9ucyA9IHt9LFxuICAgICAgICBwYnJNZXRhbGxpY1JvdWdobmVzcyxcbiAgICAgICAgbm9ybWFsVGV4dHVyZSxcbiAgICAgICAgb2NjbHVzaW9uVGV4dHVyZSxcbiAgICAgICAgZW1pc3NpdmVUZXh0dXJlLFxuICAgICAgICBlbWlzc2l2ZUZhY3RvcixcbiAgICAgICAgYWxwaGFNb2RlLFxuICAgICAgICBhbHBoYUN1dG9mZixcbiAgICAgICAgZG91YmxlU2lkZWQsXG4gICAgICAgIG5hbWUgPSBcIlwiXG4gICAgICB9ID0gZ2x0Zi5tYXRlcmlhbHNbaV07XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgS0hSX21hdGVyaWFsc191bmxpdCxcbiAgICAgICAgS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MsXG4gICAgICAgIEtIUl9tYXRlcmlhbHNfY2xlYXJjb2F0LFxuICAgICAgICBLSFJfbWF0ZXJpYWxzX2lvcixcbiAgICAgICAgT0FTSVNfbWF0ZXJpYWxzX3JlbWFwXG4gICAgICB9ID0gZXh0ZW5zaW9ucztcblxuICAgICAgbGV0IG1hdGVyaWFsOiBVbmxpdE1hdGVyaWFsIHwgUEJSTWF0ZXJpYWwgfCBQQlJTcGVjdWxhck1hdGVyaWFsID0gbnVsbDtcblxuICAgICAgaWYgKEtIUl9tYXRlcmlhbHNfdW5saXQpIHtcbiAgICAgICAgbWF0ZXJpYWwgPSA8VW5saXRNYXRlcmlhbD5QYXJzZXIuY3JlYXRlRW5naW5lUmVzb3VyY2UoXCJLSFJfbWF0ZXJpYWxzX3VubGl0XCIsIEtIUl9tYXRlcmlhbHNfdW5saXQsIGNvbnRleHQpO1xuICAgICAgfSBlbHNlIGlmIChLSFJfbWF0ZXJpYWxzX3BiclNwZWN1bGFyR2xvc3NpbmVzcykge1xuICAgICAgICBtYXRlcmlhbCA9IDxQQlJTcGVjdWxhck1hdGVyaWFsPihcbiAgICAgICAgICBQYXJzZXIuY3JlYXRlRW5naW5lUmVzb3VyY2UoXG4gICAgICAgICAgICBcIktIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzXCIsXG4gICAgICAgICAgICBLSFJfbWF0ZXJpYWxzX3BiclNwZWN1bGFyR2xvc3NpbmVzcyxcbiAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXRlcmlhbCA9IG5ldyBQQlJNYXRlcmlhbChlbmdpbmUpO1xuICAgICAgfVxuXG4gICAgICBtYXRlcmlhbC5uYW1lID0gbmFtZTtcblxuICAgICAgaWYgKEtIUl9tYXRlcmlhbHNfY2xlYXJjb2F0KSB7XG4gICAgICAgIFBhcnNlci5wYXJzZUVuZ2luZVJlc291cmNlKFwiS0hSX21hdGVyaWFsc19jbGVhcmNvYXRcIiwgS0hSX21hdGVyaWFsc19jbGVhcmNvYXQsIG1hdGVyaWFsLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKEtIUl9tYXRlcmlhbHNfaW9yKSB7XG4gICAgICAgIFBhcnNlci5wYXJzZUVuZ2luZVJlc291cmNlKFwiS0hSX21hdGVyaWFsc19pb3JcIiwgS0hSX21hdGVyaWFsc19pb3IsIG1hdGVyaWFsLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBick1ldGFsbGljUm91Z2huZXNzKSB7XG4gICAgICAgIGNvbnN0IHsgYmFzZUNvbG9yRmFjdG9yLCBiYXNlQ29sb3JUZXh0dXJlLCBtZXRhbGxpY0ZhY3Rvciwgcm91Z2huZXNzRmFjdG9yLCBtZXRhbGxpY1JvdWdobmVzc1RleHR1cmUgfSA9XG4gICAgICAgICAgcGJyTWV0YWxsaWNSb3VnaG5lc3M7XG5cbiAgICAgICAgaWYgKGJhc2VDb2xvckZhY3Rvcikge1xuICAgICAgICAgIG1hdGVyaWFsLmJhc2VDb2xvciA9IG5ldyBDb2xvcihcbiAgICAgICAgICAgIENvbG9yLmxpbmVhclRvR2FtbWFTcGFjZShiYXNlQ29sb3JGYWN0b3JbMF0pLFxuICAgICAgICAgICAgQ29sb3IubGluZWFyVG9HYW1tYVNwYWNlKGJhc2VDb2xvckZhY3RvclsxXSksXG4gICAgICAgICAgICBDb2xvci5saW5lYXJUb0dhbW1hU3BhY2UoYmFzZUNvbG9yRmFjdG9yWzJdKSxcbiAgICAgICAgICAgIGJhc2VDb2xvckZhY3RvclszXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhc2VDb2xvclRleHR1cmUpIHtcbiAgICAgICAgICBtYXRlcmlhbC5iYXNlVGV4dHVyZSA9IHRleHR1cmVzW2Jhc2VDb2xvclRleHR1cmUuaW5kZXhdO1xuICAgICAgICAgIE1hdGVyaWFsUGFyc2VyLl9wYXJzZVRleHR1cmVUcmFuc2Zvcm0obWF0ZXJpYWwsIGJhc2VDb2xvclRleHR1cmUuZXh0ZW5zaW9ucywgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUtIUl9tYXRlcmlhbHNfdW5saXQgJiYgIUtIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzKSB7XG4gICAgICAgICAgY29uc3QgbSA9IG1hdGVyaWFsIGFzIFBCUk1hdGVyaWFsO1xuICAgICAgICAgIG0ubWV0YWxsaWMgPSBtZXRhbGxpY0ZhY3RvciA/PyAxO1xuICAgICAgICAgIG0ucm91Z2huZXNzID0gcm91Z2huZXNzRmFjdG9yID8/IDE7XG4gICAgICAgICAgaWYgKG1ldGFsbGljUm91Z2huZXNzVGV4dHVyZSkge1xuICAgICAgICAgICAgbS5yb3VnaG5lc3NNZXRhbGxpY1RleHR1cmUgPSB0ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc1RleHR1cmUuaW5kZXhdO1xuICAgICAgICAgICAgTWF0ZXJpYWxQYXJzZXIuX3BhcnNlVGV4dHVyZVRyYW5zZm9ybShtYXRlcmlhbCwgbWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlLmV4dGVuc2lvbnMsIGNvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIUtIUl9tYXRlcmlhbHNfdW5saXQpIHtcbiAgICAgICAgY29uc3QgbSA9IG1hdGVyaWFsIGFzIFBCUk1hdGVyaWFsIHwgUEJSU3BlY3VsYXJNYXRlcmlhbDtcblxuICAgICAgICBpZiAoZW1pc3NpdmVUZXh0dXJlKSB7XG4gICAgICAgICAgbS5lbWlzc2l2ZVRleHR1cmUgPSB0ZXh0dXJlc1tlbWlzc2l2ZVRleHR1cmUuaW5kZXhdO1xuICAgICAgICAgIE1hdGVyaWFsUGFyc2VyLl9wYXJzZVRleHR1cmVUcmFuc2Zvcm0obWF0ZXJpYWwsIGVtaXNzaXZlVGV4dHVyZS5leHRlbnNpb25zLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbWlzc2l2ZUZhY3Rvcikge1xuICAgICAgICAgIG0uZW1pc3NpdmVDb2xvciA9IG5ldyBDb2xvcihcbiAgICAgICAgICAgIENvbG9yLmxpbmVhclRvR2FtbWFTcGFjZShlbWlzc2l2ZUZhY3RvclswXSksXG4gICAgICAgICAgICBDb2xvci5saW5lYXJUb0dhbW1hU3BhY2UoZW1pc3NpdmVGYWN0b3JbMV0pLFxuICAgICAgICAgICAgQ29sb3IubGluZWFyVG9HYW1tYVNwYWNlKGVtaXNzaXZlRmFjdG9yWzJdKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9ybWFsVGV4dHVyZSkge1xuICAgICAgICAgIGNvbnN0IHsgaW5kZXgsIHNjYWxlIH0gPSBub3JtYWxUZXh0dXJlO1xuICAgICAgICAgIG0ubm9ybWFsVGV4dHVyZSA9IHRleHR1cmVzW2luZGV4XTtcbiAgICAgICAgICBNYXRlcmlhbFBhcnNlci5fcGFyc2VUZXh0dXJlVHJhbnNmb3JtKG1hdGVyaWFsLCBub3JtYWxUZXh0dXJlLmV4dGVuc2lvbnMsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChzY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtLm5vcm1hbFRleHR1cmVJbnRlbnNpdHkgPSBzY2FsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2NjbHVzaW9uVGV4dHVyZSkge1xuICAgICAgICAgIGNvbnN0IHsgaW5kZXgsIHN0cmVuZ3RoLCB0ZXhDb29yZCB9ID0gb2NjbHVzaW9uVGV4dHVyZTtcbiAgICAgICAgICBtLm9jY2x1c2lvblRleHR1cmUgPSB0ZXh0dXJlc1tpbmRleF07XG4gICAgICAgICAgTWF0ZXJpYWxQYXJzZXIuX3BhcnNlVGV4dHVyZVRyYW5zZm9ybShtYXRlcmlhbCwgb2NjbHVzaW9uVGV4dHVyZS5leHRlbnNpb25zLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoc3RyZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbS5vY2NsdXNpb25UZXh0dXJlSW50ZW5zaXR5ID0gc3RyZW5ndGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0ZXhDb29yZCA9PT0gVGV4dHVyZUNvb3JkaW5hdGUuVVYxKSB7XG4gICAgICAgICAgICBtLm9jY2x1c2lvblRleHR1cmVDb29yZCA9IFRleHR1cmVDb29yZGluYXRlLlVWMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRleENvb3JkID4gVGV4dHVyZUNvb3JkaW5hdGUuVVYxKSB7XG4gICAgICAgICAgICBMb2dnZXIud2FybihcIk9jY2x1c2lvbiB0ZXh0dXJlIHV2IGNvb3JkaW5hdGUgbXVzdCBiZSBVVjAgb3IgVVYxLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKE9BU0lTX21hdGVyaWFsc19yZW1hcCkge1xuICAgICAgICBnbHRmLmV4dGVuc2lvbnMgPSBnbHRmLmV4dGVuc2lvbnMgPz8ge307XG4gICAgICAgIGdsdGYuZXh0ZW5zaW9uc1tcIk9BU0lTX21hdGVyaWFsc19yZW1hcFwiXSA9IGdsdGYuZXh0ZW5zaW9uc1tcIk9BU0lTX21hdGVyaWFsc19yZW1hcFwiXSA/PyB7fTtcbiAgICAgICAgZ2x0Zi5leHRlbnNpb25zW1wiT0FTSVNfbWF0ZXJpYWxzX3JlbWFwXCJdW2ldID0gUGFyc2VyLmNyZWF0ZUVuZ2luZVJlc291cmNlKFxuICAgICAgICAgIFwiT0FTSVNfbWF0ZXJpYWxzX3JlbWFwXCIsXG4gICAgICAgICAgT0FTSVNfbWF0ZXJpYWxzX3JlbWFwLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvdWJsZVNpZGVkKSB7XG4gICAgICAgIG1hdGVyaWFsLnJlbmRlckZhY2UgPSBSZW5kZXJGYWNlLkRvdWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdGVyaWFsLnJlbmRlckZhY2UgPSBSZW5kZXJGYWNlLkZyb250O1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGFscGhhTW9kZSkge1xuICAgICAgICBjYXNlIE1hdGVyaWFsQWxwaGFNb2RlLk9QQVFVRTpcbiAgICAgICAgICBtYXRlcmlhbC5pc1RyYW5zcGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWF0ZXJpYWxBbHBoYU1vZGUuQkxFTkQ6XG4gICAgICAgICAgbWF0ZXJpYWwuaXNUcmFuc3BhcmVudCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWF0ZXJpYWxBbHBoYU1vZGUuTUFTSzpcbiAgICAgICAgICBtYXRlcmlhbC5hbHBoYUN1dG9mZiA9IGFscGhhQ3V0b2ZmID8/IDAuNTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbWF0ZXJpYWxzW2ldID0gbWF0ZXJpYWw7XG4gICAgfVxuXG4gICAgZ2xURlJlc291cmNlLm1hdGVyaWFscyA9IG1hdGVyaWFscztcbiAgICBtYXRlcmlhbHNQcm9taXNlSW5mby5yZXNvbHZlKG1hdGVyaWFscyk7XG4gICAgcmV0dXJuIG1hdGVyaWFsc1Byb21pc2VJbmZvLnByb21pc2U7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBCUk1hdGVyaWFsIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHsgTWF0ZXJpYWxQYXJzZXIgfSBmcm9tIFwiLi4vcGFyc2VyL01hdGVyaWFsUGFyc2VyXCI7XG5pbXBvcnQgeyByZWdpc3RlckV4dGVuc2lvbiB9IGZyb20gXCIuLi9wYXJzZXIvUGFyc2VyXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBFeHRlbnNpb25QYXJzZXIgfSBmcm9tIFwiLi9FeHRlbnNpb25QYXJzZXJcIjtcbmltcG9ydCB7IElLSFJNYXRlcmlhbHNDbGVhcmNvYXQgfSBmcm9tIFwiLi9TY2hlbWFcIjtcblxuQHJlZ2lzdGVyRXh0ZW5zaW9uKFwiS0hSX21hdGVyaWFsc19jbGVhcmNvYXRcIilcbmNsYXNzIEtIUl9tYXRlcmlhbHNfY2xlYXJjb2F0IGV4dGVuZHMgRXh0ZW5zaW9uUGFyc2VyIHtcbiAgcGFyc2VFbmdpbmVSZXNvdXJjZShzY2hlbWE6IElLSFJNYXRlcmlhbHNDbGVhcmNvYXQsIG1hdGVyaWFsOiBQQlJNYXRlcmlhbCwgY29udGV4dDogUGFyc2VyQ29udGV4dCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdGV4dHVyZXMgfSA9IGNvbnRleHQuZ2xURlJlc291cmNlO1xuICAgIGNvbnN0IHtcbiAgICAgIGNsZWFyY29hdEZhY3RvciA9IDAsXG4gICAgICBjbGVhcmNvYXRUZXh0dXJlLFxuICAgICAgY2xlYXJjb2F0Um91Z2huZXNzRmFjdG9yID0gMCxcbiAgICAgIGNsZWFyY29hdFJvdWdobmVzc1RleHR1cmUsXG4gICAgICBjbGVhcmNvYXROb3JtYWxUZXh0dXJlXG4gICAgfSA9IHNjaGVtYTtcblxuICAgIG1hdGVyaWFsLmNsZWFyQ29hdCA9IGNsZWFyY29hdEZhY3RvcjtcbiAgICBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgPSBjbGVhcmNvYXRSb3VnaG5lc3NGYWN0b3I7XG5cbiAgICBpZiAoY2xlYXJjb2F0VGV4dHVyZSkge1xuICAgICAgbWF0ZXJpYWwuY2xlYXJDb2F0VGV4dHVyZSA9IHRleHR1cmVzW2NsZWFyY29hdFRleHR1cmUuaW5kZXhdO1xuICAgICAgTWF0ZXJpYWxQYXJzZXIuX3BhcnNlVGV4dHVyZVRyYW5zZm9ybShtYXRlcmlhbCwgY2xlYXJjb2F0VGV4dHVyZS5leHRlbnNpb25zLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKGNsZWFyY29hdFJvdWdobmVzc1RleHR1cmUpIHtcbiAgICAgIG1hdGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzc1RleHR1cmUgPSB0ZXh0dXJlc1tjbGVhcmNvYXRSb3VnaG5lc3NUZXh0dXJlLmluZGV4XTtcbiAgICAgIE1hdGVyaWFsUGFyc2VyLl9wYXJzZVRleHR1cmVUcmFuc2Zvcm0obWF0ZXJpYWwsIGNsZWFyY29hdFJvdWdobmVzc1RleHR1cmUuZXh0ZW5zaW9ucywgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChjbGVhcmNvYXROb3JtYWxUZXh0dXJlKSB7XG4gICAgICBtYXRlcmlhbC5jbGVhckNvYXROb3JtYWxUZXh0dXJlID0gdGV4dHVyZXNbY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZS5pbmRleF07XG4gICAgICBNYXRlcmlhbFBhcnNlci5fcGFyc2VUZXh0dXJlVHJhbnNmb3JtKG1hdGVyaWFsLCBjbGVhcmNvYXROb3JtYWxUZXh0dXJlLmV4dGVuc2lvbnMsIGNvbnRleHQpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgUEJSTWF0ZXJpYWwgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBJS0hSTWF0ZXJpYWxzSW9yIH0gZnJvbSBcIi4vU2NoZW1hXCI7XG5cbmltcG9ydCB7IHJlZ2lzdGVyRXh0ZW5zaW9uIH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJcIjtcbmltcG9ydCB7IFBhcnNlckNvbnRleHQgfSBmcm9tIFwiLi4vcGFyc2VyL1BhcnNlckNvbnRleHRcIjtcbmltcG9ydCB7IEV4dGVuc2lvblBhcnNlciB9IGZyb20gXCIuL0V4dGVuc2lvblBhcnNlclwiO1xuXG5AcmVnaXN0ZXJFeHRlbnNpb24oXCJLSFJfbWF0ZXJpYWxzX2lvclwiKVxuY2xhc3MgS0hSX21hdGVyaWFsc19pb3IgZXh0ZW5kcyBFeHRlbnNpb25QYXJzZXIge1xuICBwYXJzZUVuZ2luZVJlc291cmNlKHNjaGVtYTogSUtIUk1hdGVyaWFsc0lvciwgbWF0ZXJpYWw6IFBCUk1hdGVyaWFsLCBjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgeyBpb3IgPSAxLjUgfSA9IHNjaGVtYTtcblxuICAgIG1hdGVyaWFsLmlvciA9IGlvcjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUEJSU3BlY3VsYXJNYXRlcmlhbCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtbWF0aFwiO1xuaW1wb3J0IHsgTWF0ZXJpYWxQYXJzZXIgfSBmcm9tIFwiLi4vcGFyc2VyL01hdGVyaWFsUGFyc2VyXCI7XG5pbXBvcnQgeyByZWdpc3RlckV4dGVuc2lvbiB9IGZyb20gXCIuLi9wYXJzZXIvUGFyc2VyXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBFeHRlbnNpb25QYXJzZXIgfSBmcm9tIFwiLi9FeHRlbnNpb25QYXJzZXJcIjtcbmltcG9ydCB7IElLSFJNYXRlcmlhbHNQYnJTcGVjdWxhckdsb3NzaW5lc3MgfSBmcm9tIFwiLi9TY2hlbWFcIjtcblxuQHJlZ2lzdGVyRXh0ZW5zaW9uKFwiS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3NcIilcbmNsYXNzIEtIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzIGV4dGVuZHMgRXh0ZW5zaW9uUGFyc2VyIHtcbiAgY3JlYXRlRW5naW5lUmVzb3VyY2Uoc2NoZW1hOiBJS0hSTWF0ZXJpYWxzUGJyU3BlY3VsYXJHbG9zc2luZXNzLCBjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogUEJSU3BlY3VsYXJNYXRlcmlhbCB7XG4gICAgY29uc3QgeyBlbmdpbmUsIHRleHR1cmVzIH0gPSBjb250ZXh0LmdsVEZSZXNvdXJjZTtcbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBQQlJTcGVjdWxhck1hdGVyaWFsKGVuZ2luZSk7XG4gICAgY29uc3QgeyBkaWZmdXNlRmFjdG9yLCBkaWZmdXNlVGV4dHVyZSwgc3BlY3VsYXJGYWN0b3IsIGdsb3NzaW5lc3NGYWN0b3IsIHNwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUgfSA9IHNjaGVtYTtcblxuICAgIGlmIChkaWZmdXNlRmFjdG9yKSB7XG4gICAgICBtYXRlcmlhbC5iYXNlQ29sb3IgPSBuZXcgQ29sb3IoXG4gICAgICAgIENvbG9yLmxpbmVhclRvR2FtbWFTcGFjZShkaWZmdXNlRmFjdG9yWzBdKSxcbiAgICAgICAgQ29sb3IubGluZWFyVG9HYW1tYVNwYWNlKGRpZmZ1c2VGYWN0b3JbMV0pLFxuICAgICAgICBDb2xvci5saW5lYXJUb0dhbW1hU3BhY2UoZGlmZnVzZUZhY3RvclsyXSksXG4gICAgICAgIGRpZmZ1c2VGYWN0b3JbM11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRpZmZ1c2VUZXh0dXJlKSB7XG4gICAgICBtYXRlcmlhbC5iYXNlVGV4dHVyZSA9IHRleHR1cmVzW2RpZmZ1c2VUZXh0dXJlLmluZGV4XTtcbiAgICAgIE1hdGVyaWFsUGFyc2VyLl9wYXJzZVRleHR1cmVUcmFuc2Zvcm0obWF0ZXJpYWwsIGRpZmZ1c2VUZXh0dXJlLmV4dGVuc2lvbnMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChzcGVjdWxhckZhY3Rvcikge1xuICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG5ldyBDb2xvcihcbiAgICAgICAgQ29sb3IubGluZWFyVG9HYW1tYVNwYWNlKHNwZWN1bGFyRmFjdG9yWzBdKSxcbiAgICAgICAgQ29sb3IubGluZWFyVG9HYW1tYVNwYWNlKHNwZWN1bGFyRmFjdG9yWzFdKSxcbiAgICAgICAgQ29sb3IubGluZWFyVG9HYW1tYVNwYWNlKHNwZWN1bGFyRmFjdG9yWzJdKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZ2xvc3NpbmVzc0ZhY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXRlcmlhbC5nbG9zc2luZXNzID0gZ2xvc3NpbmVzc0ZhY3RvcjtcbiAgICB9XG5cbiAgICBpZiAoc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZSkge1xuICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZSA9IHRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUuaW5kZXhdO1xuICAgICAgTWF0ZXJpYWxQYXJzZXIuX3BhcnNlVGV4dHVyZVRyYW5zZm9ybShtYXRlcmlhbCwgc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZS5leHRlbnNpb25zLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0ZXJpYWw7XG4gIH1cbn1cbiIsImltcG9ydCB7IFVubGl0TWF0ZXJpYWwgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyByZWdpc3RlckV4dGVuc2lvbiB9IGZyb20gXCIuLi9wYXJzZXIvUGFyc2VyXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBFeHRlbnNpb25QYXJzZXIgfSBmcm9tIFwiLi9FeHRlbnNpb25QYXJzZXJcIjtcbmltcG9ydCB7IElLSFJNYXRlcmlhbHNVbmxpdCB9IGZyb20gXCIuL1NjaGVtYVwiO1xuXG5AcmVnaXN0ZXJFeHRlbnNpb24oXCJLSFJfbWF0ZXJpYWxzX3VubGl0XCIpXG5jbGFzcyBLSFJfbWF0ZXJpYWxzX3VubGl0IGV4dGVuZHMgRXh0ZW5zaW9uUGFyc2VyIHtcbiAgY3JlYXRlRW5naW5lUmVzb3VyY2Uoc2NoZW1hOiBJS0hSTWF0ZXJpYWxzVW5saXQsIGNvbnRleHQ6IFBhcnNlckNvbnRleHQpOiBVbmxpdE1hdGVyaWFsIHtcbiAgICBjb25zdCB7IGVuZ2luZSB9ID0gY29udGV4dC5nbFRGUmVzb3VyY2U7XG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVW5saXRNYXRlcmlhbChlbmdpbmUpO1xuXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xuICB9XG59XG4iLCJpbXBvcnQgeyBSZW5kZXJlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IHJlZ2lzdGVyRXh0ZW5zaW9uIH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJcIjtcbmltcG9ydCB7IFBhcnNlckNvbnRleHQgfSBmcm9tIFwiLi4vcGFyc2VyL1BhcnNlckNvbnRleHRcIjtcbmltcG9ydCB7IEV4dGVuc2lvblBhcnNlciB9IGZyb20gXCIuL0V4dGVuc2lvblBhcnNlclwiO1xuaW1wb3J0IHsgSUtIUk1hdGVyaWFsVmFyaWFudHNfTWFwcGluZyB9IGZyb20gXCIuL1NjaGVtYVwiO1xuXG5AcmVnaXN0ZXJFeHRlbnNpb24oXCJLSFJfbWF0ZXJpYWxzX3ZhcmlhbnRzXCIpXG5jbGFzcyBLSFJfbWF0ZXJpYWxzX3ZhcmlhbnRzIGV4dGVuZHMgRXh0ZW5zaW9uUGFyc2VyIHtcbiAgcGFyc2VFbmdpbmVSZXNvdXJjZShzY2hlbWE6IElLSFJNYXRlcmlhbFZhcmlhbnRzX01hcHBpbmcsIHJlbmRlcmVyOiBSZW5kZXJlciwgY29udGV4dDogUGFyc2VyQ29udGV4dCk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGdsdGY6IHtcbiAgICAgICAgZXh0ZW5zaW9uczoge1xuICAgICAgICAgIEtIUl9tYXRlcmlhbHNfdmFyaWFudHM6IHsgdmFyaWFudHM6IHZhcmlhbnROYW1lcyB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnbFRGUmVzb3VyY2VcbiAgICB9ID0gY29udGV4dDtcbiAgICBjb25zdCB7IG1hcHBpbmdzIH0gPSBzY2hlbWE7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB7IG1hdGVyaWFsLCB2YXJpYW50cyB9ID0gbWFwcGluZ3NbaV07XG4gICAgICBpZiAoIWdsVEZSZXNvdXJjZS52YXJpYW50cykgZ2xURlJlc291cmNlLnZhcmlhbnRzID0gW107XG4gICAgICBnbFRGUmVzb3VyY2UudmFyaWFudHMucHVzaCh7XG4gICAgICAgIHJlbmRlcmVyLFxuICAgICAgICBtYXRlcmlhbDogZ2xURlJlc291cmNlLm1hdGVyaWFsc1ttYXRlcmlhbF0sXG4gICAgICAgIHZhcmlhbnRzOiB2YXJpYW50cy5tYXAoKGluZGV4KSA9PiB2YXJpYW50TmFtZXNbaW5kZXhdLm5hbWUpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IHJlZ2lzdGVyRXh0ZW5zaW9uIH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJcIjtcbmltcG9ydCB7IEV4dGVuc2lvblBhcnNlciB9IGZyb20gXCIuL0V4dGVuc2lvblBhcnNlclwiO1xuXG5AcmVnaXN0ZXJFeHRlbnNpb24oXCJLSFJfbWVzaF9xdWFudGl6YXRpb25cIilcbmNsYXNzIEtIUl9tZXNoX3F1YW50aXphdGlvbiBleHRlbmRzIEV4dGVuc2lvblBhcnNlciB7fVxuIiwiaW1wb3J0IHsgTG9nZ2VyLCBQQlJCYXNlTWF0ZXJpYWwsIFVubGl0TWF0ZXJpYWwgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyByZWdpc3RlckV4dGVuc2lvbiB9IGZyb20gXCIuLi9wYXJzZXIvUGFyc2VyXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBFeHRlbnNpb25QYXJzZXIgfSBmcm9tIFwiLi9FeHRlbnNpb25QYXJzZXJcIjtcbmltcG9ydCB7IElLSFJUZXh0dXJlVHJhbnNmb3JtIH0gZnJvbSBcIi4vU2NoZW1hXCI7XG5cbkByZWdpc3RlckV4dGVuc2lvbihcIktIUl90ZXh0dXJlX3RyYW5zZm9ybVwiKVxuY2xhc3MgS0hSX3RleHR1cmVfdHJhbnNmb3JtIGV4dGVuZHMgRXh0ZW5zaW9uUGFyc2VyIHtcbiAgcGFyc2VFbmdpbmVSZXNvdXJjZShcbiAgICBzY2hlbWE6IElLSFJUZXh0dXJlVHJhbnNmb3JtLFxuICAgIG1hdGVyaWFsOiBQQlJCYXNlTWF0ZXJpYWwgfCBVbmxpdE1hdGVyaWFsLFxuICAgIGNvbnRleHQ6IFBhcnNlckNvbnRleHRcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgeyBvZmZzZXQsIHJvdGF0aW9uLCBzY2FsZSwgdGV4Q29vcmQgfSA9IHNjaGVtYTtcblxuICAgIGlmIChvZmZzZXQpIHtcbiAgICAgIG1hdGVyaWFsLnRpbGluZ09mZnNldC56ID0gb2Zmc2V0WzBdO1xuICAgICAgbWF0ZXJpYWwudGlsaW5nT2Zmc2V0LncgPSBvZmZzZXRbMV07XG4gICAgfVxuXG4gICAgaWYgKHNjYWxlKSB7XG4gICAgICBtYXRlcmlhbC50aWxpbmdPZmZzZXQueCA9IHNjYWxlWzBdO1xuICAgICAgbWF0ZXJpYWwudGlsaW5nT2Zmc2V0LnkgPSBzY2FsZVsxXTtcbiAgICB9XG5cbiAgICBpZiAocm90YXRpb24pIHtcbiAgICAgIExvZ2dlci53YXJuKFwicm90YXRpb24gaW4gS0hSX3RleHR1cmVfdHJhbnNmb3JtIGlzIG5vdCBzdXBwb3J0ZWQgbm93XCIpO1xuICAgIH1cblxuICAgIGlmICh0ZXhDb29yZCkge1xuICAgICAgTG9nZ2VyLndhcm4oXCJ0ZXhDb29yZCBpbiBLSFJfdGV4dHVyZV90cmFuc2Zvcm0gaXMgbm90IHN1cHBvcnRlZCBub3dcIik7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IHJlZ2lzdGVyRXh0ZW5zaW9uIH0gZnJvbSBcIi4uL3BhcnNlci9QYXJzZXJcIjtcbmltcG9ydCB7IFBhcnNlckNvbnRleHQgfSBmcm9tIFwiLi4vcGFyc2VyL1BhcnNlckNvbnRleHRcIjtcbmltcG9ydCB7IEV4dGVuc2lvblBhcnNlciB9IGZyb20gXCIuL0V4dGVuc2lvblBhcnNlclwiO1xuaW1wb3J0IHsgSUdhbGFjZWFuTWF0ZXJpYWxSZW1hcCB9IGZyb20gXCIuL1NjaGVtYVwiO1xuXG5AcmVnaXN0ZXJFeHRlbnNpb24oXCJPQVNJU19tYXRlcmlhbHNfcmVtYXBcIilcbmNsYXNzIEdhbGFjZWFuTWF0ZXJpYWxzUmVtYXAgZXh0ZW5kcyBFeHRlbnNpb25QYXJzZXIge1xuICBjcmVhdGVFbmdpbmVSZXNvdXJjZShzY2hlbWE6IElHYWxhY2Vhbk1hdGVyaWFsUmVtYXAsIGNvbnRleHQ6IFBhcnNlckNvbnRleHQpOiBQcm9taXNlPE1hdGVyaWFsPiB7XG4gICAgY29uc3QgeyBlbmdpbmUgfSA9IGNvbnRleHQuZ2xURlJlc291cmNlO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gZW5naW5lLnJlc291cmNlTWFuYWdlci5nZXRSZXNvdXJjZUJ5UmVmPE1hdGVyaWFsPihzY2hlbWEpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBfdW5zdXBwb3J0ZWRfaXRlcmFibGVfdG9fYXJyYXkgfSBmcm9tIFwiLi9fdW5zdXBwb3J0ZWRfaXRlcmFibGVfdG9fYXJyYXkuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIF9jcmVhdGVfZm9yX29mX2l0ZXJhdG9yX2hlbHBlcl9sb29zZShvLCBhbGxvd0FycmF5TGlrZSkge1xuICAgIHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdO1xuXG4gICAgaWYgKGl0KSByZXR1cm4gKGl0ID0gaXQuY2FsbChvKSkubmV4dC5iaW5kKGl0KTtcbiAgICAvLyBGYWxsYmFjayBmb3IgZW5naW5lcyB3aXRob3V0IHN5bWJvbCBzdXBwb3J0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkX2l0ZXJhYmxlX3RvX2FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoaXQpIG8gPSBpdDtcblxuICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5leHBvcnQgeyBfY3JlYXRlX2Zvcl9vZl9pdGVyYXRvcl9oZWxwZXJfbG9vc2UgYXMgXyB9O1xuIiwiaW1wb3J0IHtcbiAgQW5pbWF0aW9uQ2xpcCxcbiAgQW5pbWF0aW9uRmxvYXRBcnJheUN1cnZlLFxuICBBbmltYXRpb25RdWF0ZXJuaW9uQ3VydmUsXG4gIEFuaW1hdGlvblZlY3RvcjNDdXJ2ZSxcbiAgQXNzZXRQcm9taXNlLFxuICBDb21wb25lbnQsXG4gIEVudGl0eSxcbiAgSW50ZXJwb2xhdGlvblR5cGUsXG4gIEtleWZyYW1lLFxuICBTa2lubmVkTWVzaFJlbmRlcmVyLFxuICBUcmFuc2Zvcm0sXG4gIFR5cGVkQXJyYXlcbn0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMywgVmVjdG9yNCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLW1hdGhcIjtcbmltcG9ydCB7IEdMVEZVdGlsIH0gZnJvbSBcIi4uL0dMVEZVdGlsXCI7XG5pbXBvcnQgeyBBY2Nlc3NvclR5cGUsIEFuaW1hdGlvbkNoYW5uZWxUYXJnZXRQYXRoLCBBbmltYXRpb25TYW1wbGVySW50ZXJwb2xhdGlvbiwgSUFuaW1hdGlvbkNoYW5uZWwgfSBmcm9tIFwiLi4vU2NoZW1hXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi9QYXJzZXJcIjtcbmltcG9ydCB7IFBhcnNlckNvbnRleHQgfSBmcm9tIFwiLi9QYXJzZXJDb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb25QYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwYXJzZShjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogQXNzZXRQcm9taXNlPEFuaW1hdGlvbkNsaXBbXT4ge1xuICAgIGNvbnN0IHsgZ2x0ZiwgYnVmZmVycywgZ2xURlJlc291cmNlIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgZW50aXRpZXMgfSA9IGdsVEZSZXNvdXJjZTtcbiAgICBjb25zdCB7IGFuaW1hdGlvbnMsIGFjY2Vzc29ycyB9ID0gZ2x0ZjtcbiAgICBpZiAoIWFuaW1hdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYW5pbWF0aW9uQ2xpcHNQcm9taXNlSW5mbyA9IGNvbnRleHQuYW5pbWF0aW9uQ2xpcHNQcm9taXNlSW5mbztcblxuICAgIGNvbnN0IGFuaW1hdGlvbkNsaXBDb3VudCA9IGFuaW1hdGlvbnMubGVuZ3RoO1xuICAgIGNvbnN0IGFuaW1hdGlvbkNsaXBzID0gbmV3IEFycmF5PEFuaW1hdGlvbkNsaXA+KGFuaW1hdGlvbkNsaXBDb3VudCk7XG4gICAgY29uc3QgYW5pbWF0aW9uc0luZGljZXMgPSBuZXcgQXJyYXk8e1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICB9PihhbmltYXRpb25DbGlwQ291bnQpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmltYXRpb25DbGlwQ291bnQ7IGkrKykge1xuICAgICAgY29uc3QgZ2x0ZkFuaW1hdGlvbiA9IGFuaW1hdGlvbnNbaV07XG4gICAgICBjb25zdCB7IGNoYW5uZWxzLCBzYW1wbGVycywgbmFtZSA9IGBBbmltYXRpb25DbGlwJHtpfWAgfSA9IGdsdGZBbmltYXRpb247XG4gICAgICBjb25zdCBhbmltYXRpb25DbGlwID0gbmV3IEFuaW1hdGlvbkNsaXAobmFtZSk7XG4gICAgICBjb25zdCBzYW1wbGVEYXRhQ29sbGVjdGlvbiA9IG5ldyBBcnJheTxTYW1wbGVEYXRhPigpO1xuXG4gICAgICBsZXQgZHVyYXRpb24gPSAtMTtcblxuICAgICAgLy8gcGFyc2Ugc2FtcGxlcnNcbiAgICAgIGZvciAobGV0IGogPSAwLCBtID0gc2FtcGxlcnMubGVuZ3RoOyBqIDwgbTsgaisrKSB7XG4gICAgICAgIGNvbnN0IGdsdGZTYW1wbGVyID0gc2FtcGxlcnNbal07XG4gICAgICAgIGNvbnN0IGlucHV0QWNjZXNzb3IgPSBhY2Nlc3NvcnNbZ2x0ZlNhbXBsZXIuaW5wdXRdO1xuICAgICAgICBjb25zdCBvdXRwdXRBY2Nlc3NvciA9IGFjY2Vzc29yc1tnbHRmU2FtcGxlci5vdXRwdXRdO1xuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gR0xURlV0aWwuZ2V0QWNjZXNzb3JCdWZmZXIoY29udGV4dCwgZ2x0ZiwgaW5wdXRBY2Nlc3NvcikuZGF0YTtcbiAgICAgICAgbGV0IG91dHB1dCA9IEdMVEZVdGlsLmdldEFjY2Vzc29yQnVmZmVyKGNvbnRleHQsIGdsdGYsIG91dHB1dEFjY2Vzc29yKS5kYXRhO1xuXG4gICAgICAgIGlmIChvdXRwdXRBY2Nlc3Nvci5ub3JtYWxpemVkKSB7XG4gICAgICAgICAgY29uc3Qgc2NhbGUgPSBHTFRGVXRpbC5nZXROb3JtYWxpemVkQ29tcG9uZW50U2NhbGUob3V0cHV0QWNjZXNzb3IuY29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgY29uc3Qgc2NhbGVkID0gbmV3IEZsb2F0MzJBcnJheShvdXRwdXQubGVuZ3RoKTtcbiAgICAgICAgICBmb3IgKGxldCBrID0gMCwgdiA9IG91dHB1dC5sZW5ndGg7IGsgPCB2OyBrKyspIHtcbiAgICAgICAgICAgIHNjYWxlZFtrXSA9IG91dHB1dFtrXSAqIHNjYWxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXQgPSBzY2FsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdXRwdXRTdHJpZGUgPSBvdXRwdXQubGVuZ3RoIC8gaW5wdXQubGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGludGVycG9sYXRpb24gPSBnbHRmU2FtcGxlci5pbnRlcnBvbGF0aW9uID8/IEFuaW1hdGlvblNhbXBsZXJJbnRlcnBvbGF0aW9uLkxpbmVhcjtcbiAgICAgICAgbGV0IHNhbXBsZXJJbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZTtcbiAgICAgICAgc3dpdGNoIChpbnRlcnBvbGF0aW9uKSB7XG4gICAgICAgICAgY2FzZSBBbmltYXRpb25TYW1wbGVySW50ZXJwb2xhdGlvbi5DdWJpY1NwaW5lOlxuICAgICAgICAgICAgc2FtcGxlckludGVycG9sYXRpb24gPSBJbnRlcnBvbGF0aW9uVHlwZS5DdWJpY1NwaW5lO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBBbmltYXRpb25TYW1wbGVySW50ZXJwb2xhdGlvbi5TdGVwOlxuICAgICAgICAgICAgc2FtcGxlckludGVycG9sYXRpb24gPSBJbnRlcnBvbGF0aW9uVHlwZS5TdGVwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBBbmltYXRpb25TYW1wbGVySW50ZXJwb2xhdGlvbi5MaW5lYXI6XG4gICAgICAgICAgICBzYW1wbGVySW50ZXJwb2xhdGlvbiA9IEludGVycG9sYXRpb25UeXBlLkxpbmVhcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF4VGltZSA9IGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobWF4VGltZSA+IGR1cmF0aW9uKSB7XG4gICAgICAgICAgZHVyYXRpb24gPSBtYXhUaW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgc2FtcGxlRGF0YUNvbGxlY3Rpb24ucHVzaCh7XG4gICAgICAgICAgdHlwZTogb3V0cHV0QWNjZXNzb3IudHlwZSxcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uOiBzYW1wbGVySW50ZXJwb2xhdGlvbixcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgb3V0cHV0U2l6ZTogb3V0cHV0U3RyaWRlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gMCwgbSA9IGNoYW5uZWxzLmxlbmd0aDsgaiA8IG07IGorKykge1xuICAgICAgICBjb25zdCBnbHRmQ2hhbm5lbCA9IGNoYW5uZWxzW2pdO1xuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gZ2x0ZkNoYW5uZWw7XG5cbiAgICAgICAgY29uc3QgY2hhbm5lbFRhcmdldEVudGl0eSA9IGVudGl0aWVzW3RhcmdldC5ub2RlXTtcbiAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IFwiXCI7XG4gICAgICAgIGxldCBlbnRpdHkgPSBjaGFubmVsVGFyZ2V0RW50aXR5O1xuICAgICAgICB3aGlsZSAoZW50aXR5LnBhcmVudCkge1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aCA9PT0gXCJcIiA/IGAke2VudGl0eS5uYW1lfWAgOiBgJHtlbnRpdHkubmFtZX0vJHtyZWxhdGl2ZVBhdGh9YDtcbiAgICAgICAgICBlbnRpdHkgPSBlbnRpdHkucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IENvbXBvbmVudFR5cGU6IG5ldyAoZW50aXR5OiBFbnRpdHkpID0+IENvbXBvbmVudDtcbiAgICAgICAgbGV0IHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgICBzd2l0Y2ggKHRhcmdldC5wYXRoKSB7XG4gICAgICAgICAgY2FzZSBBbmltYXRpb25DaGFubmVsVGFyZ2V0UGF0aC5UUkFOU0xBVElPTjpcbiAgICAgICAgICAgIENvbXBvbmVudFR5cGUgPSBUcmFuc2Zvcm07XG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBcInBvc2l0aW9uXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEFuaW1hdGlvbkNoYW5uZWxUYXJnZXRQYXRoLlJPVEFUSU9OOlxuICAgICAgICAgICAgQ29tcG9uZW50VHlwZSA9IFRyYW5zZm9ybTtcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IFwicm90YXRpb25RdWF0ZXJuaW9uXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEFuaW1hdGlvbkNoYW5uZWxUYXJnZXRQYXRoLlNDQUxFOlxuICAgICAgICAgICAgQ29tcG9uZW50VHlwZSA9IFRyYW5zZm9ybTtcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IFwic2NhbGVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldFBhdGguV0VJR0hUUzpcbiAgICAgICAgICAgIENvbXBvbmVudFR5cGUgPSBTa2lubmVkTWVzaFJlbmRlcmVyO1xuICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gXCJibGVuZFNoYXBlV2VpZ2h0c1wiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnZlID0gdGhpcy5fYWRkQ3VydmUodGFyZ2V0LnBhdGgsIGdsdGZDaGFubmVsLCBzYW1wbGVEYXRhQ29sbGVjdGlvbik7XG4gICAgICAgIGFuaW1hdGlvbkNsaXAuYWRkQ3VydmVCaW5kaW5nKHJlbGF0aXZlUGF0aCwgQ29tcG9uZW50VHlwZSwgcHJvcGVydHlOYW1lLCBjdXJ2ZSk7XG4gICAgICB9XG5cbiAgICAgIGFuaW1hdGlvbkNsaXBzW2ldID0gYW5pbWF0aW9uQ2xpcDtcbiAgICAgIGFuaW1hdGlvbnNJbmRpY2VzW2ldID0ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBpbmRleDogaVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBnbFRGUmVzb3VyY2UuYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkNsaXBzO1xuICAgIC8vIEB0cy1pZ25vcmUgZm9yIGVkaXRvclxuICAgIGdsVEZSZXNvdXJjZS5fYW5pbWF0aW9uc0luZGljZXMgPSBhbmltYXRpb25zSW5kaWNlcztcblxuICAgIGFuaW1hdGlvbkNsaXBzUHJvbWlzZUluZm8ucmVzb2x2ZShhbmltYXRpb25DbGlwcyk7XG4gICAgcmV0dXJuIGFuaW1hdGlvbkNsaXBzUHJvbWlzZUluZm8ucHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZEN1cnZlKFxuICAgIGFuaW1hdGlvbmNoYW5uZWxUYXJnZXRQYXRoOiBBbmltYXRpb25DaGFubmVsVGFyZ2V0UGF0aCxcbiAgICBnbHRmQ2hhbm5lbDogSUFuaW1hdGlvbkNoYW5uZWwsXG4gICAgc2FtcGxlRGF0YUNvbGxlY3Rpb246IFNhbXBsZURhdGFbXVxuICApIHtcbiAgICBjb25zdCBzYW1wbGVEYXRhID0gc2FtcGxlRGF0YUNvbGxlY3Rpb25bZ2x0ZkNoYW5uZWwuc2FtcGxlcl07XG4gICAgY29uc3QgeyBpbnB1dCwgb3V0cHV0LCBvdXRwdXRTaXplIH0gPSBzYW1wbGVEYXRhO1xuXG4gICAgc3dpdGNoIChhbmltYXRpb25jaGFubmVsVGFyZ2V0UGF0aCkge1xuICAgICAgY2FzZSBBbmltYXRpb25DaGFubmVsVGFyZ2V0UGF0aC5UUkFOU0xBVElPTjpcbiAgICAgIGNhc2UgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldFBhdGguU0NBTEU6IHtcbiAgICAgICAgY29uc3QgY3VydmUgPSBuZXcgQW5pbWF0aW9uVmVjdG9yM0N1cnZlKCk7XG4gICAgICAgIGNvbnN0IGludGVycG9sYXRpb24gPSAoY3VydmUuaW50ZXJwb2xhdGlvbiA9IHNhbXBsZURhdGEuaW50ZXJwb2xhdGlvbik7XG5cbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBuID0gaW5wdXQubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2V5ZnJhbWUgPSBuZXcgS2V5ZnJhbWU8VmVjdG9yMz4oKTtcbiAgICAgICAgICBrZXlmcmFtZS50aW1lID0gaW5wdXRbaV07XG4gICAgICAgICAgaWYgKGludGVycG9sYXRpb24gPT09IEludGVycG9sYXRpb25UeXBlLkN1YmljU3BpbmUpIHtcbiAgICAgICAgICAgIGtleWZyYW1lLmluVGFuZ2VudCA9IG5ldyBWZWN0b3IzKG91dHB1dFtvZmZzZXQrK10sIG91dHB1dFtvZmZzZXQrK10sIG91dHB1dFtvZmZzZXQrK10pO1xuICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUgPSBuZXcgVmVjdG9yMyhvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdKTtcbiAgICAgICAgICAgIGtleWZyYW1lLm91dFRhbmdlbnQgPSBuZXcgVmVjdG9yMyhvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUgPSBuZXcgVmVjdG9yMyhvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VydmUuYWRkS2V5KGtleWZyYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VydmU7XG4gICAgICB9XG4gICAgICBjYXNlIEFuaW1hdGlvbkNoYW5uZWxUYXJnZXRQYXRoLlJPVEFUSU9OOiB7XG4gICAgICAgIGNvbnN0IGN1cnZlID0gbmV3IEFuaW1hdGlvblF1YXRlcm5pb25DdXJ2ZSgpO1xuICAgICAgICBjb25zdCBpbnRlcnBvbGF0aW9uID0gKGN1cnZlLmludGVycG9sYXRpb24gPSBzYW1wbGVEYXRhLmludGVycG9sYXRpb24pO1xuXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbiA9IGlucHV0Lmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGtleWZyYW1lID0gbmV3IEtleWZyYW1lPFF1YXRlcm5pb24+KCk7XG4gICAgICAgICAga2V5ZnJhbWUudGltZSA9IGlucHV0W2ldO1xuICAgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uID09PSBJbnRlcnBvbGF0aW9uVHlwZS5DdWJpY1NwaW5lKSB7XG4gICAgICAgICAgICBrZXlmcmFtZS5pblRhbmdlbnQgPSBuZXcgVmVjdG9yNChvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdLCBvdXRwdXRbb2Zmc2V0KytdKTtcbiAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlID0gbmV3IFF1YXRlcm5pb24ob3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSk7XG4gICAgICAgICAgICBrZXlmcmFtZS5vdXRUYW5nZW50ID0gbmV3IFZlY3RvcjQob3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlID0gbmV3IFF1YXRlcm5pb24ob3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSwgb3V0cHV0W29mZnNldCsrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnZlLmFkZEtleShrZXlmcmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnZlO1xuICAgICAgfVxuICAgICAgY2FzZSBBbmltYXRpb25DaGFubmVsVGFyZ2V0UGF0aC5XRUlHSFRTOiB7XG4gICAgICAgIGNvbnN0IGN1cnZlID0gbmV3IEFuaW1hdGlvbkZsb2F0QXJyYXlDdXJ2ZSgpO1xuICAgICAgICBjdXJ2ZS5pbnRlcnBvbGF0aW9uID0gc2FtcGxlRGF0YS5pbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbiA9IGlucHV0Lmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGtleWZyYW1lID0gbmV3IEtleWZyYW1lPEZsb2F0MzJBcnJheT4oKTtcbiAgICAgICAgICBrZXlmcmFtZS50aW1lID0gaW5wdXRbaV07XG4gICAgICAgICAgaWYgKGN1cnZlLmludGVycG9sYXRpb24gPT09IEludGVycG9sYXRpb25UeXBlLkN1YmljU3BpbmUpIHtcbiAgICAgICAgICAgIGtleWZyYW1lLmluVGFuZ2VudCA9IEFycmF5LmZyb20ob3V0cHV0LnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgb3V0cHV0U2l6ZSkpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IG91dHB1dFNpemU7XG4gICAgICAgICAgICBrZXlmcmFtZS52YWx1ZSA9IG91dHB1dC5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIG91dHB1dFNpemUpIGFzIEZsb2F0MzJBcnJheTtcbiAgICAgICAgICAgIG9mZnNldCArPSBvdXRwdXRTaXplO1xuICAgICAgICAgICAga2V5ZnJhbWUub3V0VGFuZ2VudCA9IEFycmF5LmZyb20ob3V0cHV0LnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgb3V0cHV0U2l6ZSkpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IG91dHB1dFNpemU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlID0gb3V0cHV0LnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgb3V0cHV0U2l6ZSkgYXMgRmxvYXQzMkFycmF5O1xuICAgICAgICAgICAgb2Zmc2V0ICs9IG91dHB1dFNpemU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnZlLmFkZEtleShrZXlmcmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnZlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuaW50ZXJmYWNlIFNhbXBsZURhdGEge1xuICB0eXBlOiBBY2Nlc3NvclR5cGU7XG4gIGlucHV0OiBUeXBlZEFycmF5O1xuICBvdXRwdXQ6IFR5cGVkQXJyYXk7XG4gIGludGVycG9sYXRpb246IEludGVycG9sYXRpb25UeXBlO1xuICBvdXRwdXRTaXplOiBudW1iZXI7XG59XG4iLCJpbXBvcnQgeyBBc3NldFByb21pc2UsIHJlcXVlc3QgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBHTFRGVXRpbCB9IGZyb20gXCIuLi9HTFRGVXRpbFwiO1xuaW1wb3J0IHsgSUJ1ZmZlciwgSUdMVEYgfSBmcm9tIFwiLi4vU2NoZW1hXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi9QYXJzZXJcIjtcbmltcG9ydCB7IFBhcnNlckNvbnRleHQgfSBmcm9tIFwiLi9QYXJzZXJDb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBCdWZmZXJQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwYXJzZShjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogQXNzZXRQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBnbFRGUmVzb3VyY2UgPSBjb250ZXh0LmdsVEZSZXNvdXJjZTtcbiAgICBjb25zdCB7IHVybCB9ID0gZ2xURlJlc291cmNlO1xuXG4gICAgaWYgKHRoaXMuX2lzR0xCKHVybCkpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0PEFycmF5QnVmZmVyPih1cmwsIHsgdHlwZTogXCJhcnJheWJ1ZmZlclwiIH0pXG4gICAgICAgIC50aGVuKEdMVEZVdGlsLnBhcnNlR0xCKVxuICAgICAgICAudGhlbigoeyBnbHRmLCBidWZmZXJzIH0pID0+IHtcbiAgICAgICAgICBjb250ZXh0LmdsdGYgPSBnbHRmO1xuICAgICAgICAgIGNvbnRleHQuYnVmZmVycyA9IGJ1ZmZlcnM7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVxdWVzdCh1cmwsIHtcbiAgICAgICAgdHlwZTogXCJqc29uXCJcbiAgICAgIH0pLnRoZW4oKGdsdGY6IElHTFRGKSA9PiB7XG4gICAgICAgIGNvbnRleHQuZ2x0ZiA9IGdsdGY7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICBnbHRmLmJ1ZmZlcnMubWFwKChidWZmZXI6IElCdWZmZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0PEFycmF5QnVmZmVyPihHTFRGVXRpbC5wYXJzZVJlbGF0aXZlVXJsKHVybCwgYnVmZmVyLnVyaSksIHsgdHlwZTogXCJhcnJheWJ1ZmZlclwiIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICkudGhlbigoYnVmZmVyczogQXJyYXlCdWZmZXJbXSkgPT4ge1xuICAgICAgICAgIGNvbnRleHQuYnVmZmVycyA9IGJ1ZmZlcnM7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNHTEIodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbmRleCA9IHVybC5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDQpID09PSBcImdsYlwiO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBHTFRGUmVzb3VyY2UgfSBmcm9tIFwiLi4vR0xURlJlc291cmNlXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi9QYXJzZXJcIjtcbmltcG9ydCB7IFBhcnNlckNvbnRleHQgfSBmcm9tIFwiLi9QYXJzZXJDb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHlQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICAvKiogQGludGVybmFsICovXG4gIHN0YXRpYyBfZGVmYXVsdE5hbWU6IFN0cmluZyA9IFwiX0dMVEZfRU5USVRZX1wiO1xuXG4gIHBhcnNlKGNvbnRleHQ6IFBhcnNlckNvbnRleHQpOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBnbFRGUmVzb3VyY2UsXG4gICAgICBnbHRmOiB7IG5vZGVzIH1cbiAgICB9ID0gY29udGV4dDtcblxuICAgIGNvbnN0IHsgZW5naW5lIH0gPSBnbFRGUmVzb3VyY2U7XG5cbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRpdGllczogRW50aXR5W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGdsdGZOb2RlID0gbm9kZXNbaV07XG4gICAgICBjb25zdCB7IG1hdHJpeCwgdHJhbnNsYXRpb24sIHJvdGF0aW9uLCBzY2FsZSB9ID0gZ2x0Zk5vZGU7XG4gICAgICBjb25zdCBlbnRpdHkgPSBuZXcgRW50aXR5KGVuZ2luZSwgZ2x0Zk5vZGUubmFtZSB8fCBgJHtFbnRpdHlQYXJzZXIuX2RlZmF1bHROYW1lfSR7aX1gKTtcblxuICAgICAgY29uc3QgeyB0cmFuc2Zvcm0gfSA9IGVudGl0eTtcbiAgICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgY29uc3QgbG9jYWxNYXRyaXggPSB0cmFuc2Zvcm0ubG9jYWxNYXRyaXg7XG4gICAgICAgIGxvY2FsTWF0cml4LmNvcHlGcm9tQXJyYXkobWF0cml4KTtcbiAgICAgICAgdHJhbnNmb3JtLmxvY2FsTWF0cml4ID0gbG9jYWxNYXRyaXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICB0cmFuc2Zvcm0uc2V0UG9zaXRpb24odHJhbnNsYXRpb25bMF0sIHRyYW5zbGF0aW9uWzFdLCB0cmFuc2xhdGlvblsyXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdGF0aW9uKSB7XG4gICAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uUXVhdGVybmlvbihyb3RhdGlvblswXSwgcm90YXRpb25bMV0sIHJvdGF0aW9uWzJdLCByb3RhdGlvblszXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjYWxlKSB7XG4gICAgICAgICAgdHJhbnNmb3JtLnNldFNjYWxlKHNjYWxlWzBdLCBzY2FsZVsxXSwgc2NhbGVbMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVudGl0aWVzW2ldID0gZW50aXR5O1xuICAgIH1cblxuICAgIGdsVEZSZXNvdXJjZS5lbnRpdGllcyA9IGVudGl0aWVzO1xuICAgIHRoaXMuX2J1aWxkRW50aXR5VHJlZShjb250ZXh0LCBnbFRGUmVzb3VyY2UpO1xuICAgIHRoaXMuX2NyZWF0ZVNjZW5lUm9vdHMoY29udGV4dCwgZ2xURlJlc291cmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkRW50aXR5VHJlZShjb250ZXh0OiBQYXJzZXJDb250ZXh0LCBnbFRGUmVzb3VyY2U6IEdMVEZSZXNvdXJjZSk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGdsdGY6IHsgbm9kZXMgfVxuICAgIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgZW50aXRpZXMgfSA9IGdsVEZSZXNvdXJjZTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IG5vZGVzW2ldO1xuICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXNbaV07XG5cbiAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRFbnRpdHkgPSBlbnRpdGllc1tjaGlsZHJlbltqXV07XG5cbiAgICAgICAgICBlbnRpdHkuYWRkQ2hpbGQoY2hpbGRFbnRpdHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlU2NlbmVSb290cyhjb250ZXh0OiBQYXJzZXJDb250ZXh0LCBnbFRGUmVzb3VyY2U6IEdMVEZSZXNvdXJjZSk6IHZvaWQge1xuICAgIGNvbnN0IHsgc2NlbmU6IHNjZW5lSUQgPSAwLCBzY2VuZXMgfSA9IGNvbnRleHQuZ2x0ZjtcbiAgICBjb25zdCB7IGVuZ2luZSwgZW50aXRpZXMgfSA9IGdsVEZSZXNvdXJjZTtcblxuICAgIGlmICghc2NlbmVzKSByZXR1cm47XG5cbiAgICBjb25zdCBzY2VuZVJvb3RzOiBFbnRpdHlbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2VuZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHNjZW5lc1tpXTtcblxuICAgICAgaWYgKCFub2RlcykgY29udGludWU7XG5cbiAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgc2NlbmVSb290c1tpXSA9IGVudGl0aWVzW25vZGVzWzBdXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJvb3RFbnRpdHkgPSBuZXcgRW50aXR5KGVuZ2luZSwgXCJHTFRGX1JPT1RcIik7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICByb290RW50aXR5LmFkZENoaWxkKGVudGl0aWVzW25vZGVzW2pdXSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NlbmVSb290c1tpXSA9IHJvb3RFbnRpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2xURlJlc291cmNlLnNjZW5lUm9vdHMgPSBzY2VuZVJvb3RzO1xuICAgIGdsVEZSZXNvdXJjZS5kZWZhdWx0U2NlbmVSb290ID0gc2NlbmVSb290c1tzY2VuZUlEXTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQXNzZXRQcm9taXNlLFxuICBCbGVuZFNoYXBlLFxuICBCdWZmZXIsXG4gIEJ1ZmZlckJpbmRGbGFnLFxuICBCdWZmZXJVc2FnZSxcbiAgRW5naW5lT2JqZWN0LFxuICBNb2RlbE1lc2gsXG4gIFR5cGVkQXJyYXksXG4gIFZlcnRleEVsZW1lbnRcbn0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHsgVmVjdG9yMywgVmVjdG9yNCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLW1hdGhcIjtcbmltcG9ydCB7IEdMVEZVdGlsIH0gZnJvbSBcIi4uL0dMVEZVdGlsXCI7XG5pbXBvcnQgeyBBY2Nlc3NvclR5cGUsIElHTFRGLCBJTWVzaCwgSU1lc2hQcmltaXRpdmUgfSBmcm9tIFwiLi4vU2NoZW1hXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi9QYXJzZXJcIjtcbmltcG9ydCB7IFBhcnNlckNvbnRleHQgfSBmcm9tIFwiLi9QYXJzZXJDb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBNZXNoUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcblxuICBwYXJzZShjb250ZXh0OiBQYXJzZXJDb250ZXh0KSB7XG4gICAgY29uc3QgeyBnbHRmLCBidWZmZXJzLCBnbFRGUmVzb3VyY2UgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgeyBlbmdpbmUgfSA9IGdsVEZSZXNvdXJjZTtcbiAgICBpZiAoIWdsdGYubWVzaGVzKSByZXR1cm47XG5cbiAgICBjb25zdCBtZXNoZXNQcm9taXNlSW5mbyA9IGNvbnRleHQubWVzaGVzUHJvbWlzZUluZm87XG4gICAgY29uc3QgbWVzaFByb21pc2VzOiBQcm9taXNlPE1vZGVsTWVzaFtdPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsdGYubWVzaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBnbHRmTWVzaCA9IGdsdGYubWVzaGVzW2ldO1xuICAgICAgY29uc3QgcHJpbWl0aXZlUHJvbWlzZXM6IFByb21pc2U8TW9kZWxNZXNoPltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ2x0Zk1lc2gucHJpbWl0aXZlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBnbHRmUHJpbWl0aXZlID0gZ2x0Zk1lc2gucHJpbWl0aXZlc1tqXTtcbiAgICAgICAgY29uc3QgeyBleHRlbnNpb25zID0ge30gfSA9IGdsdGZQcmltaXRpdmU7XG4gICAgICAgIGNvbnN0IHsgS0hSX2RyYWNvX21lc2hfY29tcHJlc3Npb24gfSA9IGV4dGVuc2lvbnM7XG5cbiAgICAgICAgcHJpbWl0aXZlUHJvbWlzZXNbal0gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc2ggPSBuZXcgTW9kZWxNZXNoKGVuZ2luZSwgZ2x0Zk1lc2gubmFtZSB8fCBqICsgXCJcIik7XG5cbiAgICAgICAgICBpZiAoS0hSX2RyYWNvX21lc2hfY29tcHJlc3Npb24pIHtcbiAgICAgICAgICAgICg8UHJvbWlzZTxFbmdpbmVPYmplY3Q+PihcbiAgICAgICAgICAgICAgUGFyc2VyLmNyZWF0ZUVuZ2luZVJlc291cmNlKFxuICAgICAgICAgICAgICAgIFwiS0hSX2RyYWNvX21lc2hfY29tcHJlc3Npb25cIixcbiAgICAgICAgICAgICAgICBLSFJfZHJhY29fbWVzaF9jb21wcmVzc2lvbixcbiAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgIGdsdGZQcmltaXRpdmVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgLnRoZW4oKGRlY29kZWRHZW9tZXRyeTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlTWVzaEZyb21HTFRGUHJpbWl0aXZlRHJhY28oXG4gICAgICAgICAgICAgICAgICBtZXNoLFxuICAgICAgICAgICAgICAgICAgZ2x0Zk1lc2gsXG4gICAgICAgICAgICAgICAgICBnbHRmUHJpbWl0aXZlLFxuICAgICAgICAgICAgICAgICAgZ2x0ZixcbiAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVTZW1hbnRpYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRlY29kZWRHZW9tZXRyeS5hdHRyaWJ1dGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWRHZW9tZXRyeS5hdHRyaWJ1dGVzW2pdLm5hbWUgPT09IGF0dHJpYnV0ZVNlbWFudGljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlZEdlb21ldHJ5LmF0dHJpYnV0ZXNbal0uYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVTZW1hbnRpYywgc2hhcGVJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIkJsZW5kU2hhcGUgYW5pbWF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBkcmFjby5cIjtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVkR2VvbWV0cnkuaW5kZXguYXJyYXk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY29udGV4dC5rZWVwTWVzaERhdGFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcGFyc2VNZXNoRnJvbUdMVEZQcmltaXRpdmUoXG4gICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgIG1lc2gsXG4gICAgICAgICAgICAgIGdsdGZNZXNoLFxuICAgICAgICAgICAgICBnbHRmUHJpbWl0aXZlLFxuICAgICAgICAgICAgICBnbHRmLFxuICAgICAgICAgICAgICAoYXR0cmlidXRlU2VtYW50aWMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKGF0dHJpYnV0ZU5hbWUsIHNoYXBlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwZUFjY2Vzc29ySWR4ID0gZ2x0ZlByaW1pdGl2ZS50YXJnZXRzW3NoYXBlSW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZUFjY2Vzc29ySWR4ID0gc2hhcGVBY2Nlc3NvcklkeFthdHRyaWJ1dGVOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlQWNjZXNzb3JJZHgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY2Vzc29yID0gZ2x0Zi5hY2Nlc3NvcnNbYXR0cmlidXRlQWNjZXNzb3JJZHhdO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMVEZVdGlsLmdldEFjY2Vzc29yRGF0YShnbHRmLCBhY2Nlc3NvciwgYnVmZmVycyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4QWNjZXNzb3IgPSBnbHRmLmFjY2Vzc29yc1tnbHRmUHJpbWl0aXZlLmluZGljZXNdO1xuICAgICAgICAgICAgICAgIHJldHVybiBHTFRGVXRpbC5nZXRBY2Nlc3NvckRhdGEoZ2x0ZiwgaW5kZXhBY2Nlc3NvciwgYnVmZmVycyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbnRleHQua2VlcE1lc2hEYXRhXG4gICAgICAgICAgICApLnRoZW4ocmVzb2x2ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbWVzaFByb21pc2VzW2ldID0gUHJvbWlzZS5hbGwocHJpbWl0aXZlUHJvbWlzZXMpO1xuICAgIH1cblxuICAgIEFzc2V0UHJvbWlzZS5hbGwobWVzaFByb21pc2VzKVxuICAgICAgLnRoZW4oKG1lc2hlczogTW9kZWxNZXNoW11bXSkgPT4ge1xuICAgICAgICBnbFRGUmVzb3VyY2UubWVzaGVzID0gbWVzaGVzO1xuICAgICAgICBtZXNoZXNQcm9taXNlSW5mby5yZXNvbHZlKG1lc2hlcyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKG1lc2hlc1Byb21pc2VJbmZvLnJlamVjdCk7XG5cbiAgICByZXR1cm4gbWVzaGVzUHJvbWlzZUluZm8ucHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzaEZyb21HTFRGUHJpbWl0aXZlKFxuICAgIGNvbnRleHQ6IFBhcnNlckNvbnRleHQsXG4gICAgbWVzaDogTW9kZWxNZXNoLFxuICAgIGdsdGZNZXNoOiBJTWVzaCxcbiAgICBnbHRmUHJpbWl0aXZlOiBJTWVzaFByaW1pdGl2ZSxcbiAgICBnbHRmOiBJR0xURixcbiAgICBnZXRWZXJ0ZXhCdWZmZXJEYXRhOiAoc2VtYW50aWM6IHN0cmluZykgPT4gVHlwZWRBcnJheSxcbiAgICBnZXRCbGVuZFNoYXBlRGF0YTogKHNlbWFudGljOiBzdHJpbmcsIHNoYXBlSW5kZXg6IG51bWJlcikgPT4gVHlwZWRBcnJheSxcbiAgICBnZXRJbmRleEJ1ZmZlckRhdGE6ICgpID0+IFR5cGVkQXJyYXksXG4gICAga2VlcE1lc2hEYXRhOiBib29sZWFuXG4gICk6IFByb21pc2U8TW9kZWxNZXNoPiB7XG4gICAgY29uc3QgeyBhY2Nlc3NvcnMgfSA9IGdsdGY7XG4gICAgY29uc3QgeyBidWZmZXJzIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgYXR0cmlidXRlcywgdGFyZ2V0cywgaW5kaWNlcywgbW9kZSB9ID0gZ2x0ZlByaW1pdGl2ZTtcblxuICAgIGNvbnN0IGVuZ2luZSA9IG1lc2guZW5naW5lO1xuICAgIGNvbnN0IHZlcnRleEVsZW1lbnRzID0gbmV3IEFycmF5PFZlcnRleEVsZW1lbnQ+KCk7XG5cbiAgICBsZXQgdmVydGV4Q291bnQ6IG51bWJlcjtcbiAgICBsZXQgYnVmZmVyQmluZEluZGV4ID0gMDtcbiAgICBsZXQgcG9zaXRpb25zOiBWZWN0b3IzW107XG4gICAgbGV0IGJvbmVJbmRpY2VzOiBWZWN0b3I0W107XG4gICAgbGV0IGJvbmVXZWlnaHRzOiBWZWN0b3I0W107XG4gICAgaWYgKGtlZXBNZXNoRGF0YSkge1xuICAgICAgcG9zaXRpb25zID0gbmV3IEFycmF5PFZlY3RvcjM+KHZlcnRleENvdW50KTtcbiAgICAgIGJvbmVJbmRpY2VzID0gbmV3IEFycmF5PFZlY3RvcjQ+KHZlcnRleENvdW50KTtcbiAgICAgIGJvbmVXZWlnaHRzID0gbmV3IEFycmF5PFZlY3RvcjQ+KHZlcnRleENvdW50KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBhY2Nlc3NvciA9IGFjY2Vzc29yc1thdHRyaWJ1dGVzW2F0dHJpYnV0ZV1dO1xuICAgICAgY29uc3QgYWNjZXNzb3JCdWZmZXIgPSBHTFRGVXRpbC5nZXRBY2Nlc3NvckJ1ZmZlcihjb250ZXh0LCBnbHRmLCBhY2Nlc3Nvcik7XG5cbiAgICAgIGNvbnN0IGRhdGFFbGVtZW50U2l6ZSA9IEdMVEZVdGlsLmdldEFjY2Vzc29yVHlwZVNpemUoYWNjZXNzb3IudHlwZSk7XG4gICAgICBjb25zdCBhY2Nlc3NvckNvdW50ID0gYWNjZXNzb3IuY291bnQ7XG4gICAgICBjb25zdCB2ZXJ0aWNlcyA9IGFjY2Vzc29yQnVmZmVyLmRhdGE7XG5cbiAgICAgIGxldCB2ZXJ0ZXhFbGVtZW50OiBWZXJ0ZXhFbGVtZW50O1xuICAgICAgY29uc3QgbWVzaElkID0gbWVzaC5pbnN0YW5jZUlkO1xuICAgICAgY29uc3QgdmVydGV4QmluZGluZ0luZm9zID0gYWNjZXNzb3JCdWZmZXIudmVydGV4QmluZGluZ0luZm9zO1xuICAgICAgY29uc3QgZWxlbWVudE5vcm1hbGl6ZWQgPSBhY2Nlc3Nvci5ub3JtYWxpemVkO1xuICAgICAgY29uc3QgZWxlbWVudEZvcm1hdCA9IEdMVEZVdGlsLmdldEVsZW1lbnRGb3JtYXQoYWNjZXNzb3IuY29tcG9uZW50VHlwZSwgZGF0YUVsZW1lbnRTaXplLCBlbGVtZW50Tm9ybWFsaXplZCk7XG5cbiAgICAgIGxldCBzY2FsZUZhY3RvcjogbnVtYmVyO1xuICAgICAgZWxlbWVudE5vcm1hbGl6ZWQgJiYgKHNjYWxlRmFjdG9yID0gR0xURlV0aWwuZ2V0Tm9ybWFsaXplZENvbXBvbmVudFNjYWxlKGFjY2Vzc29yLmNvbXBvbmVudFR5cGUpKTtcblxuICAgICAgbGV0IGVsZW1lbnRPZmZzZXQ6IG51bWJlcjtcbiAgICAgIGlmIChhY2Nlc3NvckJ1ZmZlci5pbnRlcmxlYXZlZCkge1xuICAgICAgICBjb25zdCBieXRlT2Zmc2V0ID0gYWNjZXNzb3IuYnl0ZU9mZnNldCB8fCAwO1xuICAgICAgICBjb25zdCBzdHJpZGUgPSBhY2Nlc3NvckJ1ZmZlci5zdHJpZGU7XG4gICAgICAgIGVsZW1lbnRPZmZzZXQgPSBieXRlT2Zmc2V0ICUgc3RyaWRlO1xuICAgICAgICBpZiAodmVydGV4QmluZGluZ0luZm9zW21lc2hJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZlcnRleEVsZW1lbnQgPSBuZXcgVmVydGV4RWxlbWVudChhdHRyaWJ1dGUsIGVsZW1lbnRPZmZzZXQsIGVsZW1lbnRGb3JtYXQsIGJ1ZmZlckJpbmRJbmRleCk7XG5cbiAgICAgICAgICBsZXQgdmVydGV4QnVmZmVyID0gYWNjZXNzb3JCdWZmZXIudmVydGV4QnVmZmVyO1xuICAgICAgICAgIGlmICghdmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXIgPSBuZXcgQnVmZmVyKGVuZ2luZSwgQnVmZmVyQmluZEZsYWcuVmVydGV4QnVmZmVyLCB2ZXJ0aWNlcy5ieXRlTGVuZ3RoLCBCdWZmZXJVc2FnZS5TdGF0aWMpO1xuICAgICAgICAgICAgdmVydGV4QnVmZmVyLnNldERhdGEodmVydGljZXMpO1xuICAgICAgICAgICAgYWNjZXNzb3JCdWZmZXIudmVydGV4QnVmZmVyID0gdmVydGV4QnVmZmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNoLnNldFZlcnRleEJ1ZmZlckJpbmRpbmcodmVydGV4QnVmZmVyLCBzdHJpZGUsIGJ1ZmZlckJpbmRJbmRleCk7XG4gICAgICAgICAgdmVydGV4QmluZGluZ0luZm9zW21lc2hJZF0gPSBidWZmZXJCaW5kSW5kZXgrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2ZXJ0ZXhFbGVtZW50ID0gbmV3IFZlcnRleEVsZW1lbnQoYXR0cmlidXRlLCBlbGVtZW50T2Zmc2V0LCBlbGVtZW50Rm9ybWF0LCB2ZXJ0ZXhCaW5kaW5nSW5mb3NbbWVzaElkXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRPZmZzZXQgPSAwO1xuICAgICAgICB2ZXJ0ZXhFbGVtZW50ID0gbmV3IFZlcnRleEVsZW1lbnQoYXR0cmlidXRlLCBlbGVtZW50T2Zmc2V0LCBlbGVtZW50Rm9ybWF0LCBidWZmZXJCaW5kSW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IG5ldyBCdWZmZXIoZW5naW5lLCBCdWZmZXJCaW5kRmxhZy5WZXJ0ZXhCdWZmZXIsIHZlcnRpY2VzLmJ5dGVMZW5ndGgsIEJ1ZmZlclVzYWdlLlN0YXRpYyk7XG4gICAgICAgIHZlcnRleEJ1ZmZlci5zZXREYXRhKHZlcnRpY2VzKTtcbiAgICAgICAgbWVzaC5zZXRWZXJ0ZXhCdWZmZXJCaW5kaW5nKHZlcnRleEJ1ZmZlciwgYWNjZXNzb3JCdWZmZXIuc3RyaWRlLCBidWZmZXJCaW5kSW5kZXgpO1xuICAgICAgICB2ZXJ0ZXhCaW5kaW5nSW5mb3NbbWVzaElkXSA9IGJ1ZmZlckJpbmRJbmRleCsrO1xuICAgICAgfVxuICAgICAgdmVydGV4RWxlbWVudHMucHVzaCh2ZXJ0ZXhFbGVtZW50KTtcblxuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gXCJQT1NJVElPTlwiKSB7XG4gICAgICAgIHZlcnRleENvdW50ID0gYWNjZXNzb3JDb3VudDtcblxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSBtZXNoLmJvdW5kcztcbiAgICAgICAgaWYgKGFjY2Vzc29yLm1pbiAmJiBhY2Nlc3Nvci5tYXgpIHtcbiAgICAgICAgICBtaW4uY29weUZyb21BcnJheShhY2Nlc3Nvci5taW4pO1xuICAgICAgICAgIG1heC5jb3B5RnJvbUFycmF5KGFjY2Vzc29yLm1heCk7XG5cbiAgICAgICAgICBpZiAoa2VlcE1lc2hEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlT2Zmc2V0ID0gZWxlbWVudE9mZnNldCAvIHZlcnRpY2VzLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgY29uc3Qgc3RyaWRlID0gdmVydGljZXMubGVuZ3RoIC8gYWNjZXNzb3JDb3VudDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYWNjZXNzb3JDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJhc2VPZmZzZXQgKyBqICogc3RyaWRlO1xuICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKHZlcnRpY2VzW29mZnNldF0sIHZlcnRpY2VzW29mZnNldCArIDFdLCB2ZXJ0aWNlc1tvZmZzZXQgKyAyXSk7XG4gICAgICAgICAgICAgIGVsZW1lbnROb3JtYWxpemVkICYmIHBvc2l0aW9uLnNjYWxlKHNjYWxlRmFjdG9yKTtcbiAgICAgICAgICAgICAgcG9zaXRpb25zW2pdID0gcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gTWVzaFBhcnNlci5fdGVtcFZlY3RvcjM7XG4gICAgICAgICAgbWluLnNldChOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgICAgICAgICBtYXguc2V0KC1OdW1iZXIuTUFYX1ZBTFVFLCAtTnVtYmVyLk1BWF9WQUxVRSwgLU51bWJlci5NQVhfVkFMVUUpO1xuXG4gICAgICAgICAgY29uc3QgYmFzZU9mZnNldCA9IGVsZW1lbnRPZmZzZXQgLyB2ZXJ0aWNlcy5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICBjb25zdCBzdHJpZGUgPSB2ZXJ0aWNlcy5sZW5ndGggLyBhY2Nlc3NvckNvdW50O1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYWNjZXNzb3JDb3VudDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBiYXNlT2Zmc2V0ICsgaiAqIHN0cmlkZTtcbiAgICAgICAgICAgIHBvc2l0aW9uLmNvcHlGcm9tQXJyYXkodmVydGljZXMsIG9mZnNldCk7XG4gICAgICAgICAgICBWZWN0b3IzLm1pbihtaW4sIHBvc2l0aW9uLCBtaW4pO1xuICAgICAgICAgICAgVmVjdG9yMy5tYXgobWF4LCBwb3NpdGlvbiwgbWF4KTtcblxuICAgICAgICAgICAgaWYgKGtlZXBNZXNoRGF0YSkge1xuICAgICAgICAgICAgICBjb25zdCBjbG9uZVBvc2l0aW9uID0gcG9zaXRpb24uY2xvbmUoKTtcbiAgICAgICAgICAgICAgZWxlbWVudE5vcm1hbGl6ZWQgJiYgY2xvbmVQb3NpdGlvbi5zY2FsZShzY2FsZUZhY3Rvcik7XG4gICAgICAgICAgICAgIHBvc2l0aW9uc1tqXSA9IGNsb25lUG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50Tm9ybWFsaXplZCkge1xuICAgICAgICAgIG1pbi5zY2FsZShzY2FsZUZhY3Rvcik7XG4gICAgICAgICAgbWF4LnNjYWxlKHNjYWxlRmFjdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUgPT09IFwiSk9JTlRTXzBcIiAmJiBrZWVwTWVzaERhdGEpIHtcbiAgICAgICAgY29uc3QgYmFzZU9mZnNldCA9IGVsZW1lbnRPZmZzZXQgLyB2ZXJ0aWNlcy5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgY29uc3Qgc3RyaWRlID0gdmVydGljZXMubGVuZ3RoIC8gYWNjZXNzb3JDb3VudDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBhY2Nlc3NvckNvdW50OyBqKyspIHtcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSBiYXNlT2Zmc2V0ICsgaiAqIHN0cmlkZTtcbiAgICAgICAgICBjb25zdCBib25lSW5kZXggPSBuZXcgVmVjdG9yNChcbiAgICAgICAgICAgIHZlcnRpY2VzW29mZnNldF0sXG4gICAgICAgICAgICB2ZXJ0aWNlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgIHZlcnRpY2VzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgdmVydGljZXNbb2Zmc2V0ICsgM11cbiAgICAgICAgICApO1xuICAgICAgICAgIGVsZW1lbnROb3JtYWxpemVkICYmIGJvbmVJbmRleC5zY2FsZShzY2FsZUZhY3Rvcik7XG4gICAgICAgICAgYm9uZUluZGljZXNbal0gPSBib25lSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlID09PSBcIldFSUdIVFNfMFwiICYmIGtlZXBNZXNoRGF0YSkge1xuICAgICAgICBjb25zdCBiYXNlT2Zmc2V0ID0gZWxlbWVudE9mZnNldCAvIHZlcnRpY2VzLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICBjb25zdCBzdHJpZGUgPSB2ZXJ0aWNlcy5sZW5ndGggLyBhY2Nlc3NvckNvdW50O1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFjY2Vzc29yQ291bnQ7IGorKykge1xuICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJhc2VPZmZzZXQgKyBqICogc3RyaWRlO1xuICAgICAgICAgIGNvbnN0IGJvbmVXZWlnaHQgPSBuZXcgVmVjdG9yNChcbiAgICAgICAgICAgIHZlcnRpY2VzW29mZnNldF0sXG4gICAgICAgICAgICB2ZXJ0aWNlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgIHZlcnRpY2VzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgdmVydGljZXNbb2Zmc2V0ICsgM11cbiAgICAgICAgICApO1xuICAgICAgICAgIGVsZW1lbnROb3JtYWxpemVkICYmIGJvbmVXZWlnaHQuc2NhbGUoc2NhbGVGYWN0b3IpO1xuICAgICAgICAgIGJvbmVXZWlnaHRzW2pdID0gYm9uZVdlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBtZXNoLnNldFZlcnRleEVsZW1lbnRzKHZlcnRleEVsZW1lbnRzKTtcblxuICAgIC8vIEluZGljZXNcbiAgICBpZiAoaW5kaWNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbmRleEFjY2Vzc29yID0gZ2x0Zi5hY2Nlc3NvcnNbaW5kaWNlc107XG4gICAgICBjb25zdCBpbmRleERhdGEgPSBnZXRJbmRleEJ1ZmZlckRhdGEoKTtcbiAgICAgIG1lc2guc2V0SW5kaWNlcyg8VWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXk+aW5kZXhEYXRhKTtcbiAgICAgIG1lc2guYWRkU3ViTWVzaCgwLCBpbmRleEFjY2Vzc29yLmNvdW50LCBtb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzaC5hZGRTdWJNZXNoKDAsIHZlcnRleENvdW50LCBtb2RlKTtcbiAgICB9XG5cbiAgICAvLyBCbGVuZFNoYXBlc1xuICAgIHRhcmdldHMgJiYgdGhpcy5fY3JlYXRlQmxlbmRTaGFwZShtZXNoLCBnbHRmTWVzaCwgdGFyZ2V0cywgZ2V0QmxlbmRTaGFwZURhdGEpO1xuXG4gICAgbWVzaC51cGxvYWREYXRhKCFrZWVwTWVzaERhdGEpO1xuXG4gICAgLy9AdHMtaWdub3JlXG4gICAgbWVzaC5fcG9zaXRpb25zID0gcG9zaXRpb25zO1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIG1lc2guX2JvbmVJbmRpY2VzID0gYm9uZUluZGljZXM7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgbWVzaC5fYm9uZVdlaWdodHMgPSBib25lV2VpZ2h0cztcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWVzaCk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVCbGVuZFNoYXBlKFxuICAgIG1lc2g6IE1vZGVsTWVzaCxcbiAgICBnbFRGTWVzaDogSU1lc2gsXG4gICAgZ2xURlRhcmdldHM6IHtcbiAgICAgIFtuYW1lOiBzdHJpbmddOiBudW1iZXI7XG4gICAgfVtdLFxuICAgIGdldEJsZW5kU2hhcGVEYXRhOiAoc2VtYW50aWM6IHN0cmluZywgc2hhcGVJbmRleDogbnVtYmVyKSA9PiBUeXBlZEFycmF5XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJsZW5kU2hhcGVOYW1lcyA9IGdsVEZNZXNoLmV4dHJhcyA/IGdsVEZNZXNoLmV4dHJhcy50YXJnZXROYW1lcyA6IG51bGw7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IGdsVEZUYXJnZXRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgY29uc3QgbmFtZSA9IGJsZW5kU2hhcGVOYW1lcyA/IGJsZW5kU2hhcGVOYW1lc1tpXSA6IGBibGVuZFNoYXBlJHtpfWA7XG4gICAgICBjb25zdCBkZWx0YVBvc0J1ZmZlciA9IGdldEJsZW5kU2hhcGVEYXRhKFwiUE9TSVRJT05cIiwgaSk7XG4gICAgICBjb25zdCBkZWx0YU5vckJ1ZmZlciA9IGdldEJsZW5kU2hhcGVEYXRhKFwiTk9STUFMXCIsIGkpO1xuICAgICAgY29uc3QgZGVsdGFUYW5CdWZmZXIgPSBnZXRCbGVuZFNoYXBlRGF0YShcIlRBTkdFTlRcIiwgaSk7XG4gICAgICBjb25zdCBkZWx0YVBvc2l0aW9ucyA9IGRlbHRhUG9zQnVmZmVyID8gR0xURlV0aWwuZmxvYXRCdWZmZXJUb1ZlY3RvcjNBcnJheSg8RmxvYXQzMkFycmF5PmRlbHRhUG9zQnVmZmVyKSA6IG51bGw7XG4gICAgICBjb25zdCBkZWx0YU5vcm1hbHMgPSBkZWx0YU5vckJ1ZmZlciA/IEdMVEZVdGlsLmZsb2F0QnVmZmVyVG9WZWN0b3IzQXJyYXkoPEZsb2F0MzJBcnJheT5kZWx0YU5vckJ1ZmZlcikgOiBudWxsO1xuICAgICAgY29uc3QgZGVsdGFUYW5nZW50cyA9IGRlbHRhVGFuQnVmZmVyID8gR0xURlV0aWwuZmxvYXRCdWZmZXJUb1ZlY3RvcjNBcnJheSg8RmxvYXQzMkFycmF5PmRlbHRhVGFuQnVmZmVyKSA6IG51bGw7XG5cbiAgICAgIGNvbnN0IGJsZW5kU2hhcGUgPSBuZXcgQmxlbmRTaGFwZShuYW1lKTtcbiAgICAgIGJsZW5kU2hhcGUuYWRkRnJhbWUoMS4wLCBkZWx0YVBvc2l0aW9ucywgZGVsdGFOb3JtYWxzLCBkZWx0YVRhbmdlbnRzKTtcbiAgICAgIG1lc2guYWRkQmxlbmRTaGFwZShibGVuZFNoYXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHByaXZhdGUgX3BhcnNlTWVzaEZyb21HTFRGUHJpbWl0aXZlRHJhY28oXG4gICAgbWVzaDogTW9kZWxNZXNoLFxuICAgIGdsdGZNZXNoOiBJTWVzaCxcbiAgICBnbHRmUHJpbWl0aXZlOiBJTWVzaFByaW1pdGl2ZSxcbiAgICBnbHRmOiBJR0xURixcbiAgICBnZXRWZXJ0ZXhCdWZmZXJEYXRhOiAoc2VtYW50aWM6IHN0cmluZykgPT4gVHlwZWRBcnJheSxcbiAgICBnZXRCbGVuZFNoYXBlRGF0YTogKHNlbWFudGljOiBzdHJpbmcsIHNoYXBlSW5kZXg6IG51bWJlcikgPT4gVHlwZWRBcnJheSxcbiAgICBnZXRJbmRleEJ1ZmZlckRhdGE6ICgpID0+IFR5cGVkQXJyYXksXG4gICAga2VlcE1lc2hEYXRhOiBib29sZWFuXG4gICk6IFByb21pc2U8TW9kZWxNZXNoPiB7XG4gICAgY29uc3QgeyBhdHRyaWJ1dGVzLCB0YXJnZXRzLCBpbmRpY2VzLCBtb2RlIH0gPSBnbHRmUHJpbWl0aXZlO1xuICAgIGxldCB2ZXJ0ZXhDb3VudDogbnVtYmVyO1xuXG4gICAgY29uc3QgeyBhY2Nlc3NvcnMgfSA9IGdsdGY7XG4gICAgY29uc3QgYWNjZXNzb3IgPSBhY2Nlc3NvcnNbYXR0cmlidXRlc1tcIlBPU0lUSU9OXCJdXTtcbiAgICBjb25zdCBwb3NpdGlvbkJ1ZmZlciA9IDxGbG9hdDMyQXJyYXk+Z2V0VmVydGV4QnVmZmVyRGF0YShcIlBPU0lUSU9OXCIpO1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IEdMVEZVdGlsLmZsb2F0QnVmZmVyVG9WZWN0b3IzQXJyYXkocG9zaXRpb25CdWZmZXIpO1xuICAgIG1lc2guc2V0UG9zaXRpb25zKHBvc2l0aW9ucyk7XG5cbiAgICBjb25zdCB7IGJvdW5kcyB9ID0gbWVzaDtcbiAgICB2ZXJ0ZXhDb3VudCA9IGFjY2Vzc29yLmNvdW50O1xuICAgIGlmIChhY2Nlc3Nvci5taW4gJiYgYWNjZXNzb3IubWF4KSB7XG4gICAgICBib3VuZHMubWluLmNvcHlGcm9tQXJyYXkoYWNjZXNzb3IubWluKTtcbiAgICAgIGJvdW5kcy5tYXguY29weUZyb21BcnJheShhY2Nlc3Nvci5tYXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IE1lc2hQYXJzZXIuX3RlbXBWZWN0b3IzO1xuICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gYm91bmRzO1xuXG4gICAgICBtaW4uc2V0KE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUUpO1xuICAgICAgbWF4LnNldCgtTnVtYmVyLk1BWF9WQUxVRSwgLU51bWJlci5NQVhfVkFMVUUsIC1OdW1iZXIuTUFYX1ZBTFVFKTtcblxuICAgICAgY29uc3Qgc3RyaWRlID0gcG9zaXRpb25CdWZmZXIubGVuZ3RoIC8gdmVydGV4Q291bnQ7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZlcnRleENvdW50OyBqKyspIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaiAqIHN0cmlkZTtcbiAgICAgICAgcG9zaXRpb24uY29weUZyb21BcnJheShwb3NpdGlvbkJ1ZmZlciwgb2Zmc2V0KTtcbiAgICAgICAgVmVjdG9yMy5taW4obWluLCBwb3NpdGlvbiwgbWluKTtcbiAgICAgICAgVmVjdG9yMy5tYXgobWF4LCBwb3NpdGlvbiwgbWF4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZVNlbWFudGljIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpYyA9PT0gXCJQT1NJVElPTlwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgYnVmZmVyRGF0YSA9IGdldFZlcnRleEJ1ZmZlckRhdGEoYXR0cmlidXRlU2VtYW50aWMpO1xuICAgICAgc3dpdGNoIChhdHRyaWJ1dGVTZW1hbnRpYykge1xuICAgICAgICBjYXNlIFwiTk9STUFMXCI6XG4gICAgICAgICAgY29uc3Qgbm9ybWFscyA9IEdMVEZVdGlsLmZsb2F0QnVmZmVyVG9WZWN0b3IzQXJyYXkoPEZsb2F0MzJBcnJheT5idWZmZXJEYXRhKTtcbiAgICAgICAgICBtZXNoLnNldE5vcm1hbHMobm9ybWFscyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJURVhDT09SRF8wXCI6XG4gICAgICAgICAgY29uc3QgdGV4dHVyZWNvb3JkcyA9IEdMVEZVdGlsLmZsb2F0QnVmZmVyVG9WZWN0b3IyQXJyYXkoPEZsb2F0MzJBcnJheT5idWZmZXJEYXRhKTtcbiAgICAgICAgICBtZXNoLnNldFVWcyh0ZXh0dXJlY29vcmRzLCAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRFWENPT1JEXzFcIjpcbiAgICAgICAgICBjb25zdCB0ZXh0dXJlY29vcmRzMSA9IEdMVEZVdGlsLmZsb2F0QnVmZmVyVG9WZWN0b3IyQXJyYXkoPEZsb2F0MzJBcnJheT5idWZmZXJEYXRhKTtcbiAgICAgICAgICBtZXNoLnNldFVWcyh0ZXh0dXJlY29vcmRzMSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJURVhDT09SRF8yXCI6XG4gICAgICAgICAgY29uc3QgdGV4dHVyZWNvb3JkczIgPSBHTFRGVXRpbC5mbG9hdEJ1ZmZlclRvVmVjdG9yMkFycmF5KDxGbG9hdDMyQXJyYXk+YnVmZmVyRGF0YSk7XG4gICAgICAgICAgbWVzaC5zZXRVVnModGV4dHVyZWNvb3JkczIsIDIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVEVYQ09PUkRfM1wiOlxuICAgICAgICAgIGNvbnN0IHRleHR1cmVjb29yZHMzID0gR0xURlV0aWwuZmxvYXRCdWZmZXJUb1ZlY3RvcjJBcnJheSg8RmxvYXQzMkFycmF5PmJ1ZmZlckRhdGEpO1xuICAgICAgICAgIG1lc2guc2V0VVZzKHRleHR1cmVjb29yZHMzLCAzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRFWENPT1JEXzRcIjpcbiAgICAgICAgICBjb25zdCB0ZXh0dXJlY29vcmRzNCA9IEdMVEZVdGlsLmZsb2F0QnVmZmVyVG9WZWN0b3IyQXJyYXkoPEZsb2F0MzJBcnJheT5idWZmZXJEYXRhKTtcbiAgICAgICAgICBtZXNoLnNldFVWcyh0ZXh0dXJlY29vcmRzNCwgNCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJURVhDT09SRF81XCI6XG4gICAgICAgICAgY29uc3QgdGV4dHVyZWNvb3JkczUgPSBHTFRGVXRpbC5mbG9hdEJ1ZmZlclRvVmVjdG9yMkFycmF5KDxGbG9hdDMyQXJyYXk+YnVmZmVyRGF0YSk7XG4gICAgICAgICAgbWVzaC5zZXRVVnModGV4dHVyZWNvb3JkczUsIDUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVEVYQ09PUkRfNlwiOlxuICAgICAgICAgIGNvbnN0IHRleHR1cmVjb29yZHM2ID0gR0xURlV0aWwuZmxvYXRCdWZmZXJUb1ZlY3RvcjJBcnJheSg8RmxvYXQzMkFycmF5PmJ1ZmZlckRhdGEpO1xuICAgICAgICAgIG1lc2guc2V0VVZzKHRleHR1cmVjb29yZHM2LCA2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRFWENPT1JEXzdcIjpcbiAgICAgICAgICBjb25zdCB0ZXh0dXJlY29vcmRzNyA9IEdMVEZVdGlsLmZsb2F0QnVmZmVyVG9WZWN0b3IyQXJyYXkoPEZsb2F0MzJBcnJheT5idWZmZXJEYXRhKTtcbiAgICAgICAgICBtZXNoLnNldFVWcyh0ZXh0dXJlY29vcmRzNywgNyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDT0xPUl8wXCI6XG4gICAgICAgICAgY29uc3QgY29sb3JzID0gR0xURlV0aWwuZmxvYXRCdWZmZXJUb0NvbG9yQXJyYXkoXG4gICAgICAgICAgICA8RmxvYXQzMkFycmF5PmJ1ZmZlckRhdGEsXG4gICAgICAgICAgICBhY2Nlc3NvcnNbYXR0cmlidXRlc1tcIkNPTE9SXzBcIl1dLnR5cGUgPT09IEFjY2Vzc29yVHlwZS5WRUMzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtZXNoLnNldENvbG9ycyhjb2xvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVEFOR0VOVFwiOlxuICAgICAgICAgIGNvbnN0IHRhbmdlbnRzID0gR0xURlV0aWwuZmxvYXRCdWZmZXJUb1ZlY3RvcjRBcnJheSg8RmxvYXQzMkFycmF5PmJ1ZmZlckRhdGEpO1xuICAgICAgICAgIG1lc2guc2V0VGFuZ2VudHModGFuZ2VudHMpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJKT0lOVFNfMFwiOlxuICAgICAgICAgIGNvbnN0IGpvaW50cyA9IEdMVEZVdGlsLmZsb2F0QnVmZmVyVG9WZWN0b3I0QXJyYXkoPEZsb2F0MzJBcnJheT5idWZmZXJEYXRhKTtcbiAgICAgICAgICBtZXNoLnNldEJvbmVJbmRpY2VzKGpvaW50cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJXRUlHSFRTXzBcIjpcbiAgICAgICAgICBjb25zdCB3ZWlnaHRzID0gR0xURlV0aWwuZmxvYXRCdWZmZXJUb1ZlY3RvcjRBcnJheSg8RmxvYXQzMkFycmF5PmJ1ZmZlckRhdGEpO1xuICAgICAgICAgIG1lc2guc2V0Qm9uZVdlaWdodHMod2VpZ2h0cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gY29uc29sZS53YXJuKGBVbnN1cHBvcnQgYXR0cmlidXRlIHNlbWFudGljICR7YXR0cmlidXRlU2VtYW50aWN9LmApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluZGljZXNcbiAgICBpZiAoaW5kaWNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbmRleEFjY2Vzc29yID0gZ2x0Zi5hY2Nlc3NvcnNbaW5kaWNlc107XG4gICAgICBjb25zdCBpbmRleERhdGEgPSBnZXRJbmRleEJ1ZmZlckRhdGEoKTtcbiAgICAgIG1lc2guc2V0SW5kaWNlcyg8VWludDhBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXk+aW5kZXhEYXRhKTtcbiAgICAgIG1lc2guYWRkU3ViTWVzaCgwLCBpbmRleEFjY2Vzc29yLmNvdW50LCBtb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzaC5hZGRTdWJNZXNoKDAsIHZlcnRleENvdW50LCBtb2RlKTtcbiAgICB9XG5cbiAgICAvLyBCbGVuZFNoYXBlc1xuICAgIHRhcmdldHMgJiYgdGhpcy5fY3JlYXRlQmxlbmRTaGFwZShtZXNoLCBnbHRmTWVzaCwgdGFyZ2V0cywgZ2V0QmxlbmRTaGFwZURhdGEpO1xuXG4gICAgbWVzaC51cGxvYWREYXRhKCFrZWVwTWVzaERhdGEpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWVzaCk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFuaW1hdG9yLFxuICBBbmltYXRvckNvbnRyb2xsZXIsXG4gIEFuaW1hdG9yQ29udHJvbGxlckxheWVyLFxuICBBbmltYXRvclN0YXRlTWFjaGluZSxcbiAgQXNzZXRQcm9taXNlLFxuICBCbGlublBob25nTWF0ZXJpYWwsXG4gIENhbWVyYSxcbiAgRW5naW5lLFxuICBFbnRpdHksXG4gIE1lc2hSZW5kZXJlcixcbiAgU2tpbm5lZE1lc2hSZW5kZXJlclxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBHTFRGUmVzb3VyY2UgfSBmcm9tIFwiLi4vR0xURlJlc291cmNlXCI7XG5pbXBvcnQgeyBDYW1lcmFUeXBlLCBJQ2FtZXJhLCBJTm9kZSB9IGZyb20gXCIuLi9TY2hlbWFcIjtcbmltcG9ydCB7IElLSFJMaWdodHNQdW5jdHVhbCwgSUtIUkxpZ2h0c1B1bmN0dWFsX0xpZ2h0Tm9kZSB9IGZyb20gXCIuLi9leHRlbnNpb25zL1NjaGVtYVwiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4vUGFyc2VyXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4vUGFyc2VyQ29udGV4dFwiO1xuXG5leHBvcnQgY2xhc3MgU2NlbmVQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdE1hdGVyaWFsOiBCbGlublBob25nTWF0ZXJpYWw7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX2dldERlZmF1bHRNYXRlcmlhbChlbmdpbmU6IEVuZ2luZSk6IEJsaW5uUGhvbmdNYXRlcmlhbCB7XG4gICAgaWYgKCFTY2VuZVBhcnNlci5fZGVmYXVsdE1hdGVyaWFsKSB7XG4gICAgICBTY2VuZVBhcnNlci5fZGVmYXVsdE1hdGVyaWFsID0gbmV3IEJsaW5uUGhvbmdNYXRlcmlhbChlbmdpbmUpO1xuICAgIH1cblxuICAgIHJldHVybiBTY2VuZVBhcnNlci5fZGVmYXVsdE1hdGVyaWFsO1xuICB9XG5cbiAgcGFyc2UoY29udGV4dDogUGFyc2VyQ29udGV4dCkge1xuICAgIGNvbnN0IHsgZ2xURlJlc291cmNlLCBnbHRmIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgZW50aXRpZXMgfSA9IGdsVEZSZXNvdXJjZTtcbiAgICBjb25zdCB7IG5vZGVzLCBjYW1lcmFzOiBnbHRmQ2FtZXJhcyB9ID0gZ2x0ZjtcblxuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICBjb25zdCBkZWZhdWx0U2NlbmVSb290UHJvbWlzZUluZm8gPSBjb250ZXh0LmRlZmF1bHRTY2VuZVJvb3RQcm9taXNlSW5mbztcblxuICAgIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBnbHRmTm9kZSA9IG5vZGVzW2ldO1xuICAgICAgY29uc3QgeyBjYW1lcmE6IGNhbWVyYUlELCBtZXNoOiBtZXNoSUQsIGV4dGVuc2lvbnMgPSB7fSB9ID0gZ2x0Zk5vZGU7XG4gICAgICBjb25zdCBLSFJfbGlnaHRzX3B1bmN0dWFsID0gPElLSFJMaWdodHNQdW5jdHVhbF9MaWdodE5vZGU+ZXh0ZW5zaW9ucy5LSFJfbGlnaHRzX3B1bmN0dWFsO1xuICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXNbaV07XG5cbiAgICAgIGlmIChjYW1lcmFJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUNhbWVyYShnbFRGUmVzb3VyY2UsIGdsdGZDYW1lcmFzW2NhbWVyYUlEXSwgZW50aXR5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lc2hJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fY3JlYXRlUmVuZGVyZXIoY29udGV4dCwgZ2x0Zk5vZGUsIGVudGl0eSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoS0hSX2xpZ2h0c19wdW5jdHVhbCkge1xuICAgICAgICBjb25zdCBsaWdodEluZGV4ID0gS0hSX2xpZ2h0c19wdW5jdHVhbC5saWdodDtcbiAgICAgICAgY29uc3QgbGlnaHRzID0gKGdsdGYuZXh0ZW5zaW9ucy5LSFJfbGlnaHRzX3B1bmN0dWFsIGFzIElLSFJMaWdodHNQdW5jdHVhbCkubGlnaHRzO1xuXG4gICAgICAgIFBhcnNlci5wYXJzZUVuZ2luZVJlc291cmNlKFwiS0hSX2xpZ2h0c19wdW5jdHVhbFwiLCBsaWdodHNbbGlnaHRJbmRleF0sIGVudGl0eSwgY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdsVEZSZXNvdXJjZS5kZWZhdWx0U2NlbmVSb290KSB7XG4gICAgICB0aGlzLl9jcmVhdGVBbmltYXRvcihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBnbHRmLmV4dGVuc2lvbnMgJiYgZGVsZXRlIGdsdGYuZXh0ZW5zaW9uc1tcIk9BU0lTX21hdGVyaWFsc19yZW1hcFwiXTtcblxuICAgIEFzc2V0UHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAudGhlbigoKSA9PiBkZWZhdWx0U2NlbmVSb290UHJvbWlzZUluZm8ucmVzb2x2ZShnbFRGUmVzb3VyY2UuZGVmYXVsdFNjZW5lUm9vdCkpXG4gICAgICAuY2F0Y2goZGVmYXVsdFNjZW5lUm9vdFByb21pc2VJbmZvLnJlamVjdCk7XG5cbiAgICByZXR1cm4gZGVmYXVsdFNjZW5lUm9vdFByb21pc2VJbmZvLnByb21pc2U7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVDYW1lcmEoY29udGV4dDogR0xURlJlc291cmNlLCBjYW1lcmFTY2hlbWE6IElDYW1lcmEsIGVudGl0eTogRW50aXR5KTogdm9pZCB7XG4gICAgY29uc3QgeyBvcnRob2dyYXBoaWMsIHBlcnNwZWN0aXZlLCB0eXBlIH0gPSBjYW1lcmFTY2hlbWE7XG4gICAgY29uc3QgY2FtZXJhID0gZW50aXR5LmFkZENvbXBvbmVudChDYW1lcmEpO1xuXG4gICAgaWYgKHR5cGUgPT09IENhbWVyYVR5cGUuT1JUSE9HUkFQSElDKSB7XG4gICAgICBjb25zdCB7IHhtYWcsIHltYWcsIHpmYXIsIHpuZWFyIH0gPSBvcnRob2dyYXBoaWM7XG5cbiAgICAgIGNhbWVyYS5pc09ydGhvZ3JhcGhpYyA9IHRydWU7XG5cbiAgICAgIGlmICh6bmVhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbWVyYS5uZWFyQ2xpcFBsYW5lID0gem5lYXI7XG4gICAgICB9XG4gICAgICBpZiAoemZhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbWVyYS5mYXJDbGlwUGxhbmUgPSB6ZmFyO1xuICAgICAgfVxuXG4gICAgICBjYW1lcmEub3J0aG9ncmFwaGljU2l6ZSA9IE1hdGgubWF4KHltYWcgPz8gMCwgeG1hZyA/PyAwKSAvIDI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBDYW1lcmFUeXBlLlBFUlNQRUNUSVZFKSB7XG4gICAgICBjb25zdCB7IGFzcGVjdFJhdGlvLCB5Zm92LCB6ZmFyLCB6bmVhciB9ID0gcGVyc3BlY3RpdmU7XG5cbiAgICAgIGlmIChhc3BlY3RSYXRpbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbWVyYS5hc3BlY3RSYXRpbyA9IGFzcGVjdFJhdGlvO1xuICAgICAgfVxuICAgICAgaWYgKHlmb3YgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYW1lcmEuZmllbGRPZlZpZXcgPSAoeWZvdiAqIDE4MCkgLyBNYXRoLlBJO1xuICAgICAgfVxuICAgICAgaWYgKHpmYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYW1lcmEuZmFyQ2xpcFBsYW5lID0gemZhcjtcbiAgICAgIH1cbiAgICAgIGlmICh6bmVhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbWVyYS5uZWFyQ2xpcFBsYW5lID0gem5lYXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjb250ZXh0LmNhbWVyYXMpIGNvbnRleHQuY2FtZXJhcyA9IFtdO1xuICAgIGNvbnRleHQuY2FtZXJhcy5wdXNoKGNhbWVyYSk7XG4gICAgLy8gQHRvZG86IHVzZSBlbmdpbmUgY2FtZXJhIGJ5IGRlZmF1bHRcbiAgICBjYW1lcmEuZW5hYmxlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlUmVuZGVyZXIoY29udGV4dDogUGFyc2VyQ29udGV4dCwgZ2x0Zk5vZGU6IElOb2RlLCBlbnRpdHk6IEVudGl0eSkge1xuICAgIGNvbnN0IHsgZ2xURlJlc291cmNlLCBnbHRmIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgbWVzaGVzOiBnbHRmTWVzaGVzIH0gPSBnbHRmO1xuXG4gICAgY29uc3QgeyBlbmdpbmUsIG1lc2hlcywgbWF0ZXJpYWxzLCBza2lucyB9ID0gZ2xURlJlc291cmNlO1xuICAgIGNvbnN0IHsgbWVzaDogbWVzaElELCBza2luOiBza2luSUQgfSA9IGdsdGZOb2RlO1xuICAgIGNvbnN0IGdsVEZNZXNoID0gZ2x0Zk1lc2hlc1ttZXNoSURdO1xuICAgIGNvbnN0IGdsdGZNZXNoUHJpbWl0aXZlcyA9IGdsVEZNZXNoLnByaW1pdGl2ZXM7XG4gICAgY29uc3QgYmxlbmRTaGFwZVdlaWdodHMgPSBnbHRmTm9kZS53ZWlnaHRzIHx8IGdsVEZNZXNoLndlaWdodHM7XG5cbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2x0Zk1lc2hQcmltaXRpdmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtZXNoID0gbWVzaGVzW21lc2hJRF1baV07XG4gICAgICBsZXQgcmVuZGVyZXI6IE1lc2hSZW5kZXJlciB8IFNraW5uZWRNZXNoUmVuZGVyZXI7XG5cbiAgICAgIGlmIChza2luSUQgIT09IHVuZGVmaW5lZCB8fCBibGVuZFNoYXBlV2VpZ2h0cykge1xuICAgICAgICBjb250ZXh0Lmhhc1NraW5uZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBza2luUmVuZGVyZXIgPSBlbnRpdHkuYWRkQ29tcG9uZW50KFNraW5uZWRNZXNoUmVuZGVyZXIpO1xuICAgICAgICBza2luUmVuZGVyZXIubWVzaCA9IG1lc2g7XG4gICAgICAgIGlmIChza2luSUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNraW5SZW5kZXJlci5za2luID0gc2tpbnNbc2tpbklEXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxlbmRTaGFwZVdlaWdodHMpIHtcbiAgICAgICAgICBza2luUmVuZGVyZXIuYmxlbmRTaGFwZVdlaWdodHMgPSBuZXcgRmxvYXQzMkFycmF5KGJsZW5kU2hhcGVXZWlnaHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJlciA9IHNraW5SZW5kZXJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlcmVyID0gZW50aXR5LmFkZENvbXBvbmVudChNZXNoUmVuZGVyZXIpO1xuICAgICAgICByZW5kZXJlci5tZXNoID0gbWVzaDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF0ZXJpYWxJbmRleCA9IGdsdGZNZXNoUHJpbWl0aXZlc1tpXS5tYXRlcmlhbDtcbiAgICAgIGNvbnN0IHJlbWFwTWF0ZXJpYWxzID0gZ2x0Zi5leHRlbnNpb25zICYmIGdsdGYuZXh0ZW5zaW9uc1tcIk9BU0lTX21hdGVyaWFsc19yZW1hcFwiXTtcbiAgICAgIGlmIChyZW1hcE1hdGVyaWFscyAmJiByZW1hcE1hdGVyaWFsc1ttYXRlcmlhbEluZGV4XSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgIHJlbWFwTWF0ZXJpYWxzW21hdGVyaWFsSW5kZXhdLnRoZW4oKG10bCkgPT4ge1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0TWF0ZXJpYWwobXRsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSBtYXRlcmlhbHM/LlttYXRlcmlhbEluZGV4XSB8fCBTY2VuZVBhcnNlci5fZ2V0RGVmYXVsdE1hdGVyaWFsKGVuZ2luZSk7XG4gICAgICAgIHJlbmRlcmVyLnNldE1hdGVyaWFsKG1hdGVyaWFsKTtcblxuICAgICAgICAvLyBFbmFibGUgdmVydGV4IGNvbG9yIGlmIG1lc2ggaGFzIENPTE9SXzAgdmVydGV4IGVsZW1lbnRcbiAgICAgICAgbWVzaC52ZXJ0ZXhFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuc2VtYW50aWMgPT09IFwiQ09MT1JfMFwiKSB7XG4gICAgICAgICAgICByZW5kZXJlci5lbmFibGVWZXJ0ZXhDb2xvciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBleHRlbnNpb25zID0ge30gfSA9IGdsdGZNZXNoUHJpbWl0aXZlc1tpXTtcbiAgICAgIGNvbnN0IHsgS0hSX21hdGVyaWFsc192YXJpYW50cyB9ID0gZXh0ZW5zaW9ucztcbiAgICAgIGlmIChLSFJfbWF0ZXJpYWxzX3ZhcmlhbnRzKSB7XG4gICAgICAgIFBhcnNlci5wYXJzZUVuZ2luZVJlc291cmNlKFwiS0hSX21hdGVyaWFsc192YXJpYW50c1wiLCBLSFJfbWF0ZXJpYWxzX3ZhcmlhbnRzLCByZW5kZXJlciwgY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVBbmltYXRvcihjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0Lmhhc1NraW5uZWQgJiYgIWNvbnRleHQuZ2xURlJlc291cmNlLmFuaW1hdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRlZmF1bHRTY2VuZVJvb3QsIGFuaW1hdGlvbnMgfSA9IGNvbnRleHQuZ2xURlJlc291cmNlO1xuICAgIGNvbnN0IGFuaW1hdG9yID0gZGVmYXVsdFNjZW5lUm9vdC5hZGRDb21wb25lbnQoQW5pbWF0b3IpO1xuICAgIGNvbnN0IGFuaW1hdG9yQ29udHJvbGxlciA9IG5ldyBBbmltYXRvckNvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBsYXllciA9IG5ldyBBbmltYXRvckNvbnRyb2xsZXJMYXllcihcImxheWVyXCIpO1xuICAgIGNvbnN0IGFuaW1hdG9yU3RhdGVNYWNoaW5lID0gbmV3IEFuaW1hdG9yU3RhdGVNYWNoaW5lKCk7XG4gICAgYW5pbWF0b3JDb250cm9sbGVyLmFkZExheWVyKGxheWVyKTtcbiAgICBhbmltYXRvci5hbmltYXRvckNvbnRyb2xsZXIgPSBhbmltYXRvckNvbnRyb2xsZXI7XG4gICAgbGF5ZXIuc3RhdGVNYWNoaW5lID0gYW5pbWF0b3JTdGF0ZU1hY2hpbmU7XG4gICAgaWYgKGFuaW1hdGlvbnMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhbmltYXRpb25DbGlwID0gYW5pbWF0aW9uc1tpXTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGFuaW1hdGlvbkNsaXAubmFtZTtcbiAgICAgICAgY29uc3QgdW5pcXVlTmFtZSA9IGFuaW1hdG9yU3RhdGVNYWNoaW5lLm1ha2VVbmlxdWVTdGF0ZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICh1bmlxdWVOYW1lICE9PSBuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBBbmltYXRvclN0YXRlIG5hbWUgaXMgZXhpc3RlZCwgbmFtZTogJHtuYW1lfSByZXNldCB0byAke3VuaXF1ZU5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5pbWF0b3JTdGF0ZSA9IGFuaW1hdG9yU3RhdGVNYWNoaW5lLmFkZFN0YXRlKHVuaXF1ZU5hbWUpO1xuICAgICAgICBhbmltYXRvclN0YXRlLmNsaXAgPSBhbmltYXRpb25DbGlwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgRW50aXR5LCBTa2luIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4IH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtbWF0aFwiO1xuaW1wb3J0IHsgR0xURlV0aWwgfSBmcm9tIFwiLi4vR0xURlV0aWxcIjtcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuL1BhcnNlclwiO1xuaW1wb3J0IHsgUGFyc2VyQ29udGV4dCB9IGZyb20gXCIuL1BhcnNlckNvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIFNraW5QYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwYXJzZShjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgeyBnbFRGUmVzb3VyY2UsIGdsdGYsIGJ1ZmZlcnMgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgeyBlbnRpdGllcyB9ID0gZ2xURlJlc291cmNlO1xuICAgIGNvbnN0IGdsdGZTa2lucyA9IGdsdGYuc2tpbnM7XG5cbiAgICBpZiAoIWdsdGZTa2lucykgcmV0dXJuO1xuXG4gICAgY29uc3QgY291bnQgPSBnbHRmU2tpbnMubGVuZ3RoO1xuICAgIGNvbnN0IHNraW5zID0gbmV3IEFycmF5PFNraW4+KGNvdW50KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgY29uc3QgeyBpbnZlcnNlQmluZE1hdHJpY2VzLCBza2VsZXRvbiwgam9pbnRzLCBuYW1lID0gYFNLSU5fJHtpfWAgfSA9IGdsdGZTa2luc1tpXTtcbiAgICAgIGNvbnN0IGpvaW50Q291bnQgPSBqb2ludHMubGVuZ3RoO1xuXG4gICAgICBjb25zdCBza2luID0gbmV3IFNraW4obmFtZSk7XG4gICAgICBza2luLmludmVyc2VCaW5kTWF0cmljZXMubGVuZ3RoID0gam9pbnRDb3VudDtcblxuICAgICAgLy8gcGFyc2UgSUJNXG4gICAgICBjb25zdCBhY2Nlc3NvciA9IGdsdGYuYWNjZXNzb3JzW2ludmVyc2VCaW5kTWF0cmljZXNdO1xuICAgICAgY29uc3QgYnVmZmVyID0gR0xURlV0aWwuZ2V0QWNjZXNzb3JCdWZmZXIoY29udGV4dCwgZ2x0ZiwgYWNjZXNzb3IpLmRhdGE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGpvaW50Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBpbnZlcnNlQmluZE1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgICAgICAgaW52ZXJzZUJpbmRNYXRyaXguY29weUZyb21BcnJheShidWZmZXIsIGkgKiAxNik7XG4gICAgICAgIHNraW4uaW52ZXJzZUJpbmRNYXRyaWNlc1tpXSA9IGludmVyc2VCaW5kTWF0cml4O1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgam9pbnRzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGpvaW50Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBqb2ludEluZGV4ID0gam9pbnRzW2ldO1xuICAgICAgICBjb25zdCBqb2ludE5hbWUgPSBlbnRpdGllc1tqb2ludEluZGV4XS5uYW1lO1xuICAgICAgICBza2luLmpvaW50c1tpXSA9IGpvaW50TmFtZTtcbiAgICAgICAgLy8gQHRvZG8gVGVtcG9yYXJ5IHNvbHV0aW9uLCBidXQgaXQgY2FuIGFsbGV2aWF0ZSB0aGUgY3VycmVudCBCVUcsIGFuZCB0aGUgc2tpbm5pbmcgZGF0YSBtZWNoYW5pc20gb2YgU2tpbm5lZE1lc2hSZW5kZXJlciB3aWxsIGJlIGNvbXBsZXRlbHkgcmVmYWN0b3JlZCBpbiB0aGUgZnV0dXJlXG4gICAgICAgIGZvciAobGV0IGogPSBlbnRpdGllcy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgIGlmIChqb2ludEluZGV4ICE9PSBqICYmIGVudGl0aWVzW2pdLm5hbWUgPT09IGpvaW50TmFtZSkge1xuICAgICAgICAgICAgZW50aXRpZXNbal0ubmFtZSA9IGAke2pvaW50TmFtZX1fJHtqfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBza2VsZXRvblxuICAgICAgaWYgKHNrZWxldG9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2tpbi5za2VsZXRvbiA9IGVudGl0aWVzW3NrZWxldG9uXS5uYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm9vdEJvbmUgPSB0aGlzLl9maW5kU2tlbGV0b25Sb290Qm9uZShqb2ludHMsIGVudGl0aWVzKTtcbiAgICAgICAgaWYgKHJvb3RCb25lKSB7XG4gICAgICAgICAgc2tpbi5za2VsZXRvbiA9IHJvb3RCb25lLm5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgXCJGYWlsZWQgdG8gZmluZCBza2VsZXRvbiByb290IGJvbmUuXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2tpbnNbaV0gPSBza2luO1xuICAgIH1cblxuICAgIGdsVEZSZXNvdXJjZS5za2lucyA9IHNraW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFNrZWxldG9uUm9vdEJvbmUoam9pbnRzOiBudW1iZXJbXSwgZW50aXRpZXM6IEVudGl0eVtdKTogRW50aXR5IHtcbiAgICBjb25zdCBwYXRocyA9IDxSZWNvcmQ8bnVtYmVyLCBFbnRpdHlbXT4+e307XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBqb2ludHMpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBuZXcgQXJyYXk8RW50aXR5PigpO1xuICAgICAgbGV0IGVudGl0eSA9IGVudGl0aWVzW2luZGV4XTtcbiAgICAgIHdoaWxlIChlbnRpdHkpIHtcbiAgICAgICAgcGF0aC51bnNoaWZ0KGVudGl0eSk7XG4gICAgICAgIGVudGl0eSA9IGVudGl0eS5wYXJlbnQ7XG4gICAgICB9XG4gICAgICBwYXRoc1tpbmRleF0gPSBwYXRoO1xuICAgIH1cblxuICAgIGxldCByb290Tm9kZSA9IDxFbnRpdHk+bnVsbDtcbiAgICBmb3IgKGxldCBpID0gMDsgOyBpKyspIHtcbiAgICAgIGxldCBwYXRoID0gcGF0aHNbam9pbnRzWzBdXTtcbiAgICAgIGlmIChpID49IHBhdGgubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByb290Tm9kZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW50aXR5ID0gcGF0aFtpXTtcbiAgICAgIGZvciAobGV0IGogPSAxLCBtID0gam9pbnRzLmxlbmd0aDsgaiA8IG07IGorKykge1xuICAgICAgICBwYXRoID0gcGF0aHNbam9pbnRzW2pdXTtcbiAgICAgICAgaWYgKGkgPj0gcGF0aC5sZW5ndGggfHwgZW50aXR5ICE9PSBwYXRoW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHJvb3ROb2RlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJvb3ROb2RlID0gZW50aXR5O1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQXNzZXRQcm9taXNlLCBBc3NldFR5cGUsIFRleHR1cmUyRCwgVGV4dHVyZUZpbHRlck1vZGUsIFRleHR1cmVXcmFwTW9kZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IEdMVEZVdGlsIH0gZnJvbSBcIi4uL0dMVEZVdGlsXCI7XG5pbXBvcnQgeyBJU2FtcGxlciwgVGV4dHVyZU1hZ0ZpbHRlciwgVGV4dHVyZU1pbkZpbHRlciwgVGV4dHVyZVdyYXBNb2RlIGFzIEdMVEZUZXh0dXJlV3JhcE1vZGUgfSBmcm9tIFwiLi4vU2NoZW1hXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi9QYXJzZXJcIjtcbmltcG9ydCB7IFBhcnNlckNvbnRleHQgfSBmcm9tIFwiLi9QYXJzZXJDb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBUZXh0dXJlUGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dyYXBNYXAgPSB7XG4gICAgW0dMVEZUZXh0dXJlV3JhcE1vZGUuQ0xBTVBfVE9fRURHRV06IFRleHR1cmVXcmFwTW9kZS5DbGFtcCxcbiAgICBbR0xURlRleHR1cmVXcmFwTW9kZS5NSVJST1JFRF9SRVBFQVRdOiBUZXh0dXJlV3JhcE1vZGUuTWlycm9yLFxuICAgIFtHTFRGVGV4dHVyZVdyYXBNb2RlLlJFUEVBVF06IFRleHR1cmVXcmFwTW9kZS5SZXBlYXRcbiAgfTtcblxuICBwYXJzZShjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogQXNzZXRQcm9taXNlPFRleHR1cmUyRFtdPiB7XG4gICAgY29uc3QgeyBnbFRGUmVzb3VyY2UsIGdsdGYsIGJ1ZmZlcnMgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgeyBlbmdpbmUsIHVybCB9ID0gZ2xURlJlc291cmNlO1xuXG4gICAgaWYgKGdsdGYudGV4dHVyZXMpIHtcbiAgICAgIGNvbnN0IHRleHR1cmVzUHJvbWlzZUluZm8gPSBjb250ZXh0LnRleHR1cmVzUHJvbWlzZUluZm87XG4gICAgICBBc3NldFByb21pc2UuYWxsKFxuICAgICAgICBnbHRmLnRleHR1cmVzLm1hcCgoeyBzYW1wbGVyLCBzb3VyY2UgPSAwLCBuYW1lOiB0ZXh0dXJlTmFtZSB9LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgdXJpLCBidWZmZXJWaWV3OiBidWZmZXJWaWV3SW5kZXgsIG1pbWVUeXBlLCBuYW1lOiBpbWFnZU5hbWUgfSA9IGdsdGYuaW1hZ2VzW3NvdXJjZV07XG4gICAgICAgICAgaWYgKHVyaSkge1xuICAgICAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBrdHggZXh0ZW5zaW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21haW4vZXh0ZW5zaW9ucy8yLjAvS2hyb25vcy9LSFJfdGV4dHVyZV9iYXNpc3UvUkVBRE1FLm1kXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHVyaS5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBleHQgPSB1cmkuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZXh0LnN0YXJ0c1dpdGgoXCJrdHhcIikgPyBBc3NldFR5cGUuS1RYIDogQXNzZXRUeXBlLlRleHR1cmUyRDtcbiAgICAgICAgICAgIHJldHVybiBlbmdpbmUucmVzb3VyY2VNYW5hZ2VyXG4gICAgICAgICAgICAgIC5sb2FkPFRleHR1cmUyRD4oe1xuICAgICAgICAgICAgICAgIHVybDogR0xURlV0aWwucGFyc2VSZWxhdGl2ZVVybCh1cmwsIHVyaSksXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAudGhlbigodGV4dHVyZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICB0ZXh0dXJlLm5hbWUgPSB0ZXh0dXJlTmFtZSB8fCBpbWFnZU5hbWUgfHwgYHRleHR1cmVfJHtpbmRleH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2FtcGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVNhbXBsZXIodGV4dHVyZSwgZ2x0Zi5zYW1wbGVyc1tzYW1wbGVyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyVmlldyA9IGdsdGYuYnVmZmVyVmlld3NbYnVmZmVyVmlld0luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlclZpZXdEYXRhID0gR0xURlV0aWwuZ2V0QnVmZmVyVmlld0RhdGEoYnVmZmVyVmlldywgYnVmZmVycyk7XG4gICAgICAgICAgICByZXR1cm4gR0xURlV0aWwubG9hZEltYWdlQnVmZmVyKGJ1ZmZlclZpZXdEYXRhLCBtaW1lVHlwZSkudGhlbigoaW1hZ2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoZW5naW5lLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgdGV4dHVyZS5zZXRJbWFnZVNvdXJjZShpbWFnZSk7XG4gICAgICAgICAgICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzKCk7XG4gICAgICAgICAgICAgIHRleHR1cmUubmFtZSA9IHRleHR1cmVOYW1lIHx8IGltYWdlTmFtZSB8fCBgdGV4dHVyZV8ke2luZGV4fWA7XG4gICAgICAgICAgICAgIGlmIChzYW1wbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVNhbXBsZXIodGV4dHVyZSwgZ2x0Zi5zYW1wbGVyc1tzYW1wbGVyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAgIC50aGVuKCh0ZXh0dXJlczogVGV4dHVyZTJEW10pID0+IHtcbiAgICAgICAgICBnbFRGUmVzb3VyY2UudGV4dHVyZXMgPSB0ZXh0dXJlcztcbiAgICAgICAgICB0ZXh0dXJlc1Byb21pc2VJbmZvLnJlc29sdmUodGV4dHVyZXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2godGV4dHVyZXNQcm9taXNlSW5mby5yZWplY3QpO1xuICAgICAgcmV0dXJuIHRleHR1cmVzUHJvbWlzZUluZm8ucHJvbWlzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVNhbXBsZXIodGV4dHVyZTogVGV4dHVyZTJELCBzYW1wbGVyOiBJU2FtcGxlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIHdyYXBTLCB3cmFwVCB9ID0gc2FtcGxlcjtcblxuICAgIGlmIChtYWdGaWx0ZXIgfHwgbWluRmlsdGVyKSB7XG4gICAgICBpZiAobWFnRmlsdGVyID09PSBUZXh0dXJlTWFnRmlsdGVyLk5FQVJFU1QpIHtcbiAgICAgICAgdGV4dHVyZS5maWx0ZXJNb2RlID0gVGV4dHVyZUZpbHRlck1vZGUuUG9pbnQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbkZpbHRlciA8PSBUZXh0dXJlTWluRmlsdGVyLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCkge1xuICAgICAgICB0ZXh0dXJlLmZpbHRlck1vZGUgPSBUZXh0dXJlRmlsdGVyTW9kZS5CaWxpbmVhcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHR1cmUuZmlsdGVyTW9kZSA9IFRleHR1cmVGaWx0ZXJNb2RlLlRyaWxpbmVhcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod3JhcFMpIHtcbiAgICAgIHRleHR1cmUud3JhcE1vZGVVID0gVGV4dHVyZVBhcnNlci5fd3JhcE1hcFt3cmFwU107XG4gICAgfVxuXG4gICAgaWYgKHdyYXBUKSB7XG4gICAgICB0ZXh0dXJlLndyYXBNb2RlViA9IFRleHR1cmVQYXJzZXIuX3dyYXBNYXBbd3JhcFRdO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4vUGFyc2VyXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4vUGFyc2VyQ29udGV4dFwiO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yIGV4dGVuZHMgUGFyc2VyIHtcbiAgcGFyc2UoY29udGV4dDogUGFyc2VyQ29udGV4dCk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFzc2V0OiB7IHZlcnNpb24gfSxcbiAgICAgIGV4dGVuc2lvbnNVc2VkLFxuICAgICAgZXh0ZW5zaW9uc1JlcXVpcmVkXG4gICAgfSA9IGNvbnRleHQuZ2x0ZjtcblxuICAgIGNvbnN0IGdsdGZWZXJzaW9uID0gTnVtYmVyKHZlcnNpb24pO1xuICAgIGlmICghKGdsdGZWZXJzaW9uID49IDIgJiYgZ2x0ZlZlcnNpb24gPCAzKSkge1xuICAgICAgdGhyb3cgXCJPbmx5IHN1cHBvcnQgZ2x0ZiAyLnguXCI7XG4gICAgfVxuXG4gICAgaWYgKGV4dGVuc2lvbnNVc2VkKSB7XG4gICAgICBMb2dnZXIuaW5mbyhcImV4dGVuc2lvbnNVc2VkOiBcIiwgZXh0ZW5zaW9uc1VzZWQpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHRlbnNpb25zVXNlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIVBhcnNlci5oYXNFeHRlbnNpb25QYXJzZXIoZXh0ZW5zaW9uc1VzZWRbaV0pKSB7XG4gICAgICAgICAgTG9nZ2VyLndhcm4oYEV4dGVuc2lvbiAke2V4dGVuc2lvbnNVc2VkW2ldfSBpcyBub3QgaW1wbGVtZW50ZWQsIHlvdSBjYW4gY3VzdG9taXplIHRoaXMgZXh0ZW5zaW9uIGluIGdsdGYuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9uc1JlcXVpcmVkKSB7XG4gICAgICBMb2dnZXIuaW5mbyhgZXh0ZW5zaW9uc1JlcXVpcmVkOiAke2V4dGVuc2lvbnNSZXF1aXJlZH1gKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXh0ZW5zaW9uc1JlcXVpcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvblJlcXVpcmVkID0gZXh0ZW5zaW9uc1JlcXVpcmVkW2ldO1xuXG4gICAgICAgIGlmICghUGFyc2VyLmhhc0V4dGVuc2lvblBhcnNlcihleHRlbnNpb25SZXF1aXJlZCkpIHtcbiAgICAgICAgICBMb2dnZXIuZXJyb3IoYEdMVEYgcGFyc2VyIGhhcyBub3Qgc3VwcG9ydGVkIHJlcXVpcmVkIGV4dGVuc2lvbiAke2V4dGVuc2lvblJlcXVpcmVkfS5gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBQYXJzZXIuaW5pdGlhbGl6ZShleHRlbnNpb25SZXF1aXJlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEFzc2V0UHJvbWlzZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IEdMVEZSZXNvdXJjZSB9IGZyb20gXCIuL0dMVEZSZXNvdXJjZVwiO1xuaW1wb3J0IHsgQW5pbWF0aW9uUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyL0FuaW1hdGlvblBhcnNlclwiO1xuaW1wb3J0IHsgQnVmZmVyUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyL0J1ZmZlclBhcnNlclwiO1xuaW1wb3J0IHsgRW50aXR5UGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyL0VudGl0eVBhcnNlclwiO1xuaW1wb3J0IHsgTWF0ZXJpYWxQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXIvTWF0ZXJpYWxQYXJzZXJcIjtcbmltcG9ydCB7IE1lc2hQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXIvTWVzaFBhcnNlclwiO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyL1BhcnNlclwiO1xuaW1wb3J0IHsgUGFyc2VyQ29udGV4dCB9IGZyb20gXCIuL3BhcnNlci9QYXJzZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBTY2VuZVBhcnNlciB9IGZyb20gXCIuL3BhcnNlci9TY2VuZVBhcnNlclwiO1xuaW1wb3J0IHsgU2tpblBhcnNlciB9IGZyb20gXCIuL3BhcnNlci9Ta2luUGFyc2VyXCI7XG5pbXBvcnQgeyBUZXh0dXJlUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyL1RleHR1cmVQYXJzZXJcIjtcbmltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gXCIuL3BhcnNlci9WYWxpZGF0b3JcIjtcblxuZXhwb3J0IGNsYXNzIEdMVEZQYXJzZXIge1xuICBzdGF0aWMgZGVmYXVsdFBpcGVsaW5lID0gbmV3IEdMVEZQYXJzZXIoW1xuICAgIEJ1ZmZlclBhcnNlcixcbiAgICBWYWxpZGF0b3IsXG4gICAgVGV4dHVyZVBhcnNlcixcbiAgICBNYXRlcmlhbFBhcnNlcixcbiAgICBNZXNoUGFyc2VyLFxuICAgIEVudGl0eVBhcnNlcixcbiAgICBTa2luUGFyc2VyLFxuICAgIEFuaW1hdGlvblBhcnNlcixcbiAgICBTY2VuZVBhcnNlclxuICBdKTtcblxuICBwcml2YXRlIF9waXBlczogUGFyc2VyW10gPSBbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHBpcGVzOiAobmV3ICgpID0+IFBhcnNlcilbXSkge1xuICAgIHBpcGVzLmZvckVhY2goKHBpcGU6IG5ldyAoKSA9PiBQYXJzZXIsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuX3BpcGVzW2luZGV4XSA9IG5ldyBwaXBlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZShjb250ZXh0OiBQYXJzZXJDb250ZXh0KTogQXNzZXRQcm9taXNlPEdMVEZSZXNvdXJjZT4ge1xuICAgIGNvbnN0IGdsVEZSZXNvdXJjZSA9IGNvbnRleHQuZ2xURlJlc291cmNlO1xuICAgIGxldCBsYXN0UGlwZTtcblxuICAgIHJldHVybiBuZXcgQXNzZXRQcm9taXNlPEdMVEZSZXNvdXJjZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcGlwZXMuZm9yRWFjaCgocGFyc2VyOiBQYXJzZXIpID0+IHtcbiAgICAgICAgaWYgKGxhc3RQaXBlKSB7XG4gICAgICAgICAgbGFzdFBpcGUgPSBsYXN0UGlwZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UoY29udGV4dCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGxhc3RQaXBlLmNhbmNlbCkge1xuICAgICAgICAgICAgY29udGV4dC5jaGFpblByb21pc2VzLnB1c2gobGFzdFBpcGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0UGlwZSA9IHBhcnNlci5wYXJzZShjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChsYXN0UGlwZSkge1xuICAgICAgICBsYXN0UGlwZVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZ2xURlJlc291cmNlKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBbmltYXRpb25DbGlwLFxuICBDYW1lcmEsXG4gIEVuZ2luZSxcbiAgRW5naW5lT2JqZWN0LFxuICBFbnRpdHksXG4gIExpZ2h0LFxuICBNYXRlcmlhbCxcbiAgTW9kZWxNZXNoLFxuICBSZW5kZXJlcixcbiAgU2tpbixcbiAgVGV4dHVyZTJEXG59IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcblxuLyoqXG4gKiBQcm9kdWN0IGFmdGVyIEdMVEYgcGFyc2VyLCB1c3VhbGx5LCBgZGVmYXVsdFNjZW5lUm9vdGAgaXMgb25seSBuZWVkZWQgdG8gdXNlLlxuICovXG5leHBvcnQgY2xhc3MgR0xURlJlc291cmNlIGV4dGVuZHMgRW5naW5lT2JqZWN0IHtcbiAgLyoqIEdMVEYgZmlsZSB1cmwuICovXG4gIHVybDogc3RyaW5nO1xuICAvKiogVGV4dHVyZTJEIGFmdGVyIFRleHR1cmVQYXJzZXIuICovXG4gIHRleHR1cmVzPzogVGV4dHVyZTJEW107XG4gIC8qKiBNYXRlcmlhbCBhZnRlciBNYXRlcmlhbFBhcnNlci4gKi9cbiAgbWF0ZXJpYWxzPzogTWF0ZXJpYWxbXTtcbiAgLyoqIE1vZGVsTWVzaCBhZnRlciBNZXNoUGFyc2VyLiAqL1xuICBtZXNoZXM/OiBNb2RlbE1lc2hbXVtdO1xuICAvKiogU2tpbiBhZnRlciBTa2luUGFyc2VyLiAqL1xuICBza2lucz86IFNraW5bXTtcbiAgLyoqIEFuaW1hdGlvbkNsaXAgYWZ0ZXIgQW5pbWF0aW9uUGFyc2VyLiAqL1xuICBhbmltYXRpb25zPzogQW5pbWF0aW9uQ2xpcFtdO1xuICAvKiogRW50aXR5IGFmdGVyIEVudGl0eVBhcnNlci4gKi9cbiAgZW50aXRpZXM6IEVudGl0eVtdO1xuICAvKiogQ2FtZXJhIGFmdGVyIFNjZW5lUGFyc2VyLiAqL1xuICBjYW1lcmFzPzogQ2FtZXJhW107XG4gIC8qKiBFeHBvcnQgbGlnaHRzIGluIGV4dGVuc2lvbiBLSFJfbGlnaHRzX3B1bmN0dWFsICovXG4gIGxpZ2h0cz86IExpZ2h0W107XG4gIC8qKiBSb290RW50aXRpZXMgYWZ0ZXIgU2NlbmVQYXJzZXIuICovXG4gIHNjZW5lUm9vdHM6IEVudGl0eVtdO1xuICAvKiogUm9vdEVudGl0eSBhZnRlciBTY2VuZVBhcnNlci4gKi9cbiAgZGVmYXVsdFNjZW5lUm9vdDogRW50aXR5O1xuICAvKiogUmVuZGVyZXIgY2FuIHJlcGxhY2UgbWF0ZXJpYWwgYnkgYHJlbmRlcmVyLnNldE1hdGVyaWFsYCBpZiBnbHRmIHVzZSBwbHVnaW4taW4gS0hSX21hdGVyaWFsc192YXJpYW50cy4gKi9cbiAgdmFyaWFudHM/OiB7IHJlbmRlcmVyOiBSZW5kZXJlcjsgbWF0ZXJpYWw6IE1hdGVyaWFsOyB2YXJpYW50czogc3RyaW5nW10gfVtdO1xuXG4gIGNvbnN0cnVjdG9yKGVuZ2luZTogRW5naW5lLCB1cmw6IHN0cmluZykge1xuICAgIHN1cGVyKGVuZ2luZSk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgdGhpcy5kZWZhdWx0U2NlbmVSb290LmRlc3Ryb3koKTtcblxuICAgIHRoaXMudGV4dHVyZXMgPSBudWxsO1xuICAgIHRoaXMubWF0ZXJpYWxzID0gbnVsbDtcbiAgICB0aGlzLm1lc2hlcyA9IG51bGw7XG4gICAgdGhpcy5za2lucyA9IG51bGw7XG4gICAgdGhpcy5hbmltYXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmVudGl0aWVzID0gbnVsbDtcbiAgICB0aGlzLmNhbWVyYXMgPSBudWxsO1xuICAgIHRoaXMubGlnaHRzID0gbnVsbDtcbiAgICB0aGlzLnNjZW5lUm9vdHMgPSBudWxsO1xuICAgIHRoaXMudmFyaWFudHMgPSBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQgeyBBc3NldFByb21pc2UsIEFzc2V0VHlwZSwgTG9hZGVyLCBMb2FkSXRlbSwgcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTWFuYWdlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IEdMVEZQYXJzZXIgfSBmcm9tIFwiLi9nbHRmL0dMVEZQYXJzZXJcIjtcbmltcG9ydCB7IEdMVEZSZXNvdXJjZSB9IGZyb20gXCIuL2dsdGYvR0xURlJlc291cmNlXCI7XG5pbXBvcnQgeyBQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4vZ2x0Zi9wYXJzZXIvUGFyc2VyQ29udGV4dFwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLlByZWZhYiwgW1wiZ2x0ZlwiLCBcImdsYlwiXSlcbmV4cG9ydCBjbGFzcyBHTFRGTG9hZGVyIGV4dGVuZHMgTG9hZGVyPEdMVEZSZXNvdXJjZT4ge1xuICBsb2FkKGl0ZW06IExvYWRJdGVtLCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IFJlY29yZDxzdHJpbmcsIEFzc2V0UHJvbWlzZTxhbnk+PiB7XG4gICAgY29uc3QgdXJsID0gaXRlbS51cmw7XG4gICAgY29uc3QgY29udGV4dCA9IG5ldyBQYXJzZXJDb250ZXh0KHVybCk7XG4gICAgY29uc3QgZ2xURlJlc291cmNlID0gbmV3IEdMVEZSZXNvdXJjZShyZXNvdXJjZU1hbmFnZXIuZW5naW5lLCB1cmwpO1xuICAgIGNvbnN0IG1hc3RlclByb21pc2VJbmZvID0gY29udGV4dC5tYXN0ZXJQcm9taXNlSW5mbztcblxuICAgIGNvbnRleHQuZ2xURlJlc291cmNlID0gZ2xURlJlc291cmNlO1xuICAgIGNvbnRleHQua2VlcE1lc2hEYXRhID0gaXRlbS5wYXJhbXM/LmtlZXBNZXNoRGF0YSA/PyBmYWxzZTtcblxuICAgIG1hc3RlclByb21pc2VJbmZvLm9uQ2FuY2VsKCgpID0+IHtcbiAgICAgIGNvbnN0IHsgY2hhaW5Qcm9taXNlcyB9ID0gY29udGV4dDtcbiAgICAgIGZvciAoY29uc3QgcHJvbWlzZSBvZiBjaGFpblByb21pc2VzKSB7XG4gICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBHTFRGUGFyc2VyLmRlZmF1bHRQaXBlbGluZVxuICAgICAgLnBhcnNlKGNvbnRleHQpXG4gICAgICAudGhlbihtYXN0ZXJQcm9taXNlSW5mby5yZXNvbHZlKVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIG1hc3RlclByb21pc2VJbmZvLnJlamVjdChgRXJyb3IgbG9hZGluZyBnbFRGIG1vZGVsIGZyb20gJHt1cmx9IC5gKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnRleHQucHJvbWlzZU1hcDtcbiAgfVxufVxuXG4vKipcbiAqIEdsVEYgbG9hZGVyIHBhcmFtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHTFRGUGFyYW1zIHtcbiAgLyoqXG4gICAqIEBiZXRhIE5vdyBvbmx5IGNvbnRhaW5zIHZlcnRleCBpbmZvcm1hdGlvbiwgbmVlZCB0byBpbXByb3ZlLlxuICAgKiBLZWVwIHJhdyBtZXNoIGRhdGEgZm9yIGdsVEYgcGFyc2VyLCBkZWZhdWx0IGlzIGZhbHNlLlxuICAgKi9cbiAga2VlcE1lc2hEYXRhOiBib29sZWFuO1xufVxuIiwiaW1wb3J0IHtcbiAgQXNzZXRQcm9taXNlLFxuICBBc3NldFR5cGUsXG4gIExvYWRlcixcbiAgTG9hZEl0ZW0sXG4gIHJlc291cmNlTG9hZGVyLFxuICBSZXNvdXJjZU1hbmFnZXIsXG4gIFRleHR1cmVDdWJlLFxuICBUZXh0dXJlQ3ViZUZhY2Vcbn0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHsgQ29sb3IsIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1tYXRoXCI7XG5cbmNvbnN0IFBJID0gTWF0aC5QSTtcblxuaW50ZXJmYWNlIElIRFJIZWFkZXIge1xuICAvKipcbiAgICogVGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIGluIHBpeGVscy5cbiAgICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIGluIHBpeGVscy5cbiAgICovXG4gIGhlaWdodDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgaW4gdGhlIGJpbmFyeSBmaWxlLlxuICAgKi9cbiAgZGF0YVBvc2l0aW9uOiBudW1iZXI7XG59XG5cbkByZXNvdXJjZUxvYWRlcihBc3NldFR5cGUuSERSLCBbXCJoZHJcIl0pXG5jbGFzcyBIRFJMb2FkZXIgZXh0ZW5kcyBMb2FkZXI8VGV4dHVyZUN1YmU+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3JpZ2h0Qm90dG9tQmFjayA9IG5ldyBWZWN0b3IzKDEuMCwgLTEuMCwgLTEuMCk7XG4gIHByaXZhdGUgc3RhdGljIF9yaWdodEJvdHRvbUZyb250ID0gbmV3IFZlY3RvcjMoMS4wLCAtMS4wLCAxLjApO1xuICBwcml2YXRlIHN0YXRpYyBfcmlnaHRVcEJhY2sgPSBuZXcgVmVjdG9yMygxLjAsIDEuMCwgLTEuMCk7XG4gIHByaXZhdGUgc3RhdGljIF9yaWdodFVwRnJvbnQgPSBuZXcgVmVjdG9yMygxLjAsIDEuMCwgMS4wKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xlZnRCb3R0b21CYWNrID0gbmV3IFZlY3RvcjMoLTEuMCwgLTEuMCwgLTEuMCk7XG4gIHByaXZhdGUgc3RhdGljIF9sZWZ0Qm90dG9tRnJvbnQgPSBuZXcgVmVjdG9yMygtMS4wLCAtMS4wLCAxLjApO1xuICBwcml2YXRlIHN0YXRpYyBfbGVmdFVwQmFjayA9IG5ldyBWZWN0b3IzKC0xLjAsIDEuMCwgLTEuMCk7XG4gIHByaXZhdGUgc3RhdGljIF9sZWZ0VXBGcm9udCA9IG5ldyBWZWN0b3IzKC0xLjAsIDEuMCwgMS4wKTtcblxuICBwcml2YXRlIHN0YXRpYyBfZmFjZVJpZ2h0ID0gW1xuICAgIEhEUkxvYWRlci5fcmlnaHRCb3R0b21CYWNrLFxuICAgIEhEUkxvYWRlci5fcmlnaHRCb3R0b21Gcm9udCxcbiAgICBIRFJMb2FkZXIuX3JpZ2h0VXBCYWNrLFxuICAgIEhEUkxvYWRlci5fcmlnaHRVcEZyb250XG4gIF07XG4gIHByaXZhdGUgc3RhdGljIF9mYWNlTGVmdCA9IFtcbiAgICBIRFJMb2FkZXIuX2xlZnRCb3R0b21Gcm9udCxcbiAgICBIRFJMb2FkZXIuX2xlZnRCb3R0b21CYWNrLFxuICAgIEhEUkxvYWRlci5fbGVmdFVwRnJvbnQsXG4gICAgSERSTG9hZGVyLl9sZWZ0VXBCYWNrXG4gIF07XG4gIHByaXZhdGUgc3RhdGljIF9mYWNlVXAgPSBbXG4gICAgSERSTG9hZGVyLl9sZWZ0Qm90dG9tRnJvbnQsXG4gICAgSERSTG9hZGVyLl9yaWdodEJvdHRvbUZyb250LFxuICAgIEhEUkxvYWRlci5fbGVmdEJvdHRvbUJhY2ssXG4gICAgSERSTG9hZGVyLl9yaWdodEJvdHRvbUJhY2tcbiAgXTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2ZhY2VCb3R0b20gPSBbXG4gICAgSERSTG9hZGVyLl9sZWZ0VXBCYWNrLFxuICAgIEhEUkxvYWRlci5fcmlnaHRVcEJhY2ssXG4gICAgSERSTG9hZGVyLl9sZWZ0VXBGcm9udCxcbiAgICBIRFJMb2FkZXIuX3JpZ2h0VXBGcm9udFxuICBdO1xuICBwcml2YXRlIHN0YXRpYyBfZmFjZUZyb250ID0gW1xuICAgIEhEUkxvYWRlci5fbGVmdEJvdHRvbUJhY2ssXG4gICAgSERSTG9hZGVyLl9yaWdodEJvdHRvbUJhY2ssXG4gICAgSERSTG9hZGVyLl9sZWZ0VXBCYWNrLFxuICAgIEhEUkxvYWRlci5fcmlnaHRVcEJhY2tcbiAgXTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2ZhY2VCYWNrID0gW1xuICAgIEhEUkxvYWRlci5fcmlnaHRCb3R0b21Gcm9udCxcbiAgICBIRFJMb2FkZXIuX2xlZnRCb3R0b21Gcm9udCxcbiAgICBIRFJMb2FkZXIuX3JpZ2h0VXBGcm9udCxcbiAgICBIRFJMb2FkZXIuX2xlZnRVcEZyb250XG4gIF07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXAyVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wM1ZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVtcDRWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXA1VmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbnZlcnRUb0N1YmVtYXAoXG4gICAgcGl4ZWxzOiBVaW50OEFycmF5LFxuICAgIGlucHV0V2lkdGg6IG51bWJlcixcbiAgICBpbnB1dEhlaWdodDogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlclxuICApOiBVaW50OENsYW1wZWRBcnJheVtdIHtcbiAgICBpZiAoIXBpeGVscykge1xuICAgICAgdGhyb3cgXCJDb252ZXJ0UGFub3JhbWFUb0N1YmVtYXA6IGlucHV0IGNhbm5vdCBiZSBudWxsXCI7XG4gICAgfVxuXG4gICAgaWYgKHBpeGVscy5sZW5ndGggIT0gaW5wdXRXaWR0aCAqIGlucHV0SGVpZ2h0ICogNCkge1xuICAgICAgdGhyb3cgXCJDb252ZXJ0UGFub3JhbWFUb0N1YmVtYXA6IGlucHV0IHNpemUgaXMgd3JvbmdcIjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0dXJlUmlnaHQgPSB0aGlzLl9jcmVhdGVDdWJlbWFwRGF0YShzaXplLCB0aGlzLl9mYWNlUmlnaHQsIHBpeGVscywgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpO1xuICAgIGNvbnN0IHRleHR1cmVMZWZ0ID0gdGhpcy5fY3JlYXRlQ3ViZW1hcERhdGEoc2l6ZSwgdGhpcy5fZmFjZUxlZnQsIHBpeGVscywgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpO1xuICAgIGNvbnN0IHRleHR1cmVVcCA9IHRoaXMuX2NyZWF0ZUN1YmVtYXBEYXRhKHNpemUsIHRoaXMuX2ZhY2VVcCwgcGl4ZWxzLCBpbnB1dFdpZHRoLCBpbnB1dEhlaWdodCk7XG4gICAgY29uc3QgdGV4dHVyZURvd24gPSB0aGlzLl9jcmVhdGVDdWJlbWFwRGF0YShzaXplLCB0aGlzLl9mYWNlQm90dG9tLCBwaXhlbHMsIGlucHV0V2lkdGgsIGlucHV0SGVpZ2h0KTtcbiAgICBjb25zdCB0ZXh0dXJlRnJvbnQgPSB0aGlzLl9jcmVhdGVDdWJlbWFwRGF0YShzaXplLCB0aGlzLl9mYWNlRnJvbnQsIHBpeGVscywgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpO1xuICAgIGNvbnN0IHRleHR1cmVCYWNrID0gdGhpcy5fY3JlYXRlQ3ViZW1hcERhdGEoc2l6ZSwgdGhpcy5fZmFjZUJhY2ssIHBpeGVscywgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpO1xuXG4gICAgcmV0dXJuIFt0ZXh0dXJlUmlnaHQsIHRleHR1cmVMZWZ0LCB0ZXh0dXJlVXAsIHRleHR1cmVEb3duLCB0ZXh0dXJlRnJvbnQsIHRleHR1cmVCYWNrXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9jcmVhdGVDdWJlbWFwRGF0YShcbiAgICB0ZXhTaXplOiBudW1iZXIsXG4gICAgZmFjZURhdGE6IFZlY3RvcjNbXSxcbiAgICBwaXhlbHM6IFVpbnQ4QXJyYXksXG4gICAgaW5wdXRXaWR0aDogbnVtYmVyLFxuICAgIGlucHV0SGVpZ2h0OiBudW1iZXJcbiAgKTogVWludDhDbGFtcGVkQXJyYXkge1xuICAgIGNvbnN0IHRleHR1cmVBcnJheSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh0ZXhTaXplICogdGV4U2l6ZSAqIDQpO1xuICAgIGNvbnN0IHJvdERYMSA9IHRoaXMuX3RlbXBWZWN0b3IzXG4gICAgICAuc2V0KDAsIDAsIDApXG4gICAgICAuYWRkKGZhY2VEYXRhWzFdKVxuICAgICAgLnN1YnRyYWN0KGZhY2VEYXRhWzBdKVxuICAgICAgLnNjYWxlKDEgLyB0ZXhTaXplKTtcbiAgICBjb25zdCByb3REWDIgPSB0aGlzLl90ZW1wMlZlY3RvcjNcbiAgICAgIC5zZXQoMCwgMCwgMClcbiAgICAgIC5hZGQoZmFjZURhdGFbM10pXG4gICAgICAuc3VidHJhY3QoZmFjZURhdGFbMl0pXG4gICAgICAuc2NhbGUoMSAvIHRleFNpemUpO1xuXG4gICAgY29uc3QgZHkgPSAxIC8gdGV4U2l6ZTtcbiAgICBsZXQgZnkgPSAwO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0ZXhTaXplOyB5KyspIHtcbiAgICAgIGxldCB4djEgPSB0aGlzLl90ZW1wM1ZlY3RvcjMuc2V0KDAsIDAsIDApLmFkZChmYWNlRGF0YVswXSk7XG4gICAgICBsZXQgeHYyID0gdGhpcy5fdGVtcDRWZWN0b3IzLnNldCgwLCAwLCAwKS5hZGQoZmFjZURhdGFbMl0pO1xuXG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRleFNpemU7IHgrKykge1xuICAgICAgICBjb25zdCB2ID0gdGhpcy5fdGVtcDVWZWN0b3IzLnNldCgwLCAwLCAwKS5hZGQoeHYyKS5zdWJ0cmFjdCh4djEpLnNjYWxlKGZ5KS5hZGQoeHYxKTtcbiAgICAgICAgdi5ub3JtYWxpemUoKTtcblxuICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuX2NhbGNQcm9qZWN0aW9uU3BoZXJpY2FsKHYsIHBpeGVscywgaW5wdXRXaWR0aCwgaW5wdXRIZWlnaHQpO1xuICAgICAgICB0aGlzLl9SR0JFVG9MaW5lYXIoY29sb3IpO1xuICAgICAgICB0aGlzLl9saW5lYXJUb1JHQk0oY29sb3IsIDUpO1xuXG4gICAgICAgIC8vIDQgY2hhbm5lbHMgcGVyIHBpeGVsc1xuICAgICAgICBjb25zdCBpbmRleCA9IHkgKiB0ZXhTaXplICogNCArIHggKiA0O1xuICAgICAgICB0ZXh0dXJlQXJyYXlbaW5kZXhdID0gY29sb3IucjtcbiAgICAgICAgdGV4dHVyZUFycmF5W2luZGV4ICsgMV0gPSBjb2xvci5nO1xuICAgICAgICB0ZXh0dXJlQXJyYXlbaW5kZXggKyAyXSA9IGNvbG9yLmI7XG4gICAgICAgIHRleHR1cmVBcnJheVtpbmRleCArIDNdID0gY29sb3IuYTtcblxuICAgICAgICB4djEuYWRkKHJvdERYMSk7XG4gICAgICAgIHh2Mi5hZGQocm90RFgyKTtcbiAgICAgIH1cblxuICAgICAgZnkgKz0gZHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmVBcnJheTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9jYWxjUHJvamVjdGlvblNwaGVyaWNhbChcbiAgICB2RGlyOiBWZWN0b3IzLFxuICAgIHBpeGVsczogVWludDhBcnJheSxcbiAgICBpbnB1dFdpZHRoOiBudW1iZXIsXG4gICAgaW5wdXRIZWlnaHQ6IG51bWJlclxuICApOiBDb2xvciB7XG4gICAgbGV0IHRoZXRhID0gTWF0aC5hdGFuMih2RGlyLnosIC12RGlyLngpO1xuICAgIGxldCBwaGkgPSBNYXRoLmFjb3ModkRpci55KTtcblxuICAgIHdoaWxlICh0aGV0YSA8IC1QSSkge1xuICAgICAgdGhldGEgKz0gMiAqIFBJO1xuICAgIH1cbiAgICB3aGlsZSAodGhldGEgPiBQSSkge1xuICAgICAgdGhldGEgLT0gMiAqIFBJO1xuICAgIH1cblxuICAgIGxldCBkeCA9IHRoZXRhIC8gUEk7XG4gICAgbGV0IGR5ID0gcGhpIC8gUEk7XG5cbiAgICAvLyByZWNlbnRlci5cbiAgICBkeCA9IGR4ICogMC41ICsgMC41O1xuXG4gICAgbGV0IHB4ID0gTWF0aC5yb3VuZChkeCAqIGlucHV0V2lkdGgpO1xuICAgIGlmIChweCA8IDApIHtcbiAgICAgIHB4ID0gMDtcbiAgICB9IGVsc2UgaWYgKHB4ID49IGlucHV0V2lkdGgpIHtcbiAgICAgIHB4ID0gaW5wdXRXaWR0aCAtIDE7XG4gICAgfVxuXG4gICAgbGV0IHB5ID0gTWF0aC5yb3VuZChkeSAqIGlucHV0SGVpZ2h0KTtcbiAgICBpZiAocHkgPCAwKSB7XG4gICAgICBweSA9IDA7XG4gICAgfSBlbHNlIGlmIChweSA+PSBpbnB1dEhlaWdodCkge1xuICAgICAgcHkgPSBpbnB1dEhlaWdodCAtIDE7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRZID0gaW5wdXRIZWlnaHQgLSBweSAtIDE7XG4gICAgY29uc3QgaW5kZXggPSBpbnB1dFkgKiBpbnB1dFdpZHRoICogNCArIHB4ICogNDtcbiAgICBjb25zdCByID0gcGl4ZWxzW2luZGV4XTtcbiAgICBjb25zdCBnID0gcGl4ZWxzW2luZGV4ICsgMV07XG4gICAgY29uc3QgYiA9IHBpeGVsc1tpbmRleCArIDJdO1xuICAgIGNvbnN0IGEgPSBwaXhlbHNbaW5kZXggKyAzXTtcblxuICAgIHJldHVybiBuZXcgQ29sb3IociwgZywgYiwgYSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfcmVhZFN0cmluZ0xpbmUodWludDhhcnJheTogVWludDhBcnJheSwgc3RhcnRJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgbGluZSA9IFwiXCI7XG4gICAgbGV0IGNoYXJhY3RlciA9IFwiXCI7XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IHVpbnQ4YXJyYXkubGVuZ3RoIC0gc3RhcnRJbmRleDsgaSsrKSB7XG4gICAgICBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVpbnQ4YXJyYXlbaV0pO1xuXG4gICAgICBpZiAoY2hhcmFjdGVyID09IFwiXFxuXCIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGxpbmUgKz0gY2hhcmFjdGVyO1xuICAgIH1cblxuICAgIHJldHVybiBsaW5lO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX3BhcnNlSGVhZGVyKHVpbnQ4YXJyYXk6IFVpbnQ4QXJyYXkpOiBJSERSSGVhZGVyIHtcbiAgICBsZXQgaGVpZ2h0OiBudW1iZXIgPSAwO1xuICAgIGxldCB3aWR0aDogbnVtYmVyID0gMDtcblxuICAgIGxldCBsaW5lID0gdGhpcy5fcmVhZFN0cmluZ0xpbmUodWludDhhcnJheSwgMCk7XG4gICAgaWYgKGxpbmVbMF0gIT0gXCIjXCIgfHwgbGluZVsxXSAhPSBcIj9cIikge1xuICAgICAgdGhyb3cgXCJCYWQgSERSIEZvcm1hdC5cIjtcbiAgICB9XG5cbiAgICBsZXQgZW5kT2ZIZWFkZXIgPSBmYWxzZTtcbiAgICBsZXQgZmluZEZvcm1hdCA9IGZhbHNlO1xuICAgIGxldCBsaW5lSW5kZXg6IG51bWJlciA9IDA7XG5cbiAgICBkbyB7XG4gICAgICBsaW5lSW5kZXggKz0gbGluZS5sZW5ndGggKyAxO1xuICAgICAgbGluZSA9IHRoaXMuX3JlYWRTdHJpbmdMaW5lKHVpbnQ4YXJyYXksIGxpbmVJbmRleCk7XG5cbiAgICAgIGlmIChsaW5lID09IFwiRk9STUFUPTMyLWJpdF9ybGVfcmdiZVwiKSB7XG4gICAgICAgIGZpbmRGb3JtYXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsaW5lLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGVuZE9mSGVhZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IHdoaWxlICghZW5kT2ZIZWFkZXIpO1xuXG4gICAgaWYgKCFmaW5kRm9ybWF0KSB7XG4gICAgICB0aHJvdyBcIkhEUiBCYWQgaGVhZGVyIGZvcm1hdCwgdW5zdXBwb3J0ZWQgRk9STUFUXCI7XG4gICAgfVxuXG4gICAgbGluZUluZGV4ICs9IGxpbmUubGVuZ3RoICsgMTtcbiAgICBsaW5lID0gdGhpcy5fcmVhZFN0cmluZ0xpbmUodWludDhhcnJheSwgbGluZUluZGV4KTtcblxuICAgIGNvbnN0IHNpemVSZWdleHAgPSAvXlxcLVkgKC4qKSBcXCtYICguKikkL2c7XG4gICAgY29uc3QgbWF0Y2ggPSBzaXplUmVnZXhwLmV4ZWMobGluZSk7XG5cbiAgICAvLyBUT0RPLiBTdXBwb3J0ICtZIGFuZCAtWCBpZiBuZWVkZWQuXG4gICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5sZW5ndGggPCAzKSB7XG4gICAgICB0aHJvdyBcIkhEUiBCYWQgaGVhZGVyIGZvcm1hdCwgbm8gc2l6ZVwiO1xuICAgIH1cbiAgICB3aWR0aCA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICBoZWlnaHQgPSBwYXJzZUludChtYXRjaFsxXSk7XG5cbiAgICBpZiAod2lkdGggPCA4IHx8IHdpZHRoID4gMHg3ZmZmKSB7XG4gICAgICB0aHJvdyBcIkhEUiBCYWQgaGVhZGVyIGZvcm1hdCwgdW5zdXBwb3J0ZWQgc2l6ZVwiO1xuICAgIH1cblxuICAgIGxpbmVJbmRleCArPSBsaW5lLmxlbmd0aCArIDE7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBkYXRhUG9zaXRpb246IGxpbmVJbmRleFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfcmVhZFBpeGVscyhidWZmZXI6IFVpbnQ4QXJyYXksIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogVWludDhBcnJheSB7XG4gICAgY29uc3Qgc2NhbkxpbmVXaWR0aCA9IHdpZHRoO1xuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBidWZmZXIuYnl0ZUxlbmd0aDtcblxuICAgIGNvbnN0IGRhdGFSR0JBID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgIGxldCBvZmZzZXQgPSAwLFxuICAgICAgcG9zID0gMDtcbiAgICBjb25zdCBwdHJFbmQgPSA0ICogc2NhbkxpbmVXaWR0aDtcbiAgICBjb25zdCByZ2JlU3RhcnQgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICBjb25zdCBzY2FuTGluZUJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHB0ckVuZCk7XG4gICAgbGV0IG51bVNjYW5MaW5lcyA9IGhlaWdodDsgLy8gcmVhZCBpbiBlYWNoIHN1Y2Nlc3NpdmUgc2NhbkxpbmVcblxuICAgIHdoaWxlIChudW1TY2FuTGluZXMgPiAwICYmIHBvcyA8IGJ5dGVMZW5ndGgpIHtcbiAgICAgIHJnYmVTdGFydFswXSA9IGJ1ZmZlcltwb3MrK107XG4gICAgICByZ2JlU3RhcnRbMV0gPSBidWZmZXJbcG9zKytdO1xuICAgICAgcmdiZVN0YXJ0WzJdID0gYnVmZmVyW3BvcysrXTtcbiAgICAgIHJnYmVTdGFydFszXSA9IGJ1ZmZlcltwb3MrK107XG5cbiAgICAgIGlmICgyICE9IHJnYmVTdGFydFswXSB8fCAyICE9IHJnYmVTdGFydFsxXSB8fCAoKHJnYmVTdGFydFsyXSA8PCA4KSB8IHJnYmVTdGFydFszXSkgIT0gc2NhbkxpbmVXaWR0aCkge1xuICAgICAgICB0aHJvdyBcIkhEUiBCYWQgaGVhZGVyIGZvcm1hdCwgd3Jvbmcgc2NhbiBsaW5lIHdpZHRoXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlYWQgZWFjaCBvZiB0aGUgZm91ciBjaGFubmVscyBmb3IgdGhlIHNjYW5saW5lIGludG8gdGhlIGJ1ZmZlclxuICAgICAgLy8gZmlyc3QgcmVkLCB0aGVuIGdyZWVuLCB0aGVuIGJsdWUsIHRoZW4gZXhwb25lbnRcblxuICAgICAgbGV0IHB0ciA9IDAsXG4gICAgICAgIGNvdW50O1xuXG4gICAgICB3aGlsZSAocHRyIDwgcHRyRW5kICYmIHBvcyA8IGJ5dGVMZW5ndGgpIHtcbiAgICAgICAgY291bnQgPSBidWZmZXJbcG9zKytdO1xuICAgICAgICBjb25zdCBpc0VuY29kZWRSdW4gPSBjb3VudCA+IDEyODtcbiAgICAgICAgaWYgKGlzRW5jb2RlZFJ1bikgY291bnQgLT0gMTI4O1xuXG4gICAgICAgIGlmICgwID09PSBjb3VudCB8fCBwdHIgKyBjb3VudCA+IHB0ckVuZCkge1xuICAgICAgICAgIHRocm93IFwiSERSIEJhZCBGb3JtYXQsIGJhZCBzY2FubGluZSBkYXRhIChydW4pXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNFbmNvZGVkUnVuKSB7XG4gICAgICAgICAgLy8gYSAoZW5jb2RlZCkgcnVuIG9mIHRoZSBzYW1lIHZhbHVlXG4gICAgICAgICAgY29uc3QgYnl0ZVZhbHVlID0gYnVmZmVyW3BvcysrXTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgc2NhbkxpbmVCdWZmZXJbcHRyKytdID0gYnl0ZVZhbHVlO1xuICAgICAgICAgIH0gLy9wdHIgKz0gY291bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYSBsaXRlcmFsLXJ1blxuICAgICAgICAgIHNjYW5MaW5lQnVmZmVyLnNldChidWZmZXIuc3ViYXJyYXkocG9zLCBwb3MgKyBjb3VudCksIHB0cik7XG4gICAgICAgICAgcHRyICs9IGNvdW50O1xuICAgICAgICAgIHBvcyArPSBjb3VudDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBub3cgY29udmVydCBkYXRhIGZyb20gYnVmZmVyIGludG8gcmdiYVxuICAgICAgLy8gZmlyc3QgcmVkLCB0aGVuIGdyZWVuLCB0aGVuIGJsdWUsIHRoZW4gZXhwb25lbnQgKGFscGhhKVxuXG4gICAgICBjb25zdCBsID0gc2NhbkxpbmVXaWR0aDsgLy9zY2FuTGluZV9idWZmZXIuYnl0ZUxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbGV0IG9mZiA9IDA7XG4gICAgICAgIGRhdGFSR0JBW29mZnNldF0gPSBzY2FuTGluZUJ1ZmZlcltpICsgb2ZmXTtcbiAgICAgICAgb2ZmICs9IHNjYW5MaW5lV2lkdGg7XG5cbiAgICAgICAgZGF0YVJHQkFbb2Zmc2V0ICsgMV0gPSBzY2FuTGluZUJ1ZmZlcltpICsgb2ZmXTtcbiAgICAgICAgb2ZmICs9IHNjYW5MaW5lV2lkdGg7XG5cbiAgICAgICAgZGF0YVJHQkFbb2Zmc2V0ICsgMl0gPSBzY2FuTGluZUJ1ZmZlcltpICsgb2ZmXTtcbiAgICAgICAgb2ZmICs9IHNjYW5MaW5lV2lkdGg7XG5cbiAgICAgICAgZGF0YVJHQkFbb2Zmc2V0ICsgM10gPSBzY2FuTGluZUJ1ZmZlcltpICsgb2ZmXTtcbiAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICB9XG5cbiAgICAgIG51bVNjYW5MaW5lcy0tO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhUkdCQTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9SR0JFVG9MaW5lYXIoY29sb3I6IENvbG9yKTogdm9pZCB7XG4gICAgY29uc3Qgc2NhbGVGYWN0b3IgPSBNYXRoLnBvdygyLCBjb2xvci5hIC0gMTI4KSAvIDI1NTtcbiAgICBjb2xvci5yICo9IHNjYWxlRmFjdG9yO1xuICAgIGNvbG9yLmcgKj0gc2NhbGVGYWN0b3I7XG4gICAgY29sb3IuYiAqPSBzY2FsZUZhY3RvcjtcbiAgICBjb2xvci5hID0gMTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9saW5lYXJUb1JHQk0oY29sb3I6IENvbG9yLCBtYXhSYW5nZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbWF4UkdCID0gTWF0aC5tYXgoY29sb3IuciwgTWF0aC5tYXgoY29sb3IuZywgY29sb3IuYikpO1xuICAgIGxldCBNID0gTWF0aC5taW4obWF4UkdCIC8gbWF4UmFuZ2UsIDEpO1xuICAgIE0gPSBNYXRoLmNlaWwoTSAqIDI1NSk7XG4gICAgY29uc3Qgc2NhbGVGYWN0b3IgPSA2NTAyNSAvIChNICogbWF4UmFuZ2UpOyAvLyAyNTUgKiAoMjU1IC8gKE0gKiBtYXhSYW5nZSkgKVxuXG4gICAgY29sb3IuciAqPSBzY2FsZUZhY3RvcjtcbiAgICBjb2xvci5nICo9IHNjYWxlRmFjdG9yO1xuICAgIGNvbG9yLmIgKj0gc2NhbGVGYWN0b3I7XG4gICAgY29sb3IuYSAqPSBNO1xuICB9XG5cbiAgbG9hZChpdGVtOiBMb2FkSXRlbSwgcmVzb3VyY2VNYW5hZ2VyOiBSZXNvdXJjZU1hbmFnZXIpOiBBc3NldFByb21pc2U8VGV4dHVyZUN1YmU+IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBlbmdpbmUgPSByZXNvdXJjZU1hbmFnZXIuZW5naW5lO1xuXG4gICAgICB0aGlzLnJlcXVlc3Q8QXJyYXlCdWZmZXI+KGl0ZW0udXJsLCB7IHR5cGU6IFwiYXJyYXlidWZmZXJcIiB9KVxuICAgICAgICAudGhlbigoYnVmZmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBkYXRhUG9zaXRpb24gfSA9IEhEUkxvYWRlci5fcGFyc2VIZWFkZXIodWludDhBcnJheSk7XG4gICAgICAgICAgY29uc3QgcGl4ZWxzID0gSERSTG9hZGVyLl9yZWFkUGl4ZWxzKHVpbnQ4QXJyYXkuc3ViYXJyYXkoZGF0YVBvc2l0aW9uKSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgY29uc3QgY3ViZVNpemUgPSBoZWlnaHQgPj4gMTtcblxuICAgICAgICAgIGNvbnN0IGN1YmVNYXBEYXRhID0gSERSTG9hZGVyLl9jb252ZXJ0VG9DdWJlbWFwKHBpeGVscywgd2lkdGgsIGhlaWdodCwgY3ViZVNpemUpO1xuICAgICAgICAgIGNvbnN0IHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUoZW5naW5lLCBjdWJlU2l6ZSk7XG5cbiAgICAgICAgICBmb3IgKGxldCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykge1xuICAgICAgICAgICAgdGV4dHVyZS5zZXRQaXhlbEJ1ZmZlcihUZXh0dXJlQ3ViZUZhY2UuUG9zaXRpdmVYICsgZmFjZUluZGV4LCBjdWJlTWFwRGF0YVtmYWNlSW5kZXhdLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMoKTtcbiAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVzb3VyY2VMb2FkZXIsIExvYWRlciwgQXNzZXRQcm9taXNlLCBBc3NldFR5cGUsIExvYWRJdGVtIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLkpTT04sIFtcImpzb25cIl0sIGZhbHNlKVxuY2xhc3MgSlNPTkxvYWRlciBleHRlbmRzIExvYWRlcjxzdHJpbmc+IHtcbiAgbG9hZChpdGVtOiBMb2FkSXRlbSk6IEFzc2V0UHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW0udXJsLCB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgdHlwZTogXCJqc29uXCJcbiAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKlxuICogcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL0JhYnlsb25KUy9CYWJ5bG9uLmpzL2Jsb2IvbWFzdGVyL3NyYy9Ub29scy9iYWJ5bG9uLmtocm9ub3NUZXh0dXJlQ29udGFpbmVyLnRzXG4gKi9cblxuaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IEdMQ29tcHJlc3NlZFRleHR1cmVJbnRlcm5hbEZvcm1hdCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLXJoaS13ZWJnbFwiO1xuaW1wb3J0IHsgS1RYQ29udGFpbmVyLCBNaXBtYXAgfSBmcm9tIFwiLi90eXBlXCI7XG5cbmNvbnN0IEhFQURFUl9MRU4gPSAxMiArIDEzICogNDsgLy8gaWRlbnRpZmllciArIGhlYWRlciBlbGVtZW50cyAobm90IGluY2x1ZGluZyBrZXkgdmFsdWUgbWV0YS1kYXRhIHBhaXJzKVxuXG4vLyBsb2FkIHR5cGVzXG5jb25zdCBDT01QUkVTU0VEXzJEID0gMDsgLy8gdXNlcyBhIGdsLmNvbXByZXNzZWRUZXhJbWFnZTJEKClcbmNvbnN0IENPTVBSRVNTRURfM0QgPSAxOyAvLyB1c2VzIGEgZ2wuY29tcHJlc3NlZFRleEltYWdlM0QoKVxuY29uc3QgVEVYXzJEID0gMjsgLy8gdXNlcyBhIGdsLnRleEltYWdlMkQoKVxuY29uc3QgVEVYXzNEID0gMzsgLy8gdXNlcyBhIGdsLnRleEltYWdlM0QoKVxuXG5mdW5jdGlvbiBnZXRNaXBtYXBzKGt0eENvbnRhaW5lcjogS1RYQ29udGFpbmVyLCBsb2FkTWlwbWFwczogYm9vbGVhbik6IE1pcG1hcFtdIHtcbiAgY29uc3QgbWlwbWFwcyA9IFtdO1xuXG4gIC8vIGluaXRpYWxpemUgd2lkdGggJiBoZWlnaHQgZm9yIGxldmVsIDFcbiAgdmFyIGRhdGFPZmZzZXQgPSBIRUFERVJfTEVOICsga3R4Q29udGFpbmVyLmJ5dGVzT2ZLZXlWYWx1ZURhdGE7XG4gIHZhciB3aWR0aCA9IGt0eENvbnRhaW5lci5waXhlbFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0ga3R4Q29udGFpbmVyLnBpeGVsSGVpZ2h0O1xuICB2YXIgbWlwbWFwQ291bnQgPSBsb2FkTWlwbWFwcyA/IGt0eENvbnRhaW5lci5udW1iZXJPZk1pcG1hcExldmVscyA6IDE7XG5cbiAgZm9yICh2YXIgbGV2ZWwgPSAwOyBsZXZlbCA8IG1pcG1hcENvdW50OyBsZXZlbCsrKSB7XG4gICAgdmFyIGltYWdlU2l6ZSA9IG5ldyBJbnQzMkFycmF5KGt0eENvbnRhaW5lci5idWZmZXIsIGRhdGFPZmZzZXQsIDEpWzBdOyAvLyBzaXplIHBlciBmYWNlLCBzaW5jZSBub3Qgc3VwcG9ydGluZyBhcnJheSBjdWJlbWFwc1xuICAgIGRhdGFPZmZzZXQgKz0gNDsgLy8gc2l6ZSBvZiB0aGUgaW1hZ2UgKyA0IGZvciB0aGUgaW1hZ2VTaXplIGZpZWxkXG5cbiAgICBmb3IgKHZhciBmYWNlID0gMDsgZmFjZSA8IGt0eENvbnRhaW5lci5udW1iZXJPZkZhY2VzOyBmYWNlKyspIHtcbiAgICAgIHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShrdHhDb250YWluZXIuYnVmZmVyLCBkYXRhT2Zmc2V0LCBpbWFnZVNpemUpO1xuXG4gICAgICBtaXBtYXBzLnB1c2goeyBkYXRhOiBieXRlQXJyYXksIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfSk7XG5cbiAgICAgIGRhdGFPZmZzZXQgKz0gaW1hZ2VTaXplO1xuICAgICAgZGF0YU9mZnNldCArPSAzIC0gKChpbWFnZVNpemUgKyAzKSAlIDQpOyAvLyBhZGQgcGFkZGluZyBmb3Igb2RkIHNpemVkIGltYWdlXG4gICAgfVxuICAgIHdpZHRoID0gTWF0aC5tYXgoMS4wLCB3aWR0aCAqIDAuNSk7XG4gICAgaGVpZ2h0ID0gTWF0aC5tYXgoMS4wLCBoZWlnaHQgKiAwLjUpO1xuICB9XG5cbiAgcmV0dXJuIG1pcG1hcHM7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBkYXRhIHN0YXJ0cyB3aXRoIGEgS1RYIGZpbGUgaWRlbnRpZmllci5cbiAqIEBwYXJhbSBkYXRhIHRoZSBkYXRhIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRhIGlzIGEgS1RYIGZpbGUgb3IgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWQoZGF0YTogQXJyYXlCdWZmZXIpOiBib29sZWFuIHtcbiAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+PSAxMikge1xuICAgIC8vICfCqycsICdLJywgJ1QnLCAnWCcsICcgJywgJzEnLCAnMScsICfCuycsICdcXHInLCAnXFxuJywgJ1xceDFBJywgJ1xcbidcbiAgICBjb25zdCBpZGVudGlmaWVyID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSwgMCwgMTIpO1xuICAgIGlmIChcbiAgICAgIGlkZW50aWZpZXJbMF0gPT09IDB4YWIgJiZcbiAgICAgIGlkZW50aWZpZXJbMV0gPT09IDB4NGIgJiZcbiAgICAgIGlkZW50aWZpZXJbMl0gPT09IDB4NTQgJiZcbiAgICAgIGlkZW50aWZpZXJbM10gPT09IDB4NTggJiZcbiAgICAgIGlkZW50aWZpZXJbNF0gPT09IDB4MjAgJiZcbiAgICAgIGlkZW50aWZpZXJbNV0gPT09IDB4MzEgJiZcbiAgICAgIGlkZW50aWZpZXJbNl0gPT09IDB4MzEgJiZcbiAgICAgIGlkZW50aWZpZXJbN10gPT09IDB4YmIgJiZcbiAgICAgIGlkZW50aWZpZXJbOF0gPT09IDB4MGQgJiZcbiAgICAgIGlkZW50aWZpZXJbOV0gPT09IDB4MGEgJiZcbiAgICAgIGlkZW50aWZpZXJbMTBdID09PSAweDFhICYmXG4gICAgICBpZGVudGlmaWVyWzExXSA9PT0gMHgwYVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFbmdpbmVGb3JtYXQoaW50ZXJuYWxGb3JtYXQ6IEdMaW50KTogVGV4dHVyZUZvcm1hdCB7XG4gIHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHtcbiAgICAvLyBjYXNlIEdMQ29tcHJlc3NlZFRleHR1cmVJbnRlcm5hbEZvcm1hdC5SR0JBX1MzVENfRFhUM19FWFQ6XG4gICAgLy8gY2FzZSBHTENvbXByZXNzZWRUZXh0dXJlSW50ZXJuYWxGb3JtYXQuUkdCQV9TM1RDX0RYVDVfRVhUOlxuICAgIC8vIGJyZWFrO1xuICAgIGNhc2UgR0xDb21wcmVzc2VkVGV4dHVyZUludGVybmFsRm9ybWF0LlJHQl9TM1RDX0RYVDFfRVhUOlxuICAgICAgcmV0dXJuIFRleHR1cmVGb3JtYXQuRFhUMTtcbiAgICBjYXNlIEdMQ29tcHJlc3NlZFRleHR1cmVJbnRlcm5hbEZvcm1hdC5SR0JBX1MzVENfRFhUNV9FWFQ6XG4gICAgICByZXR1cm4gVGV4dHVyZUZvcm1hdC5EWFQ1O1xuICAgIGNhc2UgR0xDb21wcmVzc2VkVGV4dHVyZUludGVybmFsRm9ybWF0LlJHQl9FVEMxX1dFQkdMOlxuICAgICAgcmV0dXJuIFRleHR1cmVGb3JtYXQuRVRDMV9SR0I7XG4gICAgY2FzZSBHTENvbXByZXNzZWRUZXh0dXJlSW50ZXJuYWxGb3JtYXQuUkdCOF9FVEMyOlxuICAgICAgcmV0dXJuIFRleHR1cmVGb3JtYXQuRVRDMl9SR0I7XG4gICAgY2FzZSBHTENvbXByZXNzZWRUZXh0dXJlSW50ZXJuYWxGb3JtYXQuUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6XG4gICAgICByZXR1cm4gVGV4dHVyZUZvcm1hdC5FVEMyX1JHQkE1O1xuICAgIGNhc2UgR0xDb21wcmVzc2VkVGV4dHVyZUludGVybmFsRm9ybWF0LlJHQkE4X0VUQzJfRUFDOlxuICAgICAgcmV0dXJuIFRleHR1cmVGb3JtYXQuRVRDMl9SR0JBODtcbiAgICBjYXNlIEdMQ29tcHJlc3NlZFRleHR1cmVJbnRlcm5hbEZvcm1hdC5SR0JfUFZSVENfMkJQUFYxX0lNRzpcbiAgICAgIHJldHVybiBUZXh0dXJlRm9ybWF0LlBWUlRDX1JHQjI7XG4gICAgY2FzZSBHTENvbXByZXNzZWRUZXh0dXJlSW50ZXJuYWxGb3JtYXQuUkdCQV9QVlJUQ18yQlBQVjFfSU1HOlxuICAgICAgcmV0dXJuIFRleHR1cmVGb3JtYXQuUFZSVENfUkdCQTI7XG4gICAgY2FzZSBHTENvbXByZXNzZWRUZXh0dXJlSW50ZXJuYWxGb3JtYXQuUkdCX1BWUlRDXzRCUFBWMV9JTUc6XG4gICAgICByZXR1cm4gVGV4dHVyZUZvcm1hdC5QVlJUQ19SR0I0O1xuICAgIGNhc2UgR0xDb21wcmVzc2VkVGV4dHVyZUludGVybmFsRm9ybWF0LlJHQkFfUFZSVENfNEJQUFYxX0lNRzpcbiAgICAgIHJldHVybiBUZXh0dXJlRm9ybWF0LlBWUlRDX1JHQkE0O1xuICAgIGNhc2UgR0xDb21wcmVzc2VkVGV4dHVyZUludGVybmFsRm9ybWF0LlJHQkFfQVNUQ180WDRfS0hSOlxuICAgICAgcmV0dXJuIFRleHR1cmVGb3JtYXQuQVNUQ180eDQ7XG4gICAgY2FzZSBHTENvbXByZXNzZWRUZXh0dXJlSW50ZXJuYWxGb3JtYXQuUkdCQV9BU1RDXzVYNV9LSFI6XG4gICAgICByZXR1cm4gVGV4dHVyZUZvcm1hdC5BU1RDXzV4NTtcbiAgICBjYXNlIEdMQ29tcHJlc3NlZFRleHR1cmVJbnRlcm5hbEZvcm1hdC5SR0JBX0FTVENfNlg2X0tIUjpcbiAgICAgIHJldHVybiBUZXh0dXJlRm9ybWF0LkFTVENfNng2O1xuICAgIGNhc2UgR0xDb21wcmVzc2VkVGV4dHVyZUludGVybmFsRm9ybWF0LlJHQkFfQVNUQ184WDhfS0hSOlxuICAgICAgcmV0dXJuIFRleHR1cmVGb3JtYXQuQVNUQ184eDg7XG4gICAgY2FzZSBHTENvbXByZXNzZWRUZXh0dXJlSW50ZXJuYWxGb3JtYXQuUkdCQV9BU1RDXzEwWDEwX0tIUjpcbiAgICAgIHJldHVybiBUZXh0dXJlRm9ybWF0LkFTVENfMTB4MTA7XG4gICAgY2FzZSBHTENvbXByZXNzZWRUZXh0dXJlSW50ZXJuYWxGb3JtYXQuUkdCQV9BU1RDXzEyWDEyX0tIUjpcbiAgICAgIHJldHVybiBUZXh0dXJlRm9ybWF0LkFTVENfMTJ4MTI7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnN0IGZvcm1hdE5hbWU6IGFueSA9IEdMQ29tcHJlc3NlZFRleHR1cmVJbnRlcm5hbEZvcm1hdFtpbnRlcm5hbEZvcm1hdF07XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRoaXMgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gR2FsYWNlYW4gRW5naW5lOiAke2Zvcm1hdE5hbWV9YCk7XG4gIH1cbn1cbi8qKlxuICogZm9yIGRlc2NyaXB0aW9uIHNlZSBodHRwczovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvdG9vbHMvS1RYL1xuICogZm9yIGZpbGUgbGF5b3V0IHNlZSBodHRwczovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvdG9vbHMvS1RYL2ZpbGVfZm9ybWF0X3NwZWMvXG4gKi9cbmV4cG9ydCBjb25zdCBraHJvbm9zVGV4dHVyZUNvbnRhaW5lclBhcnNlciA9IHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBidWZmZXIgY29udGVudHMgb2YgdGhlIEtUWCBjb250YWluZXIgZmlsZVxuICAgKiBAcGFyYW0gZmFjZXNFeHBlY3RlZCBzaG91bGQgYmUgZWl0aGVyIDEgb3IgNiwgYmFzZWQgd2hldGhlciBhIGN1YmUgdGV4dHVyZSBvciBvclxuICAgKiBAcGFyYW0gdGhyZWVERXhwZWN0ZWQgcHJvdmlzaW9uIGZvciBpbmRpY2F0aW5nIHRoYXQgZGF0YSBzaG91bGQgYmUgYSAzRCB0ZXh0dXJlLCBub3QgaW1wbGVtZW50ZWRcbiAgICogQHBhcmFtIHRleHR1cmVBcnJheUV4cGVjdGVkIHByb3Zpc2lvbiBmb3IgaW5kaWNhdGluZyB0aGF0IGRhdGEgc2hvdWxkIGJlIGEgdGV4dHVyZSBhcnJheSwgbm90IGltcGxlbWVudGVkXG4gICAqIEBwYXJhbSBtYXBFbmdpbmVGb3JtYXQgZ2V0IEdhbGFjZWFuIEVuZ2luZSBuYXRpdmUgVGV4dHVyZUZvcm1hdD9cbiAgICovXG4gIHBhcnNlKFxuICAgIGJ1ZmZlcjogQXJyYXlCdWZmZXIsXG4gICAgZmFjZXNFeHBlY3RlZDogbnVtYmVyLFxuICAgIHdpdGhNaXBtYXBzOiBib29sZWFuLFxuICAgIG1hcEVuZ2luZUZvcm1hdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEtUWENvbnRhaW5lciB7XG4gICAgaWYgKCFpc1ZhbGlkKGJ1ZmZlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImtocm9ub3NUZXh0dXJlQ29udGFpbmVyUGFyc2VyOiBpbnZhbGlkIEtUWCBmaWxlLCB0ZXh0dXJlIG1pc3NpbmcgS1RYIGlkZW50aWZpZXJcIik7XG4gICAgfVxuXG4gICAgLy8gbG9hZCB0aGUgcmVzZXQgb2YgdGhlIGhlYWRlciBpbiBuYXRpdmUgMzIgYml0IHVpbnRcbiAgICBjb25zdCBkYXRhU2l6ZSA9IFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgIGNvbnN0IGhlYWRlckRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlciwgMTIsIDEzICogZGF0YVNpemUpO1xuICAgIGNvbnN0IGVuZGlhbm5lc3MgPSBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoMCwgdHJ1ZSk7XG4gICAgY29uc3QgbGl0dGxlRW5kaWFuID0gZW5kaWFubmVzcyA9PT0gMHgwNDAzMDIwMTtcblxuICAgIGNvbnN0IHBhcnNlZFJlc3VsdDogS1RYQ29udGFpbmVyID0ge1xuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBnbFR5cGU6IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMigxICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbiksIC8vIG11c3QgYmUgMCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlc1xuICAgICAgZ2xUeXBlU2l6ZTogaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDIgKiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKSwgLy8gbXVzdCBiZSAxIGZvciBjb21wcmVzc2VkIHRleHR1cmVzXG4gICAgICBnbEZvcm1hdDogaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDMgKiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKSwgLy8gbXVzdCBiZSAwIGZvciBjb21wcmVzc2VkIHRleHR1cmVzXG4gICAgICBnbEludGVybmFsRm9ybWF0OiBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoNCAqIGRhdGFTaXplLCBsaXR0bGVFbmRpYW4pLCAvLyB0aGUgdmFsdWUgb2YgYXJnIHBhc3NlZCB0byBnbC5jb21wcmVzc2VkVGV4SW1hZ2UyRCgsLHgsLCwsKVxuICAgICAgZ2xCYXNlSW50ZXJuYWxGb3JtYXQ6IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMig1ICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbiksIC8vIHNwZWNpZnkgR0xfUkdCLCBHTF9SR0JBLCBHTF9BTFBIQSwgZXRjICh1bi1jb21wcmVzc2VkIG9ubHkpXG4gICAgICBwaXhlbFdpZHRoOiBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoNiAqIGRhdGFTaXplLCBsaXR0bGVFbmRpYW4pLCAvLyBsZXZlbCAwIHZhbHVlIG9mIGFyZyBwYXNzZWQgdG8gZ2wuY29tcHJlc3NlZFRleEltYWdlMkQoLCwseCwsLClcbiAgICAgIHBpeGVsSGVpZ2h0OiBoZWFkZXJEYXRhVmlldy5nZXRVaW50MzIoNyAqIGRhdGFTaXplLCBsaXR0bGVFbmRpYW4pLCAvLyBsZXZlbCAwIHZhbHVlIG9mIGFyZyBwYXNzZWQgdG8gZ2wuY29tcHJlc3NlZFRleEltYWdlMkQoLCwsLHgsLClcbiAgICAgIHBpeGVsRGVwdGg6IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMig4ICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbiksIC8vIGxldmVsIDAgdmFsdWUgb2YgYXJnIHBhc3NlZCB0byBnbC5jb21wcmVzc2VkVGV4SW1hZ2UzRCgsLCwsLHgsLClcbiAgICAgIG51bWJlck9mQXJyYXlFbGVtZW50czogaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDkgKiBkYXRhU2l6ZSwgbGl0dGxlRW5kaWFuKSwgLy8gdXNlZCBmb3IgdGV4dHVyZSBhcnJheXNcbiAgICAgIG51bWJlck9mRmFjZXM6IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMigxMCAqIGRhdGFTaXplLCBsaXR0bGVFbmRpYW4pLCAvLyB1c2VkIGZvciBjdWJlbWFwIHRleHR1cmVzLCBzaG91bGQgZWl0aGVyIGJlIDEgb3IgNlxuICAgICAgbnVtYmVyT2ZNaXBtYXBMZXZlbHM6IGhlYWRlckRhdGFWaWV3LmdldFVpbnQzMigxMSAqIGRhdGFTaXplLCBsaXR0bGVFbmRpYW4pLCAvLyBudW1iZXIgb2YgbGV2ZWxzOyBkaXNyZWdhcmQgcG9zc2liaWxpdHkgb2YgMCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlc1xuICAgICAgYnl0ZXNPZktleVZhbHVlRGF0YTogaGVhZGVyRGF0YVZpZXcuZ2V0VWludDMyKDEyICogZGF0YVNpemUsIGxpdHRsZUVuZGlhbiksIC8vIHRoZSBhbW91bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhlIGhlYWRlciBmb3IgbWV0YS1kYXRhXG4gICAgICAvLyB3b3VsZCBuZWVkIHRvIG1ha2UgdGhpcyBtb3JlIGVsYWJvcmF0ZSAmIGFkanVzdCBjaGVja3MgYWJvdmUgdG8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGxvYWQgdHlwZVxuICAgICAgbG9hZFR5cGU6IENPTVBSRVNTRURfMkRcbiAgICB9O1xuXG4gICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBjb21wcmVzc2VkIHR5cGUuICBOb3Qgb25seSByZWR1Y2VzIHdvcmssIGJ1dCBwcm9iYWJseSBiZXR0ZXIgdG8gbGV0IGRldiBrbm93IHRoZXkgYXJlIG5vdCBjb21wcmVzc2luZy5cbiAgICBpZiAocGFyc2VkUmVzdWx0LmdsVHlwZSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwib25seSBjb21wcmVzc2VkIGZvcm1hdHMgY3VycmVudGx5IHN1cHBvcnRlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdmFsdWUgb2YgemVybyBpcyBhbiBpbmRpY2F0aW9uIHRvIGdlbmVyYXRlIG1pcG1hcHMgQCBydW50aW1lLiAgTm90IHVzdWFsbHkgYWxsb3dlZCBmb3IgY29tcHJlc3NlZCwgc28gZGlzcmVnYXJkLlxuICAgICAgcGFyc2VkUmVzdWx0Lm51bWJlck9mTWlwbWFwTGV2ZWxzID0gTWF0aC5tYXgoMSwgcGFyc2VkUmVzdWx0Lm51bWJlck9mTWlwbWFwTGV2ZWxzKTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkUmVzdWx0LnBpeGVsSGVpZ2h0ID09PSAwIHx8IHBhcnNlZFJlc3VsdC5waXhlbERlcHRoICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IDJEIHRleHR1cmVzIGN1cnJlbnRseSBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFJlc3VsdC5udW1iZXJPZkFycmF5RWxlbWVudHMgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInRleHR1cmUgYXJyYXlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkXCIpO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRSZXN1bHQubnVtYmVyT2ZGYWNlcyAhPT0gZmFjZXNFeHBlY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibnVtYmVyIG9mIGZhY2VzIGV4cGVjdGVkXCIgKyBmYWNlc0V4cGVjdGVkICsgXCIsIGJ1dCBmb3VuZCBcIiArIHBhcnNlZFJlc3VsdC5udW1iZXJPZkZhY2VzKTtcbiAgICB9XG5cbiAgICBpZiAod2l0aE1pcG1hcHMpIHtcbiAgICAgIHBhcnNlZFJlc3VsdC5taXBtYXBzID0gZ2V0TWlwbWFwcyhwYXJzZWRSZXN1bHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChtYXBFbmdpbmVGb3JtYXQpIHtcbiAgICAgIHBhcnNlZFJlc3VsdC5lbmdpbmVGb3JtYXQgPSBnZXRFbmdpbmVGb3JtYXQocGFyc2VkUmVzdWx0LmdsSW50ZXJuYWxGb3JtYXQpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkUmVzdWx0O1xuICB9XG59O1xuIiwiaW1wb3J0IHsgQ29tcHJlc3NlZFRleHR1cmVEYXRhLCBDb21wcmVzc2VkQ3ViZURhdGEgfSBmcm9tIFwiLi90eXBlXCI7XG5pbXBvcnQgeyBraHJvbm9zVGV4dHVyZUNvbnRhaW5lclBhcnNlciB9IGZyb20gXCIuL0tocm9ub3NUZXh0dXJlQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBUZXh0dXJlRm9ybWF0IH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaW5nbGVLVFgoZGF0YTogQXJyYXlCdWZmZXIpOiBDb21wcmVzc2VkVGV4dHVyZURhdGEge1xuICBjb25zdCBrdHggPSBraHJvbm9zVGV4dHVyZUNvbnRhaW5lclBhcnNlci5wYXJzZShkYXRhLCAxLCB0cnVlLCB0cnVlKTtcbiAgcmV0dXJuIHtcbiAgICBtaXBtYXBzOiBrdHgubWlwbWFwcyxcbiAgICBlbmdpbmVGb3JtYXQ6IGt0eC5lbmdpbmVGb3JtYXQsXG4gICAgaW50ZXJuYWxGb3JtYXQ6IGt0eC5nbEludGVybmFsRm9ybWF0LFxuICAgIHdpZHRoOiBrdHgucGl4ZWxXaWR0aCxcbiAgICBoZWlnaHQ6IGt0eC5waXhlbEhlaWdodFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDdWJlS1RYKGRhdGFBcnJheTogQXJyYXlCdWZmZXJbXSk6IENvbXByZXNzZWRDdWJlRGF0YSB7XG4gIGNvbnN0IG1pcG1hcHNGYWNlcyA9IFtdO1xuICBsZXQgaW50ZXJuYWxGb3JtYXQ6IG51bWJlcjtcbiAgbGV0IGVuZ2luZUZvcm1hdDogVGV4dHVyZUZvcm1hdDtcbiAgbGV0IHdpZHRoOiBudW1iZXI7XG4gIGxldCBoZWlnaHQ6IG51bWJlcjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrdHggPSBraHJvbm9zVGV4dHVyZUNvbnRhaW5lclBhcnNlci5wYXJzZShkYXRhQXJyYXlbaV0sIDEsIHRydWUsIHRydWUpO1xuICAgIG1pcG1hcHNGYWNlcy5wdXNoKGt0eC5taXBtYXBzKTtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgd2lkdGggPSBrdHgucGl4ZWxXaWR0aDtcbiAgICAgIGhlaWdodCA9IGt0eC5waXhlbEhlaWdodDtcbiAgICAgIGludGVybmFsRm9ybWF0ID0ga3R4LmdsSW50ZXJuYWxGb3JtYXQ7XG4gICAgICBlbmdpbmVGb3JtYXQgPSBrdHguZW5naW5lRm9ybWF0O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIG1pcG1hcHNGYWNlcyxcbiAgICBlbmdpbmVGb3JtYXQsXG4gICAgaW50ZXJuYWxGb3JtYXQsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG4iLCJpbXBvcnQge1xuICBBc3NldFByb21pc2UsXG4gIEFzc2V0VHlwZSxcbiAgTG9hZGVyLFxuICBMb2FkSXRlbSxcbiAgcmVzb3VyY2VMb2FkZXIsXG4gIFJlc291cmNlTWFuYWdlcixcbiAgVGV4dHVyZUN1YmVGYWNlLFxuICBUZXh0dXJlQ3ViZVxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBwYXJzZUN1YmVLVFggfSBmcm9tIFwiLi9jb21wcmVzc2VkLXRleHR1cmVcIjtcblxuQHJlc291cmNlTG9hZGVyKEFzc2V0VHlwZS5LVFhDdWJlLCBbXSlcbmNsYXNzIEtUWEN1YmVMb2FkZXIgZXh0ZW5kcyBMb2FkZXI8VGV4dHVyZUN1YmU+IHtcbiAgbG9hZChpdGVtOiBMb2FkSXRlbSwgcmVzb3VyY2VNYW5hZ2VyOiBSZXNvdXJjZU1hbmFnZXIpOiBBc3NldFByb21pc2U8VGV4dHVyZUN1YmU+IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgaXRlbS51cmxzLm1hcCgodXJsKSA9PlxuICAgICAgICAgIHRoaXMucmVxdWVzdDxBcnJheUJ1ZmZlcj4odXJsLCB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheWJ1ZmZlclwiXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBwYXJzZUN1YmVLVFgoZGF0YSk7XG4gICAgICAgICAgY29uc3QgeyB3aWR0aCwgbWlwbWFwc0ZhY2VzLCBlbmdpbmVGb3JtYXQgfSA9IHBhcnNlZERhdGE7XG4gICAgICAgICAgY29uc3QgbWlwbWFwID0gbWlwbWFwc0ZhY2VzWzBdLmxlbmd0aCA+IDE7XG4gICAgICAgICAgY29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZShyZXNvdXJjZU1hbmFnZXIuZW5naW5lLCB3aWR0aCwgZW5naW5lRm9ybWF0LCBtaXBtYXApO1xuXG4gICAgICAgICAgZm9yIChsZXQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IG1pcG1hcHNGYWNlc1tmYWNlXS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAobGV0IG1pcGxldmVsID0gMDsgbWlwbGV2ZWwgPCBsZW5ndGg7IG1pcGxldmVsKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCB3aWR0aCwgaGVpZ2h0IH0gPSBtaXBtYXBzRmFjZXNbZmFjZV1bbWlwbGV2ZWxdO1xuXG4gICAgICAgICAgICAgIHRleHR1cmUuc2V0UGl4ZWxCdWZmZXIoVGV4dHVyZUN1YmVGYWNlLlBvc2l0aXZlWCArIGZhY2UsIGRhdGEsIG1pcGxldmVsLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBc3NldFByb21pc2UsXG4gIEFzc2V0VHlwZSxcbiAgTG9hZGVyLFxuICBMb2FkSXRlbSxcbiAgcmVzb3VyY2VMb2FkZXIsXG4gIFJlc291cmNlTWFuYWdlcixcbiAgVGV4dHVyZTJEXG59IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IHBhcnNlU2luZ2xlS1RYIH0gZnJvbSBcIi4vY29tcHJlc3NlZC10ZXh0dXJlXCI7XG5cbkByZXNvdXJjZUxvYWRlcihBc3NldFR5cGUuS1RYLCBbXCJrdHhcIl0pXG5leHBvcnQgY2xhc3MgS1RYTG9hZGVyIGV4dGVuZHMgTG9hZGVyPFRleHR1cmUyRD4ge1xuICBsb2FkKGl0ZW06IExvYWRJdGVtLCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IEFzc2V0UHJvbWlzZTxUZXh0dXJlMkQ+IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnJlcXVlc3Q8QXJyYXlCdWZmZXI+KGl0ZW0udXJsLCB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6IFwiYXJyYXlidWZmZXJcIlxuICAgICAgfSlcbiAgICAgICAgLnRoZW4oKGJpbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBwYXJzZVNpbmdsZUtUWChiaW4pO1xuICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbWlwbWFwcywgZW5naW5lRm9ybWF0IH0gPSBwYXJzZWREYXRhO1xuICAgICAgICAgIGNvbnN0IG1pcG1hcCA9IG1pcG1hcHMubGVuZ3RoID4gMTtcbiAgICAgICAgICBjb25zdCB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChyZXNvdXJjZU1hbmFnZXIuZW5naW5lLCB3aWR0aCwgaGVpZ2h0LCBlbmdpbmVGb3JtYXQsIG1pcG1hcCk7XG5cbiAgICAgICAgICBmb3IgKGxldCBtaXBsZXZlbCA9IDA7IG1pcGxldmVsIDwgbWlwbWFwcy5sZW5ndGg7IG1pcGxldmVsKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGF0YSB9ID0gbWlwbWFwc1ttaXBsZXZlbF07XG4gICAgICAgICAgICB0ZXh0dXJlLnNldFBpeGVsQnVmZmVyKGRhdGEsIG1pcGxldmVsLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBc3NldFByb21pc2UsXG4gIEFzc2V0VHlwZSxcbiAgQmxpbm5QaG9uZ01hdGVyaWFsLFxuICBMb2FkZXIsXG4gIExvYWRJdGVtLFxuICBQQlJCYXNlTWF0ZXJpYWwsXG4gIFBCUk1hdGVyaWFsLFxuICBQQlJTcGVjdWxhck1hdGVyaWFsLFxuICByZXNvdXJjZUxvYWRlcixcbiAgUmVzb3VyY2VNYW5hZ2VyLFxuICBTaGFkZXIsXG4gIFRleHR1cmUyRCxcbiAgVW5saXRNYXRlcmlhbFxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBDb2xvciwgVmVjdG9yMiwgVmVjdG9yMywgVmVjdG9yNCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLW1hdGhcIjtcblxuQHJlc291cmNlTG9hZGVyKEFzc2V0VHlwZS5NYXRlcmlhbCwgW1wianNvblwiXSlcbmNsYXNzIE1hdGVyaWFsTG9hZGVyIGV4dGVuZHMgTG9hZGVyPHN0cmluZz4ge1xuICBsb2FkKGl0ZW06IExvYWRJdGVtLCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IEFzc2V0UHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnJlcXVlc3QoaXRlbS51cmwsIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogXCJqc29uXCJcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKChqc29uOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgZW5naW5lID0gcmVzb3VyY2VNYW5hZ2VyLmVuZ2luZTtcbiAgICAgICAgICBjb25zdCB7IG5hbWUsIHNoYWRlciwgc2hhZGVyRGF0YSwgbWFjcm9zLCByZW5kZXJTdGF0ZSB9ID0ganNvbjtcblxuICAgICAgICAgIGxldCBtYXRlcmlhbDtcbiAgICAgICAgICBzd2l0Y2ggKHNoYWRlcikge1xuICAgICAgICAgICAgY2FzZSBcInBiclwiOlxuICAgICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBQQlJNYXRlcmlhbChlbmdpbmUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJwYnItc3BlY3VsYXJcIjpcbiAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgUEJSU3BlY3VsYXJNYXRlcmlhbChlbmdpbmUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ1bmxpdFwiOlxuICAgICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBVbmxpdE1hdGVyaWFsKGVuZ2luZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImJsaW5uLXBob25nXCI6XG4gICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IEJsaW5uUGhvbmdNYXRlcmlhbChlbmdpbmUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJiYWtlLXBiclwiOlxuICAgICAgICAgICAgICAvLyBAdG9kbyByZWZhY3RvciBjdXN0b20gc2hhZGVyIGxhdGVyXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgUEJSQmFzZU1hdGVyaWFsKGVuZ2luZSwgU2hhZGVyLmZpbmQoXCJiYWtlLXBiclwiKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXRlcmlhbC5uYW1lID0gbmFtZTtcblxuICAgICAgICAgIGNvbnN0IHRleHR1cmVQcm9taXNlcyA9IG5ldyBBcnJheTxQcm9taXNlPFRleHR1cmUyRCB8IHZvaWQ+PigpO1xuICAgICAgICAgIGNvbnN0IG1hdGVyaWFsU2hhZGVyRGF0YSA9IG1hdGVyaWFsLnNoYWRlckRhdGE7XG4gICAgICAgICAgZm9yIChsZXQga2V5IGluIHNoYWRlckRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgdmFsdWUgfSA9IHNoYWRlckRhdGFba2V5XTtcblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJWZWN0b3IyXCI6XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxTaGFkZXJEYXRhLnNldFZlY3RvcjIoa2V5LCBuZXcgVmVjdG9yMih2YWx1ZS54LCB2YWx1ZS55KSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJWZWN0b3IzXCI6XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxTaGFkZXJEYXRhLnNldFZlY3RvcjMoa2V5LCBuZXcgVmVjdG9yMyh2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56KSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJWZWN0b3I0XCI6XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxTaGFkZXJEYXRhLnNldFZlY3RvcjQoa2V5LCBuZXcgVmVjdG9yNCh2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDb2xvclwiOlxuICAgICAgICAgICAgICAgIG1hdGVyaWFsU2hhZGVyRGF0YS5zZXRDb2xvcihrZXksIG5ldyBDb2xvcih2YWx1ZS5yLCB2YWx1ZS5nLCB2YWx1ZS5iLCB2YWx1ZS5hKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJGbG9hdFwiOlxuICAgICAgICAgICAgICAgIG1hdGVyaWFsU2hhZGVyRGF0YS5zZXRGbG9hdChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlRleHR1cmVcIjpcbiAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlTWFuYWdlci5nZXRSZXNvdXJjZUJ5UmVmPFRleHR1cmUyRD4odmFsdWUpLnRoZW4oKHRleHR1cmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxTaGFkZXJEYXRhLnNldFRleHR1cmUoa2V5LCB0ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gbWFjcm9zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBtYWNyb3NbaV07XG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG1hdGVyaWFsU2hhZGVyRGF0YS5lbmFibGVNYWNybyhuYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hdGVyaWFsU2hhZGVyRGF0YS5lbmFibGVNYWNybyhuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChsZXQga2V5IGluIHJlbmRlclN0YXRlKSB7XG4gICAgICAgICAgICBtYXRlcmlhbFtrZXldID0gcmVuZGVyU3RhdGVba2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGV4dHVyZVByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUobWF0ZXJpYWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9jcmVhdGVfY2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuXG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZXhwb3J0IHsgX2NyZWF0ZV9jbGFzcyBhcyBfIH07XG4iLCJpbXBvcnQgeyBHTFRGVXRpbCB9IGZyb20gXCIuLi8uLi9nbHRmL0dMVEZVdGlsXCI7XG5pbXBvcnQgeyBhYjJzdHIgfSBmcm9tIFwiLi9VdGlsc1wiO1xuXG5jbGFzcyBJbWFnZURhdGEge1xuICB0eXBlOiBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGdcIiB8IFwiaW1hZ2Uvd2VicFwiIHwgXCJrdHhcIjtcbiAgYnVmZmVyOiBBcnJheUJ1ZmZlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1ZmZlclJlYWRlciB7XG4gIHByaXZhdGUgX2RhdGFWaWV3OiBEYXRhVmlldztcbiAgcHJpdmF0ZSBfbGl0dGxlRW5kaWFuOiBib29sZWFuO1xuICBwcml2YXRlIF9vZmZzZXQ6IG51bWJlcjtcblxuICBwdWJsaWMgc3RhdGljIGltYWdlTWFwcGluZyA9IHtcbiAgICAwOiBcImltYWdlL3BuZ1wiLFxuICAgIDE6IFwiaW1hZ2UvanBnXCIsXG4gICAgMjogXCJpbWFnZS93ZWJwXCIsXG4gICAgMzogXCJrdHhcIlxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBidWZmZXI6IEFycmF5QnVmZmVyLCBieXRlT2Zmc2V0OiBudW1iZXIgPSAwLCBieXRlTGVuZ3RoPzogbnVtYmVyLCBsaXR0bGVFbmRpYW46IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgLy8gYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPz8gX2J1ZmZlci5ieXRlTGVuZ3RoO1xuICAgIHRoaXMuX2RhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7XG4gICAgdGhpcy5fbGl0dGxlRW5kaWFuID0gbGl0dGxlRW5kaWFuO1xuICAgIHRoaXMuX29mZnNldCA9IGJ5dGVPZmZzZXQ7XG4gIH1cblxuICBnZXQgb2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9vZmZzZXQ7XG4gIH1cblxuICBuZXh0VWludDgoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhVmlldy5nZXRVaW50OCh0aGlzLl9vZmZzZXQpO1xuICAgIHRoaXMuX29mZnNldCArPSAxO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG5leHRVaW50MTYoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhVmlldy5nZXRVaW50MTYodGhpcy5fb2Zmc2V0LCB0aGlzLl9saXR0bGVFbmRpYW4pO1xuICAgIHRoaXMuX29mZnNldCArPSAyO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG5leHRVaW50MzIoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0LCB0aGlzLl9saXR0bGVFbmRpYW4pO1xuICAgIHRoaXMuX29mZnNldCArPSA0O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG5leHRJbnQzMigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGFWaWV3LmdldEludDMyKHRoaXMuX29mZnNldCwgdGhpcy5fbGl0dGxlRW5kaWFuKTtcbiAgICB0aGlzLl9vZmZzZXQgKz0gNDtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBuZXh0SW50MzJBcnJheShsZW46IG51bWJlcikge1xuICAgIGNvbnN0IHZhbHVlID0gbmV3IEludDMyQXJyYXkodGhpcy5idWZmZXIsIHRoaXMuX29mZnNldCwgbGVuKTtcbiAgICB0aGlzLl9vZmZzZXQgKz0gNCAqIGxlbjtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBuZXh0RmxvYXQzMigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGFWaWV3LmdldEZsb2F0MzIodGhpcy5fb2Zmc2V0LCB0aGlzLl9saXR0bGVFbmRpYW4pO1xuICAgIHRoaXMuX29mZnNldCArPSA0O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG5leHRGbG9hdDMyQXJyYXkobGVuOiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5idWZmZXIsIHRoaXMuX29mZnNldCwgbGVuKTtcbiAgICB0aGlzLl9vZmZzZXQgKz0gNCAqIGxlbjtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBuZXh0VWludDMyQXJyYXkobGVuOiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fb2Zmc2V0LCBsZW4pO1xuICAgIHRoaXMuX29mZnNldCArPSA0ICogbGVuO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG5leHRVaW50OEFycmF5KGxlbjogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsdWUgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fb2Zmc2V0LCBsZW4pO1xuICAgIHRoaXMuX29mZnNldCArPSBsZW47XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgbmV4dFVpbnQ2NCgpIHtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5fZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMuX29mZnNldCwgdGhpcy5fbGl0dGxlRW5kaWFuKTtcbiAgICBjb25zdCByaWdodCA9IHRoaXMuX2RhdGFWaWV3LmdldFVpbnQzMih0aGlzLl9vZmZzZXQgKyA0LCB0aGlzLl9saXR0bGVFbmRpYW4pO1xuICAgIGNvbnN0IHZhbHVlID0gbGVmdCArIDIgKiogMzIgKiByaWdodDtcbiAgICB0aGlzLl9vZmZzZXQgKz0gODtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBuZXh0U3RyKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyQnl0ZUxlbmd0aCA9IHRoaXMubmV4dFVpbnQxNigpO1xuICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fb2Zmc2V0LCBzdHJCeXRlTGVuZ3RoKTtcbiAgICB0aGlzLl9vZmZzZXQgKz0gc3RyQnl0ZUxlbmd0aDtcbiAgICByZXR1cm4gR0xURlV0aWwuZGVjb2RlVGV4dCh1aW50OEFycmF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbWFnZSBkYXRhIOaUvuWcqOacgOWQjlxuICAgKi9cbiAgbmV4dEltYWdlRGF0YShjb3VudDogbnVtYmVyID0gMCk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuc2xpY2UodGhpcy5fb2Zmc2V0KTtcbiAgfVxuXG4gIG5leHRJbWFnZXNEYXRhKGNvdW50OiBudW1iZXIpOiBBcnJheUJ1ZmZlcltdIHtcbiAgICBjb25zdCBpbWFnZXNMZW4gPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIC8vIFN0YXJ0IG9mZnNldCBvZiBVaW50MzJBcnJheSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA0LiByZWY6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NDE3MzEwL3doeS10eXBlZC1hcnJheS1jb25zdHJ1Y3RvcnMtcmVxdWlyZS1vZmZzZXQtdG8tYmUtbXVsdGlwbGUtb2YtdW5kZXJseWluZy10eXBlLXNpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBsZW4gPSB0aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0LCB0aGlzLl9saXR0bGVFbmRpYW4pO1xuICAgICAgaW1hZ2VzTGVuW2ldID0gbGVuO1xuICAgICAgdGhpcy5fb2Zmc2V0ICs9IDQ7XG4gICAgfVxuICAgIGNvbnN0IGltYWdlc0RhdGE6IEFycmF5QnVmZmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgY29uc3QgbGVuID0gaW1hZ2VzTGVuW2ldO1xuICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXIuc2xpY2UodGhpcy5fb2Zmc2V0LCB0aGlzLl9vZmZzZXQgKyBsZW4pO1xuICAgICAgdGhpcy5fb2Zmc2V0ICs9IGxlbjtcbiAgICAgIGltYWdlc0RhdGEucHVzaChidWZmZXIpO1xuICAgIH1cbiAgICByZXR1cm4gaW1hZ2VzRGF0YTtcbiAgfVxuXG4gIHNraXAoYnl0ZXM6IG51bWJlcikge1xuICAgIHRoaXMuX29mZnNldCArPSBieXRlcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNjYW4obWF4Qnl0ZUxlbmd0aDogbnVtYmVyLCB0ZXJtOiBudW1iZXIgPSAweDAwKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgYnl0ZU9mZnNldCA9IHRoaXMuX29mZnNldDtcbiAgICBsZXQgYnl0ZUxlbmd0aCA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2RhdGFWaWV3LmdldFVpbnQ4KHRoaXMuX29mZnNldCkgIT09IHRlcm0gJiYgYnl0ZUxlbmd0aCA8IG1heEJ5dGVMZW5ndGgpIHtcbiAgICAgIGJ5dGVMZW5ndGgrKztcbiAgICAgIHRoaXMuX29mZnNldCsrO1xuICAgIH1cblxuICAgIGlmIChieXRlTGVuZ3RoIDwgbWF4Qnl0ZUxlbmd0aCkgdGhpcy5fb2Zmc2V0Kys7XG5cbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodGhpcy5fZGF0YVZpZXcuYnVmZmVyLCB0aGlzLl9kYXRhVmlldy5ieXRlT2Zmc2V0ICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEVuZ2luZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgQnVmZmVyUmVhZGVyIH0gZnJvbSBcIi4vQnVmZmVyUmVhZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBkZWNvZGVyTWFwOiBSZWNvcmQ8XG4gIHN0cmluZyxcbiAge1xuICAgIGRlY29kZTogKGVuZ2luZTogRW5naW5lLCBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcikgPT4gUHJvbWlzZTxhbnk+O1xuICB9XG4+ID0ge307XG5cbi8qKlxuICogRGVjb2RlciBkZWNvcmF0b3IgZ2VuZXJhdG9yLlxuICogQHBhcmFtIHR5cGUgLSByZXNvdXJjZSBmaWxlIHR5cGUuXG4gKiBAcmV0dXJucyBEZWNvZGVyIGRlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2Rlcih0eXBlOiBzdHJpbmcpOiBDbGFzc0RlY29yYXRvciB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnkpID0+IHtcbiAgICBkZWNvZGVyTWFwW3R5cGVdID0gdGFyZ2V0O1xuICB9O1xufSIsImltcG9ydCB7IEdMVEZVdGlsIH0gZnJvbSBcIi4uLy4uL2dsdGYvR0xURlV0aWxcIjtcblxuZXhwb3J0IGNsYXNzIEZpbGVIZWFkZXIge1xuICB0b3RhbExlbmd0aDogbnVtYmVyID0gMDtcbiAgdmVyc2lvbjogbnVtYmVyID0gMDtcbiAgdHlwZTogc3RyaW5nID0gXCJcIjtcbiAgbmFtZTogc3RyaW5nID0gXCJcIjtcbiAgaGVhZGVyTGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gIHN0YXRpYyBkZWNvZGUoYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyKTogRmlsZUhlYWRlciB7XG4gICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXlCdWZmZXIpO1xuICAgIGNvbnN0IHRvdGFsTGVuID0gZGF0YVZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xuICAgIGNvbnN0IGZpbGVWZXJzaW9uID0gZGF0YVZpZXcuZ2V0VWludDgoNCk7XG4gICAgY29uc3QgdHlwZUxlbiA9IGRhdGFWaWV3LmdldFVpbnQxNig1LCB0cnVlKTtcbiAgICBjb25zdCB0eXBlVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCA3LCB0eXBlTGVuKTtcbiAgICBjb25zdCBuYW1lTGVuID0gZGF0YVZpZXcuZ2V0VWludDE2KDcgKyB0eXBlTGVuLCB0cnVlKTtcbiAgICBjb25zdCBuYW1lVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCA5ICsgdHlwZUxlbiwgbmFtZUxlbik7XG5cbiAgICBjb25zdCBuYW1lID0gR0xURlV0aWwuZGVjb2RlVGV4dChuYW1lVWludDhBcnJheSk7XG4gICAgY29uc3QgdHlwZSA9IEdMVEZVdGlsLmRlY29kZVRleHQodHlwZVVpbnQ4QXJyYXkpO1xuICAgIGNvbnN0IGhlYWRlciA9IG5ldyBGaWxlSGVhZGVyKCk7XG4gICAgaGVhZGVyLnRvdGFsTGVuZ3RoID0gdG90YWxMZW47XG4gICAgaGVhZGVyLm5hbWUgPSBuYW1lO1xuICAgIGhlYWRlci50eXBlID0gdHlwZTtcbiAgICBoZWFkZXIudmVyc2lvbiA9IGZpbGVWZXJzaW9uO1xuICAgIGhlYWRlci5oZWFkZXJMZW5ndGggPSBuYW1lVWludDhBcnJheS5ieXRlTGVuZ3RoICsgdHlwZVVpbnQ4QXJyYXkuYnl0ZUxlbmd0aCArIDk7XG4gICAgcmV0dXJuIGhlYWRlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3RhbExlbmd0aCAtIHRoaXMuaGVhZGVyTGVuZ3RoO1xuICB9XG59XG4iLCJpbXBvcnQgeyBNb2RlbE1lc2gsIEJsZW5kU2hhcGUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBkZWNvZGVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL0RlY29yYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBFbmdpbmUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEJ1ZmZlclJlYWRlciB9IGZyb20gXCIuLi8uLi91dGlscy9CdWZmZXJSZWFkZXJcIjtcbmltcG9ydCB7IElFbmNvZGVkTW9kZWxNZXNoIH0gZnJvbSBcIi4vSU1vZGVsTWVzaFwiO1xuaW1wb3J0IHsgQ29sb3IsIFZlY3RvcjIsIFZlY3RvcjMsIFZlY3RvcjQgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1tYXRoXCI7XG5cbi8qKlxuICogQHRvZG8gcmVmYWN0b3IgXG4gKi9cbkBkZWNvZGVyKFwiTWVzaFwiKVxuZXhwb3J0IGNsYXNzIE1lc2hEZWNvZGVyIHtcbiAgcHVibGljIHN0YXRpYyBkZWNvZGUoZW5naW5lOiBFbmdpbmUsIGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogUHJvbWlzZTxNb2RlbE1lc2g+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsTWVzaCA9IG5ldyBNb2RlbE1lc2goZW5naW5lKTtcbiAgICAgIGNvbnN0IGpzb25EYXRhU3RyaW5nID0gYnVmZmVyUmVhZGVyLm5leHRTdHIoKTtcbiAgICAgIGNvbnN0IGVuY29kZWRNZXNoRGF0YTogSUVuY29kZWRNb2RlbE1lc2ggPSBKU09OLnBhcnNlKGpzb25EYXRhU3RyaW5nKTtcblxuICAgICAgLy8gQHRzLWlnbm9yZSBWZWN0b3IzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGgge3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJ9LlxuICAgICAgZW5jb2RlZE1lc2hEYXRhLmJvdW5kcyAmJiBtb2RlbE1lc2guYm91bmRzLmNvcHlGcm9tKGVuY29kZWRNZXNoRGF0YS5ib3VuZHMpO1xuXG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmNlaWwoYnVmZmVyUmVhZGVyLm9mZnNldCAvIDQpICogNDtcblxuICAgICAgY29uc3QgZmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcbiAgICAgICAgYnVmZmVyUmVhZGVyLmJ1ZmZlcixcbiAgICAgICAgZW5jb2RlZE1lc2hEYXRhLnBvc2l0aW9ucy5zdGFydCArIG9mZnNldCxcbiAgICAgICAgKGVuY29kZWRNZXNoRGF0YS5wb3NpdGlvbnMuZW5kIC0gZW5jb2RlZE1lc2hEYXRhLnBvc2l0aW9ucy5zdGFydCkgLyA0XG4gICAgICApO1xuICAgICAgY29uc3QgdmVydGV4Q291bnQgPSBmbG9hdDMyQXJyYXkubGVuZ3RoIC8gMztcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZsb2F0MzJBcnJheVRvVmVjdG9yMyhmbG9hdDMyQXJyYXksIHZlcnRleENvdW50KTtcbiAgICAgIG1vZGVsTWVzaC5zZXRQb3NpdGlvbnMocG9zaXRpb25zKTtcbiAgICAgIGlmIChlbmNvZGVkTWVzaERhdGEubm9ybWFscykge1xuICAgICAgICBjb25zdCBmbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KFxuICAgICAgICAgIGJ1ZmZlclJlYWRlci5idWZmZXIsXG4gICAgICAgICAgZW5jb2RlZE1lc2hEYXRhLm5vcm1hbHMuc3RhcnQgKyBvZmZzZXQsXG4gICAgICAgICAgKGVuY29kZWRNZXNoRGF0YS5ub3JtYWxzLmVuZCAtIGVuY29kZWRNZXNoRGF0YS5ub3JtYWxzLnN0YXJ0KSAvIDRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9ybWFscyA9IGZsb2F0MzJBcnJheVRvVmVjdG9yMyhmbG9hdDMyQXJyYXksIHZlcnRleENvdW50KTtcbiAgICAgICAgbW9kZWxNZXNoLnNldE5vcm1hbHMobm9ybWFscyk7XG4gICAgICB9XG4gICAgICBpZiAoZW5jb2RlZE1lc2hEYXRhLnV2cykge1xuICAgICAgICBjb25zdCBmbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KFxuICAgICAgICAgIGJ1ZmZlclJlYWRlci5idWZmZXIsXG4gICAgICAgICAgZW5jb2RlZE1lc2hEYXRhLnV2cy5zdGFydCArIG9mZnNldCxcbiAgICAgICAgICAoZW5jb2RlZE1lc2hEYXRhLnV2cy5lbmQgLSBlbmNvZGVkTWVzaERhdGEudXZzLnN0YXJ0KSAvIDRcbiAgICAgICAgKTtcbiAgICAgICAgbW9kZWxNZXNoLnNldFVWcyhmbG9hdDMyQXJyYXlUb1ZlY3RvcjIoZmxvYXQzMkFycmF5LCB2ZXJ0ZXhDb3VudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGVuY29kZWRNZXNoRGF0YS51djEpIHtcbiAgICAgICAgY29uc3QgZmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcbiAgICAgICAgICBidWZmZXJSZWFkZXIuYnVmZmVyLFxuICAgICAgICAgIGVuY29kZWRNZXNoRGF0YS51djEuc3RhcnQgKyBvZmZzZXQsXG4gICAgICAgICAgKGVuY29kZWRNZXNoRGF0YS51djEuZW5kIC0gZW5jb2RlZE1lc2hEYXRhLnV2MS5zdGFydCkgLyA0XG4gICAgICAgICk7XG4gICAgICAgIG1vZGVsTWVzaC5zZXRVVnMoZmxvYXQzMkFycmF5VG9WZWN0b3IyKGZsb2F0MzJBcnJheSwgdmVydGV4Q291bnQpLCAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmNvZGVkTWVzaERhdGEudXYyKSB7XG4gICAgICAgIGNvbnN0IGZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoXG4gICAgICAgICAgYnVmZmVyUmVhZGVyLmJ1ZmZlcixcbiAgICAgICAgICBlbmNvZGVkTWVzaERhdGEudXYyLnN0YXJ0ICsgb2Zmc2V0LFxuICAgICAgICAgIChlbmNvZGVkTWVzaERhdGEudXYyLmVuZCAtIGVuY29kZWRNZXNoRGF0YS51djIuc3RhcnQpIC8gNFxuICAgICAgICApO1xuICAgICAgICBtb2RlbE1lc2guc2V0VVZzKGZsb2F0MzJBcnJheVRvVmVjdG9yMihmbG9hdDMyQXJyYXksIHZlcnRleENvdW50KSwgMik7XG4gICAgICB9XG4gICAgICBpZiAoZW5jb2RlZE1lc2hEYXRhLnV2Mykge1xuICAgICAgICBjb25zdCBmbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KFxuICAgICAgICAgIGJ1ZmZlclJlYWRlci5idWZmZXIsXG4gICAgICAgICAgZW5jb2RlZE1lc2hEYXRhLnV2My5zdGFydCArIG9mZnNldCxcbiAgICAgICAgICAoZW5jb2RlZE1lc2hEYXRhLnV2My5lbmQgLSBlbmNvZGVkTWVzaERhdGEudXYzLnN0YXJ0KSAvIDRcbiAgICAgICAgKTtcbiAgICAgICAgbW9kZWxNZXNoLnNldFVWcyhmbG9hdDMyQXJyYXlUb1ZlY3RvcjIoZmxvYXQzMkFycmF5LCB2ZXJ0ZXhDb3VudCksIDMpO1xuICAgICAgfVxuICAgICAgaWYgKGVuY29kZWRNZXNoRGF0YS51djQpIHtcbiAgICAgICAgY29uc3QgZmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcbiAgICAgICAgICBidWZmZXJSZWFkZXIuYnVmZmVyLFxuICAgICAgICAgIGVuY29kZWRNZXNoRGF0YS51djQuc3RhcnQgKyBvZmZzZXQsXG4gICAgICAgICAgKGVuY29kZWRNZXNoRGF0YS51djQuZW5kIC0gZW5jb2RlZE1lc2hEYXRhLnV2NC5zdGFydCkgLyA0XG4gICAgICAgICk7XG4gICAgICAgIG1vZGVsTWVzaC5zZXRVVnMoZmxvYXQzMkFycmF5VG9WZWN0b3IyKGZsb2F0MzJBcnJheSwgdmVydGV4Q291bnQpLCA0KTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmNvZGVkTWVzaERhdGEudXY1KSB7XG4gICAgICAgIGNvbnN0IGZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoXG4gICAgICAgICAgYnVmZmVyUmVhZGVyLmJ1ZmZlcixcbiAgICAgICAgICBlbmNvZGVkTWVzaERhdGEudXY1LnN0YXJ0ICsgb2Zmc2V0LFxuICAgICAgICAgIChlbmNvZGVkTWVzaERhdGEudXY1LmVuZCAtIGVuY29kZWRNZXNoRGF0YS51djUuc3RhcnQpIC8gNFxuICAgICAgICApO1xuICAgICAgICBtb2RlbE1lc2guc2V0VVZzKGZsb2F0MzJBcnJheVRvVmVjdG9yMihmbG9hdDMyQXJyYXksIHZlcnRleENvdW50KSwgNSk7XG4gICAgICB9XG4gICAgICBpZiAoZW5jb2RlZE1lc2hEYXRhLnV2Nikge1xuICAgICAgICBjb25zdCBmbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KFxuICAgICAgICAgIGJ1ZmZlclJlYWRlci5idWZmZXIsXG4gICAgICAgICAgZW5jb2RlZE1lc2hEYXRhLnV2Ni5zdGFydCArIG9mZnNldCxcbiAgICAgICAgICAoZW5jb2RlZE1lc2hEYXRhLnV2Ni5lbmQgLSBlbmNvZGVkTWVzaERhdGEudXY2LnN0YXJ0KSAvIDRcbiAgICAgICAgKTtcbiAgICAgICAgbW9kZWxNZXNoLnNldFVWcyhmbG9hdDMyQXJyYXlUb1ZlY3RvcjIoZmxvYXQzMkFycmF5LCB2ZXJ0ZXhDb3VudCksIDYpO1xuICAgICAgfVxuICAgICAgaWYgKGVuY29kZWRNZXNoRGF0YS51djcpIHtcbiAgICAgICAgY29uc3QgZmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcbiAgICAgICAgICBidWZmZXJSZWFkZXIuYnVmZmVyLFxuICAgICAgICAgIGVuY29kZWRNZXNoRGF0YS51djcuc3RhcnQgKyBvZmZzZXQsXG4gICAgICAgICAgKGVuY29kZWRNZXNoRGF0YS51djcuZW5kIC0gZW5jb2RlZE1lc2hEYXRhLnV2Ny5zdGFydCkgLyA0XG4gICAgICAgICk7XG4gICAgICAgIG1vZGVsTWVzaC5zZXRVVnMoZmxvYXQzMkFycmF5VG9WZWN0b3IyKGZsb2F0MzJBcnJheSwgdmVydGV4Q291bnQpLCA3KTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmNvZGVkTWVzaERhdGEuY29sb3JzKSB7XG4gICAgICAgIGNvbnN0IGZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoXG4gICAgICAgICAgYnVmZmVyUmVhZGVyLmJ1ZmZlcixcbiAgICAgICAgICBlbmNvZGVkTWVzaERhdGEuY29sb3JzLnN0YXJ0ICsgb2Zmc2V0LFxuICAgICAgICAgIChlbmNvZGVkTWVzaERhdGEuY29sb3JzLmVuZCAtIGVuY29kZWRNZXNoRGF0YS5jb2xvcnMuc3RhcnQpIC8gNFxuICAgICAgICApO1xuICAgICAgICBtb2RlbE1lc2guc2V0Q29sb3JzKGZsb2F0MzJBcnJheVRvVkNvbG9yKGZsb2F0MzJBcnJheSwgdmVydGV4Q291bnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmNvZGVkTWVzaERhdGEuYm9uZVdlaWdodHMpIHtcbiAgICAgICAgY29uc3QgZmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcbiAgICAgICAgICBidWZmZXJSZWFkZXIuYnVmZmVyLFxuICAgICAgICAgIGVuY29kZWRNZXNoRGF0YS5ib25lV2VpZ2h0cy5zdGFydCArIG9mZnNldCxcbiAgICAgICAgICAoZW5jb2RlZE1lc2hEYXRhLmJvbmVXZWlnaHRzLmVuZCAtIGVuY29kZWRNZXNoRGF0YS5ib25lV2VpZ2h0cy5zdGFydCkgLyA0XG4gICAgICAgICk7XG4gICAgICAgIG1vZGVsTWVzaC5zZXRCb25lV2VpZ2h0cyhmbG9hdDMyQXJyYXlUb1ZlY3RvcjQoZmxvYXQzMkFycmF5LCB2ZXJ0ZXhDb3VudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGVuY29kZWRNZXNoRGF0YS5ib25lSW5kaWNlcykge1xuICAgICAgICBjb25zdCBmbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KFxuICAgICAgICAgIGJ1ZmZlclJlYWRlci5idWZmZXIsXG4gICAgICAgICAgZW5jb2RlZE1lc2hEYXRhLmJvbmVJbmRpY2VzLnN0YXJ0ICsgb2Zmc2V0LFxuICAgICAgICAgIChlbmNvZGVkTWVzaERhdGEuYm9uZUluZGljZXMuZW5kIC0gZW5jb2RlZE1lc2hEYXRhLmJvbmVJbmRpY2VzLnN0YXJ0KSAvIDRcbiAgICAgICAgKTtcbiAgICAgICAgbW9kZWxNZXNoLnNldEJvbmVJbmRpY2VzKGZsb2F0MzJBcnJheVRvVmVjdG9yNChmbG9hdDMyQXJyYXksIHZlcnRleENvdW50KSk7XG4gICAgICB9XG4gICAgICBpZiAoZW5jb2RlZE1lc2hEYXRhLmJsZW5kU2hhcGVzKSB7XG4gICAgICAgIGVuY29kZWRNZXNoRGF0YS5ibGVuZFNoYXBlcy5mb3JFYWNoKChibGVuZFNoYXBlRGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJsZW5kU2hhcGUgPSBuZXcgQmxlbmRTaGFwZShibGVuZFNoYXBlRGF0YS5uYW1lKTtcbiAgICAgICAgICBibGVuZFNoYXBlRGF0YS5mcmFtZXMuZm9yRWFjaCgoZnJhbWVEYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcbiAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLmJ1ZmZlcixcbiAgICAgICAgICAgICAgZnJhbWVEYXRhLmRlbHRhUG9zaXRpb24uc3RhcnQgKyBvZmZzZXQsXG4gICAgICAgICAgICAgIChmcmFtZURhdGEuZGVsdGFQb3NpdGlvbi5lbmQgLSBmcmFtZURhdGEuZGVsdGFQb3NpdGlvbi5zdGFydCkgLyA0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSBwb3NpdGlvbkFycmF5Lmxlbmd0aCAvIDM7XG4gICAgICAgICAgICBjb25zdCBkZWx0YVBvc2l0aW9uID0gZmxvYXQzMkFycmF5VG9WZWN0b3IzKHBvc2l0aW9uQXJyYXksIGNvdW50KTtcbiAgICAgICAgICAgIGxldCBkZWx0YU5vcm1hbHM6IFZlY3RvcjNbXSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGZyYW1lRGF0YS5kZWx0YU5vcm1hbHMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIuYnVmZmVyLFxuICAgICAgICAgICAgICAgIGZyYW1lRGF0YS5kZWx0YU5vcm1hbHMuc3RhcnQgKyBvZmZzZXQsXG4gICAgICAgICAgICAgICAgKGZyYW1lRGF0YS5kZWx0YU5vcm1hbHMuZW5kIC0gZnJhbWVEYXRhLmRlbHRhTm9ybWFscy5zdGFydCkgLyA0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRlbHRhTm9ybWFscyA9IGZsb2F0MzJBcnJheVRvVmVjdG9yMyhub3JtYWxzQXJyYXksIGNvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkZWx0YVRhbmdlbnRzOiBWZWN0b3I0W10gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChmcmFtZURhdGEuZGVsdGFUYW5nZW50cykge1xuICAgICAgICAgICAgICBjb25zdCB0YW5nZW50c0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIuYnVmZmVyLFxuICAgICAgICAgICAgICAgIGZyYW1lRGF0YS5kZWx0YVRhbmdlbnRzLnN0YXJ0ICsgb2Zmc2V0LFxuICAgICAgICAgICAgICAgIChmcmFtZURhdGEuZGVsdGFUYW5nZW50cy5lbmQgLSBmcmFtZURhdGEuZGVsdGFUYW5nZW50cy5zdGFydCkgLyA0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRlbHRhVGFuZ2VudHMgPSBmbG9hdDMyQXJyYXlUb1ZlY3RvcjQodGFuZ2VudHNBcnJheSwgY291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmxlbmRTaGFwZS5hZGRGcmFtZShmcmFtZURhdGEud2VpZ2h0LCBkZWx0YVBvc2l0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtb2RlbE1lc2guYWRkQmxlbmRTaGFwZShibGVuZFNoYXBlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZW5jb2RlZE1lc2hEYXRhLmluZGljZXMpIHtcbiAgICAgICAgbGV0IGluZGljZXM6IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkgPSBudWxsO1xuICAgICAgICBpZiAoZW5jb2RlZE1lc2hEYXRhLmluZGljZXMudHlwZSA9PT0gMCkge1xuICAgICAgICAgIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoXG4gICAgICAgICAgICBidWZmZXJSZWFkZXIuYnVmZmVyLFxuICAgICAgICAgICAgZW5jb2RlZE1lc2hEYXRhLmluZGljZXMuc3RhcnQgKyBvZmZzZXQsXG4gICAgICAgICAgICAoZW5jb2RlZE1lc2hEYXRhLmluZGljZXMuZW5kIC0gZW5jb2RlZE1lc2hEYXRhLmluZGljZXMuc3RhcnQpIC8gMlxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShcbiAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5idWZmZXIsXG4gICAgICAgICAgICBlbmNvZGVkTWVzaERhdGEuaW5kaWNlcy5zdGFydCArIG9mZnNldCxcbiAgICAgICAgICAgIChlbmNvZGVkTWVzaERhdGEuaW5kaWNlcy5lbmQgLSBlbmNvZGVkTWVzaERhdGEuaW5kaWNlcy5zdGFydCkgLyA0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBtb2RlbE1lc2guc2V0SW5kaWNlcyhpbmRpY2VzKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgZW5jb2RlZE1lc2hEYXRhLnN1Yk1lc2hlcy5mb3JFYWNoKChzdWJNZXNoKSA9PiBtb2RlbE1lc2guYWRkU3ViTWVzaChzdWJNZXNoKSk7XG4gICAgICBtb2RlbE1lc2gudXBsb2FkRGF0YShmYWxzZSk7XG4gICAgICByZXNvbHZlKG1vZGVsTWVzaCk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxvYXQzMkFycmF5VG9WQ29sb3IoZmxvYXQzMkFycmF5OiBGbG9hdDMyQXJyYXksIHZlcnRleENvdW50OiBudW1iZXIpIHtcbiAgY29uc3QgYXJyYXkgPSBuZXcgQXJyYXkodmVydGV4Q291bnQpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcbiAgICBhcnJheVtpXSA9IG5ldyBDb2xvcihcbiAgICAgIGZsb2F0MzJBcnJheVtpICogNF0sXG4gICAgICBmbG9hdDMyQXJyYXlbaSAqIDQgKyAxXSxcbiAgICAgIGZsb2F0MzJBcnJheVtpICogNCArIDJdLFxuICAgICAgZmxvYXQzMkFycmF5W2kgKiA0ICsgM11cbiAgICApO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gZmxvYXQzMkFycmF5VG9WZWN0b3I0KGZsb2F0MzJBcnJheTogRmxvYXQzMkFycmF5LCB2ZXJ0ZXhDb3VudDogbnVtYmVyKSB7XG4gIGNvbnN0IGFycmF5ID0gbmV3IEFycmF5KHZlcnRleENvdW50KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG4gICAgYXJyYXlbaV0gPSBuZXcgVmVjdG9yNChcbiAgICAgIGZsb2F0MzJBcnJheVtpICogNF0sXG4gICAgICBmbG9hdDMyQXJyYXlbaSAqIDQgKyAxXSxcbiAgICAgIGZsb2F0MzJBcnJheVtpICogNCArIDJdLFxuICAgICAgZmxvYXQzMkFycmF5W2kgKiA0ICsgM11cbiAgICApO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gZmxvYXQzMkFycmF5VG9WZWN0b3IzKGZsb2F0MzJBcnJheTogRmxvYXQzMkFycmF5LCB2ZXJ0ZXhDb3VudDogbnVtYmVyKSB7XG4gIGNvbnN0IGFycmF5ID0gbmV3IEFycmF5KHZlcnRleENvdW50KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG4gICAgYXJyYXlbaV0gPSBuZXcgVmVjdG9yMyhmbG9hdDMyQXJyYXlbaSAqIDNdLCBmbG9hdDMyQXJyYXlbaSAqIDMgKyAxXSwgZmxvYXQzMkFycmF5W2kgKiAzICsgMl0pO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gZmxvYXQzMkFycmF5VG9WZWN0b3IyKGZsb2F0MzJBcnJheTogRmxvYXQzMkFycmF5LCB2ZXJ0ZXhDb3VudDogbnVtYmVyKSB7XG4gIGNvbnN0IGFycmF5ID0gbmV3IEFycmF5KHZlcnRleENvdW50KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG4gICAgYXJyYXlbaV0gPSBuZXcgVmVjdG9yMihmbG9hdDMyQXJyYXlbaSAqIDJdLCBmbG9hdDMyQXJyYXlbaSAqIDIgKyAxXSk7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuIiwiaW1wb3J0IHsgRW5naW5lLCBUZXh0dXJlMkQgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBCdWZmZXJSZWFkZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvQnVmZmVyUmVhZGVyXCI7XG5pbXBvcnQgeyBkZWNvZGVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL0RlY29yYXRvclwiO1xuXG5AZGVjb2RlcihcIlRleHR1cmUyRFwiKVxuZXhwb3J0IGNsYXNzIFRleHR1cmUyRERlY29kZXIge1xuICBzdGF0aWMgZGVjb2RlKGVuZ2luZTogRW5naW5lLCBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcik6IFByb21pc2U8VGV4dHVyZTJEPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9iamVjdElkID0gYnVmZmVyUmVhZGVyLm5leHRTdHIoKTtcbiAgICAgIGNvbnN0IG1pcG1hcCA9ICEhYnVmZmVyUmVhZGVyLm5leHRVaW50OCgpO1xuICAgICAgY29uc3QgZmlsdGVyTW9kZSA9IGJ1ZmZlclJlYWRlci5uZXh0VWludDgoKTtcbiAgICAgIGNvbnN0IGFuaXNvTGV2ZWwgPSBidWZmZXJSZWFkZXIubmV4dFVpbnQ4KCk7XG4gICAgICBjb25zdCB3cmFwTW9kZVUgPSBidWZmZXJSZWFkZXIubmV4dFVpbnQ4KCk7XG4gICAgICBjb25zdCB3cmFwTW9kZVYgPSBidWZmZXJSZWFkZXIubmV4dFVpbnQ4KCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBidWZmZXJSZWFkZXIubmV4dFVpbnQ4KCk7XG4gICAgICBjb25zdCB3aWR0aCA9IGJ1ZmZlclJlYWRlci5uZXh0VWludDE2KCk7XG4gICAgICBjb25zdCBoZWlnaHQgPSBidWZmZXJSZWFkZXIubmV4dFVpbnQxNigpO1xuICAgICAgY29uc3QgaXNQaXhlbEJ1ZmZlciA9IGJ1ZmZlclJlYWRlci5uZXh0VWludDgoKTtcblxuICAgICAgY29uc3QgbWlwQ291bnQgPSBidWZmZXJSZWFkZXIubmV4dFVpbnQ4KCk7XG4gICAgICBjb25zdCBpbWFnZXNEYXRhID0gYnVmZmVyUmVhZGVyLm5leHRJbWFnZXNEYXRhKG1pcENvdW50KTtcblxuICAgICAgY29uc3QgdGV4dHVyZTJEID0gbmV3IFRleHR1cmUyRChlbmdpbmUsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgbWlwbWFwKTtcbiAgICAgIHRleHR1cmUyRC5maWx0ZXJNb2RlID0gZmlsdGVyTW9kZTtcbiAgICAgIHRleHR1cmUyRC5hbmlzb0xldmVsID0gYW5pc29MZXZlbDtcbiAgICAgIHRleHR1cmUyRC53cmFwTW9kZVUgPSB3cmFwTW9kZVU7XG4gICAgICB0ZXh0dXJlMkQud3JhcE1vZGVWID0gd3JhcE1vZGVWO1xuXG4gICAgICBpZiAoaXNQaXhlbEJ1ZmZlcikge1xuICAgICAgICBjb25zdCBwaXhlbEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGltYWdlc0RhdGFbMF0pO1xuICAgICAgICB0ZXh0dXJlMkQuc2V0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIpO1xuICAgICAgICBpZiAobWlwbWFwKSB7XG4gICAgICAgICAgdGV4dHVyZTJELmdlbmVyYXRlTWlwbWFwcygpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbWlwQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGl4ZWxCdWZmZXIgPSBuZXcgVWludDhBcnJheShpbWFnZXNEYXRhW2ldKTtcbiAgICAgICAgICAgIHRleHR1cmUyRC5zZXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZW5naW5lLnJlc291cmNlTWFuYWdlci5fb2JqZWN0UG9vbFtvYmplY3RJZF0gPSB0ZXh0dXJlMkQ7XG4gICAgICAgIHJlc29sdmUodGV4dHVyZTJEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IoW2ltYWdlc0RhdGFbMF1dKTtcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgdGV4dHVyZTJELnNldEltYWdlU291cmNlKGltZyk7XG4gICAgICAgICAgbGV0IGNvbXBsZXRlZENvdW50ID0gMDtcbiAgICAgICAgICBjb25zdCBvbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29tcGxldGVkQ291bnQrKztcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWRDb3VudCA+PSBtaXBDb3VudCkge1xuICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmUyRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgaWYgKG1pcG1hcCkge1xuICAgICAgICAgICAgdGV4dHVyZTJELmdlbmVyYXRlTWlwbWFwcygpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtaXBDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IoW2ltYWdlc0RhdGFbaV1dKTtcbiAgICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZTJELnNldEltYWdlU291cmNlKGltZywgaSk7XG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpbWcuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGltZy5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IHsgX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdCBhcyBfIH07XG4iLCJpbXBvcnQgeyBfaXNfbmF0aXZlX3JlZmxlY3RfY29uc3RydWN0IH0gZnJvbSBcIi4vX2lzX25hdGl2ZV9yZWZsZWN0X2NvbnN0cnVjdC5qc1wiO1xuaW1wb3J0IHsgX3NldF9wcm90b3R5cGVfb2YgfSBmcm9tIFwiLi9fc2V0X3Byb3RvdHlwZV9vZi5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgIGlmIChfaXNfbmF0aXZlX3JlZmxlY3RfY29uc3RydWN0KCkpIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgICBlbHNlIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIGNvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICAgICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgICAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgICAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuXG4gICAgICAgICAgICBpZiAoQ2xhc3MpIF9zZXRfcHJvdG90eXBlX29mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbmV4cG9ydCB7IF9jb25zdHJ1Y3QgYXMgXyB9O1xuIiwiaW1wb3J0IHsgRW5naW5lLCBFbnRpdHksIExvYWRlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IElCYXNpY1R5cGUsIElDbGFzc09iamVjdCwgSUVudGl0eSwgSUFzc2V0UmVmIH0gZnJvbSBcIi4vUHJlZmFiRGVzaWduXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWZsZWN0aW9uUGFyc2VyIHtcbiAgc3RhdGljIGN1c3RvbVBhcnNlQ29tcG9uZW50SGFuZGxlcyA9IG5ldyBNYXA8c3RyaW5nLCBGdW5jdGlvbj4oKTtcblxuICBzdGF0aWMgcmVnaXN0ZXJDdXN0b21QYXJzZUNvbXBvbmVudChjb21wb25lbnRUeXBlOiBzdHJpbmcsIGhhbmRsZTogRnVuY3Rpb24pIHtcbiAgICB0aGlzLmN1c3RvbVBhcnNlQ29tcG9uZW50SGFuZGxlc1tjb21wb25lbnRUeXBlXSA9IGhhbmRsZTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUVudGl0eShlbnRpdHlDb25maWc6IElFbnRpdHksIGVuZ2luZTogRW5naW5lKTogUHJvbWlzZTxFbnRpdHk+IHtcbiAgICByZXR1cm4gUmVmbGVjdGlvblBhcnNlci5nZXRFbnRpdHlCeUNvbmZpZyhlbnRpdHlDb25maWcsIGVuZ2luZSkudGhlbigoZW50aXR5KSA9PiB7XG4gICAgICBlbnRpdHkuaXNBY3RpdmUgPSBlbnRpdHlDb25maWcuaXNBY3RpdmUgPz8gdHJ1ZTtcbiAgICAgIGNvbnN0IHsgcG9zaXRpb24sIHJvdGF0aW9uLCBzY2FsZSB9ID0gZW50aXR5Q29uZmlnO1xuICAgICAgaWYgKHBvc2l0aW9uKSBlbnRpdHkudHJhbnNmb3JtLnBvc2l0aW9uLmNvcHlGcm9tKHBvc2l0aW9uKTtcbiAgICAgIGlmIChyb3RhdGlvbikgZW50aXR5LnRyYW5zZm9ybS5yb3RhdGlvbi5jb3B5RnJvbShyb3RhdGlvbik7XG4gICAgICBpZiAoc2NhbGUpIGVudGl0eS50cmFuc2Zvcm0uc2NhbGUuY29weUZyb20oc2NhbGUpO1xuICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEVudGl0eUJ5Q29uZmlnKGVudGl0eUNvbmZpZzogSUVudGl0eSwgZW5naW5lOiBFbmdpbmUpOiBQcm9taXNlPEVudGl0eT4ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBhc3NldFJlZklkOiBzdHJpbmcgPSBlbnRpdHlDb25maWcuYXNzZXRSZWZJZDtcbiAgICBpZiAoYXNzZXRSZWZJZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZW5naW5lLnJlc291cmNlTWFuYWdlclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAuZ2V0UmVzb3VyY2VCeVJlZjxFbnRpdHk+KHsgcmVmSWQ6IGFzc2V0UmVmSWQsIGtleTogZW50aXR5Q29uZmlnLmtleSwgaXNDbG9uZTogZW50aXR5Q29uZmlnLmlzQ2xvbmUgfSlcbiAgICAgICAgICAudGhlbigoZW50aXR5KSA9PiB7XG4gICAgICAgICAgICBlbnRpdHkubmFtZSA9IGVudGl0eUNvbmZpZy5uYW1lO1xuICAgICAgICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShlbmdpbmUsIGVudGl0eUNvbmZpZy5uYW1lKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcGFyc2VDbGFzc09iamVjdChcbiAgICBpdGVtOiBJQ2xhc3NPYmplY3QsXG4gICAgZW5naW5lOiBFbmdpbmUsXG4gICAgcmVzb3VyY2VNYW5hZ2VyOiBhbnkgPSBlbmdpbmUucmVzb3VyY2VNYW5hZ2VyXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgQ2xhc3MgPSBMb2FkZXIuZ2V0Q2xhc3MoaXRlbS5jbGFzcyk7XG4gICAgY29uc3QgcGFyYW1zID0gaXRlbS5jb25zdHJ1Y3RQYXJhbXMgPz8gW107XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ2xhc3MoLi4ucGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVByb3BzQW5kTWV0aG9kcyhpbnN0YW5jZSwgaXRlbSwgZW5naW5lLCByZXNvdXJjZU1hbmFnZXIpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQmFzaWNUeXBlKFxuICAgIHZhbHVlOiBJQmFzaWNUeXBlLFxuICAgIGVuZ2luZTogRW5naW5lLFxuICAgIHJlc291cmNlTWFuYWdlcjogYW55ID0gZW5naW5lLnJlc291cmNlTWFuYWdlclxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHZhbHVlLm1hcCgoaXRlbSkgPT4gdGhpcy5wYXJzZUJhc2ljVHlwZShpdGVtLCBlbmdpbmUsIHJlc291cmNlTWFuYWdlcikpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5faXNDbGFzcyh2YWx1ZSkpIHtcbiAgICAgICAgLy8gY2xhc3Mgb2JqZWN0XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQ2xhc3NPYmplY3QodmFsdWUsIGVuZ2luZSwgcmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNSZWYodmFsdWUpKSB7XG4gICAgICAgIC8vIHJlZmVyZW5jZSBvYmplY3RcbiAgICAgICAgcmV0dXJuIHJlc291cmNlTWFuYWdlci5nZXRSZXNvdXJjZUJ5UmVmKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJhc2ljIHR5cGVcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVByb3BzQW5kTWV0aG9kcyhcbiAgICBpbnN0YW5jZTogYW55LFxuICAgIGl0ZW06IE9taXQ8SUNsYXNzT2JqZWN0LCBcImNsYXNzXCI+LFxuICAgIGVuZ2luZTogRW5naW5lLFxuICAgIHJlc291cmNlTWFuYWdlcjogYW55ID0gZW5naW5lLnJlc291cmNlTWFuYWdlclxuICApIHtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgIGlmIChpdGVtLm1ldGhvZHMpIHtcbiAgICAgIGZvciAobGV0IG1ldGhvZE5hbWUgaW4gaXRlbS5tZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZFBhcmFtcyA9IGl0ZW0ubWV0aG9kc1ttZXRob2ROYW1lXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gbWV0aG9kUGFyYW1zLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBtZXRob2RQYXJhbXNbaV07XG4gICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGFyc2VNZXRob2QoaW5zdGFuY2UsIG1ldGhvZE5hbWUsIHBhcmFtcywgZW5naW5lLCByZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wcykge1xuICAgICAgZm9yIChsZXQga2V5IGluIGl0ZW0ucHJvcHMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLnByb3BzW2tleV07XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnBhcnNlQmFzaWNUeXBlKHZhbHVlLCBlbmdpbmUpLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICByZXR1cm4gKGluc3RhbmNlW2tleV0gPSB2KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMuY3VzdG9tUGFyc2VDb21wb25lbnRIYW5kbGVzW2luc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWVdO1xuICAgICAgaWYgKGhhbmRsZSkgcmV0dXJuIGhhbmRsZShpbnN0YW5jZSwgaXRlbSwgZW5naW5lKTtcbiAgICAgIGVsc2UgcmV0dXJuIGluc3RhbmNlO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlTWV0aG9kKFxuICAgIGluc3RhbmNlOiBhbnksXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIG1ldGhvZFBhcmFtczogQXJyYXk8SUJhc2ljVHlwZT4sXG4gICAgZW5naW5lOiBFbmdpbmUsXG4gICAgcmVzb3VyY2VNYW5hZ2VyOiBhbnkgPSBlbmdpbmUucmVzb3VyY2VNYW5hZ2VyXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChtZXRob2RQYXJhbXMubWFwKChwYXJhbSkgPT4gdGhpcy5wYXJzZUJhc2ljVHlwZShwYXJhbSwgZW5naW5lLCByZXNvdXJjZU1hbmFnZXIpKSkudGhlbihcbiAgICAgIChyZXN1bHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlW21ldGhvZE5hbWVdKC4uLnJlc3VsdCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9pc0NsYXNzKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBJQ2xhc3NPYmplY3Qge1xuICAgIHJldHVybiB2YWx1ZVtcImNsYXNzXCJdICE9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9pc1JlZih2YWx1ZTogYW55KTogdmFsdWUgaXMgSUFzc2V0UmVmIHtcbiAgICByZXR1cm4gdmFsdWVbXCJyZWZJZFwiXSAhPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IEVuZ2luZSwgRW50aXR5IH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBJRW50aXR5LCBJUHJlZmFiRmlsZSB9IGZyb20gXCIuL1ByZWZhYkRlc2lnblwiO1xuaW1wb3J0IHsgUmVmbGVjdGlvblBhcnNlciB9IGZyb20gXCIuL1JlZmxlY3Rpb25QYXJzZXJcIjtcblxuZXhwb3J0IGNsYXNzIFByZWZhYlBhcnNlciB7XG4gIHN0YXRpYyBwYXJzZUNoaWxkcmVuKGVudGl0aWVzQ29uZmlnOiBNYXA8c3RyaW5nLCBJRW50aXR5PiwgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eT4sIHBhcmVudElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGVudGl0aWVzQ29uZmlnLmdldChwYXJlbnRJZCkuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGVudGl0aWVzLmdldChwYXJlbnRJZCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkSWQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXMuZ2V0KGNoaWxkSWQpO1xuICAgICAgICBwYXJlbnQuYWRkQ2hpbGQoZW50aXR5KTtcbiAgICAgICAgdGhpcy5wYXJzZUNoaWxkcmVuKGVudGl0aWVzQ29uZmlnLCBlbnRpdGllcywgY2hpbGRJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBBbmltYXRvcixcbiAgQ2FtZXJhLFxuICBDb21wb25lbnQsXG4gIERpcmVjdExpZ2h0LFxuICBFbnRpdHksXG4gIE1lc2hSZW5kZXJlcixcbiAgUGFydGljbGVSZW5kZXJlcixcbiAgVHJhbnNmb3JtLFxuICBQb2ludExpZ2h0LFxuICBTcG90TGlnaHQsXG4gIFNjcmlwdCxcbiAgU3ByaXRlTWFzayxcbiAgU3ByaXRlUmVuZGVyZXIsXG4gIFRleHRSZW5kZXJlclxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5cbmV4cG9ydCBjb25zdCBDb21wb25lbnRNYXA6IFJlY29yZDxzdHJpbmcsIG5ldyAoZW50aXR5OiBFbnRpdHkpID0+IENvbXBvbmVudD4gPSB7XG4gIFRyYW5zZm9ybSxcbiAgQW5pbWF0b3IsXG4gIERpcmVjdExpZ2h0LFxuICBDYW1lcmEsXG4gIE1lc2hSZW5kZXJlcixcbiAgUGFydGljbGVSZW5kZXJlcixcbiAgUG9pbnRMaWdodCxcbiAgU3BvdExpZ2h0LFxuICBTY3JpcHQsXG4gIFNwcml0ZU1hc2ssXG4gIFNwcml0ZVJlbmRlcmVyLFxuICBUZXh0UmVuZGVyZXJcbn07XG4iLCJpbXBvcnQge1xuICBBbmltYXRpb25BcnJheUN1cnZlLFxuICBBbmltYXRpb25DbGlwLFxuICBBbmltYXRpb25Db2xvckN1cnZlLFxuICBBbmltYXRpb25DdXJ2ZSxcbiAgQW5pbWF0aW9uRXZlbnQsXG4gIEFuaW1hdGlvbkZsb2F0QXJyYXlDdXJ2ZSxcbiAgQW5pbWF0aW9uRmxvYXRDdXJ2ZSxcbiAgQW5pbWF0aW9uUXVhdGVybmlvbkN1cnZlLFxuICBBbmltYXRpb25WZWN0b3IyQ3VydmUsXG4gIEFuaW1hdGlvblZlY3RvcjNDdXJ2ZSxcbiAgQW5pbWF0aW9uVmVjdG9yNEN1cnZlLFxuICBFbmdpbmUsXG4gIEtleWZyYW1lLFxuICBLZXlmcmFtZVZhbHVlVHlwZVxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBDb2xvciwgUXVhdGVybmlvbiwgVmVjdG9yMiwgVmVjdG9yMywgVmVjdG9yNCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLW1hdGhcIjtcbmltcG9ydCB0eXBlIHsgQnVmZmVyUmVhZGVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL0J1ZmZlclJlYWRlclwiO1xuaW1wb3J0IHsgZGVjb2RlciB9IGZyb20gXCIuLi8uLi91dGlscy9EZWNvcmF0b3JcIjtcbmltcG9ydCB7IENvbXBvbmVudE1hcCB9IGZyb20gXCIuL0NvbXBvbmVudE1hcFwiO1xuXG5leHBvcnQgeyBDb21wb25lbnRNYXAgfSBmcm9tIFwiLi9Db21wb25lbnRNYXBcIjtcblxuZXhwb3J0IGVudW0gSW50ZXJwb2xhYmxlVmFsdWVUeXBlIHtcbiAgRmxvYXQsXG4gIEZsb2F0QXJyYXksXG4gIFZlY3RvcjIsXG4gIFZlY3RvcjMsXG4gIFZlY3RvcjQsXG4gIFF1YXRlcm5pb24sXG4gIENvbG9yLFxuICBBcnJheSxcbiAgQm9vbGVhblxufVxuXG5AZGVjb2RlcihcIkFuaW1hdGlvbkNsaXBcIilcbmV4cG9ydCBjbGFzcyBBbmltYXRpb25DbGlwRGVjb2RlciB7XG4gIHB1YmxpYyBzdGF0aWMgZGVjb2RlKGVuZ2luZTogRW5naW5lLCBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcik6IFByb21pc2U8QW5pbWF0aW9uQ2xpcD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGJ1ZmZlclJlYWRlci5uZXh0U3RyKCk7XG4gICAgICBjb25zdCBjbGlwID0gbmV3IEFuaW1hdGlvbkNsaXAobmFtZSk7XG4gICAgICBjb25zdCBldmVudHNMZW4gPSBidWZmZXJSZWFkZXIubmV4dFVpbnQxNigpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudHNMZW47ICsraSkge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBBbmltYXRpb25FdmVudCgpO1xuICAgICAgICBldmVudC50aW1lID0gYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCk7XG4gICAgICAgIGV2ZW50LmZ1bmN0aW9uTmFtZSA9IGJ1ZmZlclJlYWRlci5uZXh0U3RyKCk7XG4gICAgICAgIGV2ZW50LnBhcmFtZXRlciA9IEpTT04ucGFyc2UoYnVmZmVyUmVhZGVyLm5leHRTdHIoKSkudmFsO1xuICAgICAgICBjbGlwLmFkZEV2ZW50KGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VydmVCaW5kaW5nc0xlbiA9IGJ1ZmZlclJlYWRlci5uZXh0VWludDE2KCk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VydmVCaW5kaW5nc0xlbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGJ1ZmZlclJlYWRlci5uZXh0U3RyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFN0ciA9IGJ1ZmZlclJlYWRlci5uZXh0U3RyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBDb21wb25lbnRNYXBbY29tcG9uZW50U3RyXTtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSBidWZmZXJSZWFkZXIubmV4dFN0cigpO1xuICAgICAgICBsZXQgY3VydmU6IEFuaW1hdGlvbkN1cnZlPEtleWZyYW1lVmFsdWVUeXBlPjtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IGJ1ZmZlclJlYWRlci5uZXh0VWludDgoKTtcbiAgICAgICAgY29uc3Qga2V5c0xlbiA9IGJ1ZmZlclJlYWRlci5uZXh0VWludDE2KCk7XG4gICAgICAgIGNvbnN0IGN1cnZlVHlwZSA9IGJ1ZmZlclJlYWRlci5uZXh0U3RyKCk7XG5cbiAgICAgICAgc3dpdGNoIChjdXJ2ZVR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiQW5pbWF0aW9uRmxvYXRDdXJ2ZVwiOiB7XG4gICAgICAgICAgICBjdXJ2ZSA9IGN1cnZlIHx8IG5ldyBBbmltYXRpb25GbG9hdEN1cnZlKCk7XG4gICAgICAgICAgICBjdXJ2ZS5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5c0xlbjsgKytqKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleWZyYW1lID0gbmV3IEtleWZyYW1lPG51bWJlcj4oKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUudGltZSA9IGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpO1xuICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZSA9IGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpO1xuICAgICAgICAgICAgICBrZXlmcmFtZS5pblRhbmdlbnQgPSBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUub3V0VGFuZ2VudCA9IGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpO1xuICAgICAgICAgICAgICAoPEFuaW1hdGlvbkZsb2F0Q3VydmU+Y3VydmUpLmFkZEtleShrZXlmcmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIkFuaW1hdGlvbkFycmF5Q3VydmVcIjoge1xuICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZSB8fCBuZXcgQW5pbWF0aW9uQXJyYXlDdXJ2ZSgpO1xuICAgICAgICAgICAgY3VydmUuaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb247XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtleXNMZW47ICsraikge1xuICAgICAgICAgICAgICBjb25zdCBrZXlmcmFtZSA9IG5ldyBLZXlmcmFtZTxudW1iZXJbXT4oKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUudGltZSA9IGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpO1xuICAgICAgICAgICAgICBjb25zdCBsZW4gPSBidWZmZXJSZWFkZXIubmV4dFVpbnQxNigpO1xuICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZSA9IEFycmF5LmZyb20oYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyQXJyYXkobGVuKSk7XG4gICAgICAgICAgICAgIGtleWZyYW1lLmluVGFuZ2VudCA9IEFycmF5LmZyb20oYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyQXJyYXkobGVuKSk7XG4gICAgICAgICAgICAgIGtleWZyYW1lLm91dFRhbmdlbnQgPSBBcnJheS5mcm9tKGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMkFycmF5KGxlbikpO1xuICAgICAgICAgICAgICAoPEFuaW1hdGlvbkFycmF5Q3VydmU+Y3VydmUpLmFkZEtleShrZXlmcmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIkFuaW1hdGlvbkZsb2F0QXJyYXlDdXJ2ZVwiOiB7XG4gICAgICAgICAgICBjdXJ2ZSA9IGN1cnZlIHx8IG5ldyBBbmltYXRpb25GbG9hdEFycmF5Q3VydmUoKTtcbiAgICAgICAgICAgIGN1cnZlLmludGVycG9sYXRpb24gPSBpbnRlcnBvbGF0aW9uO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzTGVuOyArK2opIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ZnJhbWUgPSBuZXcgS2V5ZnJhbWU8RmxvYXQzMkFycmF5PigpO1xuICAgICAgICAgICAgICBrZXlmcmFtZS50aW1lID0gYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGxlbiA9IGJ1ZmZlclJlYWRlci5uZXh0VWludDE2KCk7XG4gICAgICAgICAgICAgIGtleWZyYW1lLnZhbHVlID0gYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyQXJyYXkobGVuKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUuaW5UYW5nZW50ID0gQXJyYXkuZnJvbShidWZmZXJSZWFkZXIubmV4dEZsb2F0MzJBcnJheShsZW4pKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUub3V0VGFuZ2VudCA9IEFycmF5LmZyb20oYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyQXJyYXkobGVuKSk7XG4gICAgICAgICAgICAgICg8QW5pbWF0aW9uRmxvYXRBcnJheUN1cnZlPmN1cnZlKS5hZGRLZXkoa2V5ZnJhbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJBbmltYXRpb25WZWN0b3IyQ3VydmVcIjoge1xuICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZSB8fCBuZXcgQW5pbWF0aW9uVmVjdG9yMkN1cnZlKCk7XG4gICAgICAgICAgICBjdXJ2ZS5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5c0xlbjsgKytqKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleWZyYW1lID0gbmV3IEtleWZyYW1lPFZlY3RvcjI+KCk7XG4gICAgICAgICAgICAgIGtleWZyYW1lLnRpbWUgPSBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUgPSBuZXcgVmVjdG9yMihidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSwgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCkpO1xuICAgICAgICAgICAgICBrZXlmcmFtZS5pblRhbmdlbnQgPSBuZXcgVmVjdG9yMihidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSwgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCkpO1xuICAgICAgICAgICAgICBrZXlmcmFtZS5vdXRUYW5nZW50ID0gbmV3IFZlY3RvcjIoYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpKTtcbiAgICAgICAgICAgICAgKDxBbmltYXRpb25WZWN0b3IyQ3VydmU+Y3VydmUpLmFkZEtleShrZXlmcmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIkFuaW1hdGlvblZlY3RvcjNDdXJ2ZVwiOiB7XG4gICAgICAgICAgICBjdXJ2ZSA9IGN1cnZlIHx8IG5ldyBBbmltYXRpb25WZWN0b3IzQ3VydmUoKTtcbiAgICAgICAgICAgIGN1cnZlLmludGVycG9sYXRpb24gPSBpbnRlcnBvbGF0aW9uO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzTGVuOyArK2opIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ZnJhbWUgPSBuZXcgS2V5ZnJhbWU8VmVjdG9yMz4oKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUudGltZSA9IGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpO1xuICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZSA9IG5ldyBWZWN0b3IzKFxuICAgICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpLFxuICAgICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpLFxuICAgICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGtleWZyYW1lLmluVGFuZ2VudCA9IG5ldyBWZWN0b3IzKFxuICAgICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpLFxuICAgICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpLFxuICAgICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGtleWZyYW1lLm91dFRhbmdlbnQgPSBuZXcgVmVjdG9yMyhcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAoPEFuaW1hdGlvblZlY3RvcjNDdXJ2ZT5jdXJ2ZSkuYWRkS2V5KGtleWZyYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiQW5pbWF0aW9uVmVjdG9yNEN1cnZlXCI6IHtcbiAgICAgICAgICAgIGN1cnZlID0gY3VydmUgfHwgbmV3IEFuaW1hdGlvblZlY3RvcjRDdXJ2ZSgpO1xuICAgICAgICAgICAgY3VydmUuaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb247XG4gICAgICAgICAgICBjb25zdCBrZXlmcmFtZSA9IG5ldyBLZXlmcmFtZTxWZWN0b3I0PigpO1xuICAgICAgICAgICAga2V5ZnJhbWUudGltZSA9IGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpO1xuICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUgPSBuZXcgVmVjdG9yNChcbiAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpLFxuICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrZXlmcmFtZS5pblRhbmdlbnQgPSBuZXcgVmVjdG9yNChcbiAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpLFxuICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrZXlmcmFtZS5vdXRUYW5nZW50ID0gbmV3IFZlY3RvcjQoXG4gICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpLFxuICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgIGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgKDxBbmltYXRpb25WZWN0b3I0Q3VydmU+Y3VydmUpLmFkZEtleShrZXlmcmFtZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIkFuaW1hdGlvbkNvbG9yQ3VydmVcIjoge1xuICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZSB8fCBuZXcgQW5pbWF0aW9uQ29sb3JDdXJ2ZSgpO1xuICAgICAgICAgICAgY3VydmUuaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb247XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtleXNMZW47ICsraikge1xuICAgICAgICAgICAgICBjb25zdCBrZXlmcmFtZSA9IG5ldyBLZXlmcmFtZTxDb2xvcj4oKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUudGltZSA9IGJ1ZmZlclJlYWRlci5uZXh0RmxvYXQzMigpO1xuICAgICAgICAgICAgICBrZXlmcmFtZS52YWx1ZSA9IG5ldyBDb2xvcihcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBrZXlmcmFtZS5pblRhbmdlbnQgPSBuZXcgVmVjdG9yNChcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBrZXlmcmFtZS5vdXRUYW5nZW50ID0gbmV3IFZlY3RvcjQoXG4gICAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKDxBbmltYXRpb25Db2xvckN1cnZlPmN1cnZlKS5hZGRLZXkoa2V5ZnJhbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJBbmltYXRpb25RdWF0ZXJuaW9uQ3VydmVcIjoge1xuICAgICAgICAgICAgY3VydmUgPSBjdXJ2ZSB8fCBuZXcgQW5pbWF0aW9uUXVhdGVybmlvbkN1cnZlKCk7XG4gICAgICAgICAgICBjdXJ2ZS5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5c0xlbjsgKytqKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleWZyYW1lID0gbmV3IEtleWZyYW1lPFF1YXRlcm5pb24+KCk7XG4gICAgICAgICAgICAgIGtleWZyYW1lLnRpbWUgPSBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKTtcbiAgICAgICAgICAgICAga2V5ZnJhbWUudmFsdWUgPSBuZXcgUXVhdGVybmlvbihcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBrZXlmcmFtZS5pblRhbmdlbnQgPSBuZXcgVmVjdG9yNChcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKSxcbiAgICAgICAgICAgICAgICBidWZmZXJSZWFkZXIubmV4dEZsb2F0MzIoKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBrZXlmcmFtZS5vdXRUYW5nZW50ID0gbmV3IFZlY3RvcjQoXG4gICAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKCksXG4gICAgICAgICAgICAgICAgYnVmZmVyUmVhZGVyLm5leHRGbG9hdDMyKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKDxBbmltYXRpb25RdWF0ZXJuaW9uQ3VydmU+Y3VydmUpLmFkZEtleShrZXlmcmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2xpcC5hZGRDdXJ2ZUJpbmRpbmcocmVsYXRpdmVQYXRoLCBjb21wb25lbnRUeXBlLCBwcm9wZXJ0eSwgY3VydmUpO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGNsaXApO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEVudGl0eSwgU2NlbmUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBJRW50aXR5LCBJU2NlbmUgfSBmcm9tIFwiLi4vcHJlZmFiL1ByZWZhYkRlc2lnblwiO1xuXG5leHBvcnQgY2xhc3MgU2NlbmVQYXJzZXJDb250ZXh0IHtcbiAgZW50aXR5TWFwOiBNYXA8c3RyaW5nLCBFbnRpdHk+ID0gbmV3IE1hcCgpO1xuICBjb21wb25lbnRzOiBNYXA8c3RyaW5nLCBDb21wb25lbnQ+ID0gbmV3IE1hcCgpO1xuICBhc3NldHM6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG4gIGVudGl0eUNvbmZpZ01hcDogTWFwPHN0cmluZywgSUVudGl0eT4gPSBuZXcgTWFwKCk7XG4gIHJvb3RJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBvcmlnaW5hbERhdGE6IElTY2VuZSwgcHVibGljIHJlYWRvbmx5IHNjZW5lOiBTY2VuZSkge31cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuZW50aXR5TWFwLmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRzLmNsZWFyKCk7XG4gICAgdGhpcy5hc3NldHMuY2xlYXIoKTtcbiAgICB0aGlzLmVudGl0eUNvbmZpZ01hcC5jbGVhcigpO1xuICAgIHRoaXMucm9vdElkcy5sZW5ndGggPSAwO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFbmdpbmUsIEVudGl0eSwgTG9hZGVyLCBTY2VuZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IElFbnRpdHksIElTY2VuZSB9IGZyb20gXCIuLi9wcmVmYWIvUHJlZmFiRGVzaWduXCI7XG5pbXBvcnQgeyBQcmVmYWJQYXJzZXIgfSBmcm9tIFwiLi4vcHJlZmFiL1ByZWZhYlBhcnNlclwiO1xuaW1wb3J0IHsgUmVmbGVjdGlvblBhcnNlciB9IGZyb20gXCIuLi9wcmVmYWIvUmVmbGVjdGlvblBhcnNlclwiO1xuaW1wb3J0IHsgU2NlbmVQYXJzZXJDb250ZXh0IH0gZnJvbSBcIi4vU2NlbmVQYXJzZXJDb250ZXh0XCI7XG5cbi8qKiBASW50ZXJuYWwgKi9cbmV4cG9ydCBjbGFzcyBTY2VuZVBhcnNlciB7XG4gIC8qKlxuICAgKiBQYXJzZSBzY2VuZSBkYXRhLlxuICAgKiBAcGFyYW0gZW5naW5lIC0gdGhlIGVuZ2luZSBvZiB0aGUgcGFyc2VyIGNvbnRleHRcbiAgICogQHBhcmFtIHNjZW5lRGF0YSAtIHNjZW5lIGRhdGEgd2hpY2ggaXMgZXhwb3J0ZWQgYnkgZWRpdG9yXG4gICAqIEByZXR1cm5zIGEgcHJvbWlzZSBvZiBzY2VuZVxuICAgKi9cbiAgc3RhdGljIHBhcnNlKGVuZ2luZTogRW5naW5lLCBzY2VuZURhdGE6IElTY2VuZSk6IFByb21pc2U8U2NlbmU+IHtcbiAgICBjb25zdCBzY2VuZSA9IG5ldyBTY2VuZShlbmdpbmUpO1xuICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgU2NlbmVQYXJzZXJDb250ZXh0KHNjZW5lRGF0YSwgc2NlbmUpO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTY2VuZVBhcnNlcihjb250ZXh0KTtcbiAgICBwYXJzZXIuc3RhcnQoKTtcbiAgICByZXR1cm4gcGFyc2VyLnByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHByb21pc2Ugb2YgcGFyc2VkIHNjZW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvbWlzZTogUHJvbWlzZTxTY2VuZT47XG5cbiAgcHJpdmF0ZSBfcmVzb2x2ZTogKHNjZW5lOiBTY2VuZSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uOiBhbnkpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2VuZ2luZTogRW5naW5lO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjb250ZXh0OiBTY2VuZVBhcnNlckNvbnRleHQpIHtcbiAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLmNvbnRleHQuc2NlbmUuZW5naW5lO1xuICAgIHRoaXMuX29yZ2FuaXplRW50aXRpZXMgPSB0aGlzLl9vcmdhbml6ZUVudGl0aWVzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fcGFyc2VDb21wb25lbnRzID0gdGhpcy5fcGFyc2VDb21wb25lbnRzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fY2xlYXJBbmRSZXNvbHZlU2NlbmUgPSB0aGlzLl9jbGVhckFuZFJlc29sdmVTY2VuZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlPFNjZW5lPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBzdGFydCBwYXJzZSB0aGUgc2NlbmUgKi9cbiAgc3RhcnQoKSB7XG4gICAgdGhpcy5fcGFyc2VFbnRpdGllcygpXG4gICAgICAudGhlbih0aGlzLl9vcmdhbml6ZUVudGl0aWVzKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VDb21wb25lbnRzKVxuICAgICAgLnRoZW4odGhpcy5fY2xlYXJBbmRSZXNvbHZlU2NlbmUpXG4gICAgICAudGhlbih0aGlzLl9yZXNvbHZlKVxuICAgICAgLmNhdGNoKHRoaXMuX3JlamVjdCk7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZUVudGl0aWVzKCk6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICBjb25zdCBlbnRpdGllc0NvbmZpZyA9IHRoaXMuY29udGV4dC5vcmlnaW5hbERhdGEuZW50aXRpZXM7XG4gICAgY29uc3QgZW50aXR5Q29uZmlnTWFwID0gdGhpcy5jb250ZXh0LmVudGl0eUNvbmZpZ01hcDtcbiAgICBjb25zdCBlbnRpdGllc01hcCA9IHRoaXMuY29udGV4dC5lbnRpdHlNYXA7XG4gICAgY29uc3Qgcm9vdElkcyA9IHRoaXMuY29udGV4dC5yb290SWRzO1xuICAgIGNvbnN0IGVuZ2luZSA9IHRoaXMuX2VuZ2luZTtcbiAgICBjb25zdCBwcm9taXNlcyA9IGVudGl0aWVzQ29uZmlnLm1hcCgoZW50aXR5Q29uZmlnKSA9PiB7XG4gICAgICBlbnRpdHlDb25maWdNYXAuc2V0KGVudGl0eUNvbmZpZy5pZCwgZW50aXR5Q29uZmlnKTtcbiAgICAgIC8vIHJlY29yZCByb290IGVudGl0aWVzXG4gICAgICBpZiAoIWVudGl0eUNvbmZpZy5wYXJlbnQpIHJvb3RJZHMucHVzaChlbnRpdHlDb25maWcuaWQpO1xuICAgICAgcmV0dXJuIFJlZmxlY3Rpb25QYXJzZXIucGFyc2VFbnRpdHkoZW50aXR5Q29uZmlnLCBlbmdpbmUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKChlbnRpdGllcykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBlbnRpdGllcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgZW50aXRpZXNNYXAuc2V0KGVudGl0aWVzQ29uZmlnW2ldLmlkLCBlbnRpdGllc1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50aXRpZXM7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9vcmdhbml6ZUVudGl0aWVzKCkge1xuICAgIGNvbnN0IHsgZW50aXR5Q29uZmlnTWFwLCBlbnRpdHlNYXAsIHNjZW5lLCByb290SWRzIH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgZm9yIChjb25zdCByb290SWQgb2Ygcm9vdElkcykge1xuICAgICAgUHJlZmFiUGFyc2VyLnBhcnNlQ2hpbGRyZW4oZW50aXR5Q29uZmlnTWFwLCBlbnRpdHlNYXAsIHJvb3RJZCk7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RFbnRpdGllcyA9IHJvb3RJZHMubWFwKChpZCkgPT4gZW50aXR5TWFwLmdldChpZCkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm9vdEVudGl0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzY2VuZS5hZGRSb290RW50aXR5KHJvb3RFbnRpdGllc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VDb21wb25lbnRzKCk6IFByb21pc2U8YW55W10+IHtcbiAgICBjb25zdCBlbnRpdGllc0NvbmZpZyA9IHRoaXMuY29udGV4dC5vcmlnaW5hbERhdGEuZW50aXRpZXM7XG4gICAgY29uc3QgZW50aXR5TWFwID0gdGhpcy5jb250ZXh0LmVudGl0eU1hcDtcblxuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBlbnRpdGllc0NvbmZpZy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IGVudGl0eUNvbmZpZyA9IGVudGl0aWVzQ29uZmlnW2ldO1xuICAgICAgY29uc3QgZW50aXR5ID0gZW50aXR5TWFwLmdldChlbnRpdHlDb25maWcuaWQpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRpdHlDb25maWcuY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRDb25maWcgPSBlbnRpdHlDb25maWcuY29tcG9uZW50c1tpXTtcbiAgICAgICAgY29uc3Qga2V5ID0gIWNvbXBvbmVudENvbmZpZy5yZWZJZCA/IGNvbXBvbmVudENvbmZpZy5jbGFzcyA6IGNvbXBvbmVudENvbmZpZy5yZWZJZDtcbiAgICAgICAgbGV0IGNvbXBvbmVudDtcbiAgICAgICAgLy8gVE9ETzogcmVtb3ZlIGhhY2sgY29kZSB3aGVuIHN1cHBvcnQgYWRkaXRpb25hbCBlZGl0XG4gICAgICAgIGlmIChrZXkgPT09IFwiQW5pbWF0b3JcIikge1xuICAgICAgICAgIGNvbXBvbmVudCA9IGVudGl0eS5nZXRDb21wb25lbnQoTG9hZGVyLmdldENsYXNzKGtleSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudCB8fCBlbnRpdHkuYWRkQ29tcG9uZW50KExvYWRlci5nZXRDbGFzcyhrZXkpKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IFJlZmxlY3Rpb25QYXJzZXIucGFyc2VQcm9wc0FuZE1ldGhvZHMoY29tcG9uZW50LCBjb21wb25lbnRDb25maWcsIGVudGl0eS5lbmdpbmUpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYXJBbmRSZXNvbHZlU2NlbmUoKSB7XG4gICAgY29uc3Qgc2NlbmUgPSB0aGlzLmNvbnRleHQuc2NlbmU7XG4gICAgdGhpcy5jb250ZXh0LmRlc3Ryb3koKTtcbiAgICByZXR1cm4gc2NlbmU7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFzc2V0UHJvbWlzZSxcbiAgTG9hZGVyLFxuICBMb2FkSXRlbSxcbiAgTWVzaCxcbiAgTW9kZWxNZXNoLFxuICByZXNvdXJjZUxvYWRlcixcbiAgUmVzb3VyY2VNYW5hZ2VyLFxuICBVbmxpdE1hdGVyaWFsXG59IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gXCIuLi8uLlwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoXCJNZXNoXCIsIFtcInByZWZhYlwiXSwgdHJ1ZSlcbmV4cG9ydCBjbGFzcyBNZXNoTG9hZGVyIGV4dGVuZHMgTG9hZGVyPE1vZGVsTWVzaD4ge1xuICBsb2FkKGl0ZW06IExvYWRJdGVtLCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IEFzc2V0UHJvbWlzZTxNb2RlbE1lc2g+IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnJlcXVlc3Q8QXJyYXlCdWZmZXI+KGl0ZW0udXJsLCB7IHR5cGU6IFwiYXJyYXlidWZmZXJcIiB9KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgIGRlY29kZTxNb2RlbE1lc2g+KGRhdGEsIHJlc291cmNlTWFuYWdlci5lbmdpbmUpLnRoZW4oKG1lc2gpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG1lc2gpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBc3NldFByb21pc2UsXG4gIExvYWRlcixcbiAgTG9hZEl0ZW0sXG4gIHJlc291cmNlTG9hZGVyLFxuICBSZXNvdXJjZU1hbmFnZXIsXG4gIFRleHR1cmUyRH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSBcIi4uLy4uXCI7XG5cbkByZXNvdXJjZUxvYWRlcihcIkVkaXRvclRleHR1cmUyRFwiLCBbXCJwcmVmYWJcIl0sIHRydWUpXG5leHBvcnQgY2xhc3MgRWRpdG9yVGV4dHVyZUxvYWRlciBleHRlbmRzIExvYWRlcjxUZXh0dXJlMkQ+IHtcbiAgbG9hZChpdGVtOiBMb2FkSXRlbSwgcmVzb3VyY2VNYW5hZ2VyOiBSZXNvdXJjZU1hbmFnZXIpOiBBc3NldFByb21pc2U8VGV4dHVyZTJEPiB7XG4gICAgcmV0dXJuIG5ldyBBc3NldFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVxdWVzdDxBcnJheUJ1ZmZlcj4oaXRlbS51cmwsIHsgdHlwZTogXCJhcnJheWJ1ZmZlclwiIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgZGVjb2RlPFRleHR1cmUyRD4oZGF0YSwgcmVzb3VyY2VNYW5hZ2VyLmVuZ2luZSkudGhlbigodGV4dHVyZSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEVuZ2luZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IEJ1ZmZlclJlYWRlciB9IGZyb20gXCIuL3V0aWxzL0J1ZmZlclJlYWRlclwiO1xuaW1wb3J0IHsgZGVjb2Rlck1hcCwgZGVjb2RlciB9IGZyb20gXCIuL3V0aWxzL0RlY29yYXRvclwiO1xuaW1wb3J0IHsgRmlsZUhlYWRlciB9IGZyb20gXCIuL3V0aWxzL0ZpbGVIZWFkZXJcIjtcblxuZXhwb3J0IHsgTWVzaERlY29kZXIgfSBmcm9tIFwiLi9yZXNvdXJjZXMvbWVzaC9NZXNoRGVjb2RlclwiO1xuZXhwb3J0IHsgVGV4dHVyZTJERGVjb2RlciB9IGZyb20gXCIuL3Jlc291cmNlcy90ZXh0dXJlMkQvVGV4dHVyZURlY29kZXJcIjtcbmV4cG9ydCB7IFJlZmxlY3Rpb25QYXJzZXIgfSBmcm9tIFwiLi9yZXNvdXJjZXMvcHJlZmFiL1JlZmxlY3Rpb25QYXJzZXJcIjtcbmV4cG9ydCB7IFByZWZhYlBhcnNlciB9IGZyb20gXCIuL3Jlc291cmNlcy9wcmVmYWIvUHJlZmFiUGFyc2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXNvdXJjZXMvYW5pbWF0aW9uQ2xpcC9BbmltYXRpb25DbGlwRGVjb2RlclwiO1xuZXhwb3J0IHR5cGUgeyBJTW9kZWxNZXNoIH0gZnJvbSBcIi4vcmVzb3VyY2VzL21lc2gvSU1vZGVsTWVzaFwiO1xuXG4vKipcbiAqIERlY29kZSBlbmdpbmUgYmluYXJ5IHJlc291cmNlLlxuICogQHBhcmFtIGFycmF5QnVmZmVyIC0gYXJyYXkgYnVmZmVyIG9mIGRlY29kZSBiaW5hcnkgZmlsZVxuICogQHBhcmFtIGVuZ2luZSAtIGVuZ2luZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZTxUPihhcnJheUJ1ZmZlcjogQXJyYXlCdWZmZXIsIGVuZ2luZTogRW5naW5lKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGhlYWRlciA9IEZpbGVIZWFkZXIuZGVjb2RlKGFycmF5QnVmZmVyKTtcbiAgY29uc3QgYnVmZmVyUmVhZGVyID0gbmV3IEJ1ZmZlclJlYWRlcihhcnJheUJ1ZmZlciwgaGVhZGVyLmhlYWRlckxlbmd0aCwgaGVhZGVyLmRhdGFMZW5ndGgpO1xuICByZXR1cm4gZGVjb2Rlck1hcFtoZWFkZXIudHlwZV0uZGVjb2RlKGVuZ2luZSwgYnVmZmVyUmVhZGVyKS50aGVuKChvYmplY3QpID0+IHtcbiAgICBvYmplY3QubmFtZSA9IGhlYWRlci5uYW1lO1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5leHBvcnQgKiBmcm9tIFwiLi9yZXNvdXJjZXMvcHJlZmFiL1ByZWZhYkRlc2lnblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVzb3VyY2VzL3NjZW5lL1NjZW5lUGFyc2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXNvdXJjZXMvc2NlbmUvTWVzaExvYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVzb3VyY2VzL3NjZW5lL0VkaXRvclRleHR1cmVMb2FkZXJcIjtcbiIsImltcG9ydCB7XG4gIHJlc291cmNlTG9hZGVyLFxuICBMb2FkZXIsXG4gIEFzc2V0UHJvbWlzZSxcbiAgQXNzZXRUeXBlLFxuICBMb2FkSXRlbSxcbiAgUmVzb3VyY2VNYW5hZ2VyLFxuICBNb2RlbE1lc2hcbn0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSBcIi4vcmVzb3VyY2UtZGVzZXJpYWxpemVcIjtcblxuQHJlc291cmNlTG9hZGVyKEFzc2V0VHlwZS5NZXNoLCBbXCJtZXNoXCJdKVxuY2xhc3MgTWVzaExvYWRlciBleHRlbmRzIExvYWRlcjxNb2RlbE1lc2g+IHtcbiAgbG9hZChpdGVtOiBMb2FkSXRlbSwgcmVzb3VyY2VNYW5hZ2VyOiBSZXNvdXJjZU1hbmFnZXIpOiBBc3NldFByb21pc2U8TW9kZWxNZXNoPiB7XG4gICAgcmV0dXJuIG5ldyBBc3NldFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXF1ZXN0PGFueT4oaXRlbS51cmwsIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogXCJhcnJheWJ1ZmZlclwiXG4gICAgICB9KVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBkZWNvZGU8TW9kZWxNZXNoPihkYXRhLCByZXNvdXJjZU1hbmFnZXIuZW5naW5lKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKG1lc2gpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG1lc2gpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQXNzZXRQcm9taXNlLCBBc3NldFR5cGUsIEZvbnQsIExvYWRlciwgTG9hZEl0ZW0sIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZU1hbmFnZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5cbkByZXNvdXJjZUxvYWRlcihBc3NldFR5cGUuU291cmNlRm9udCwgW1widHRmXCIsIFwib3RmXCIsIFwid29mZlwiXSwgZmFsc2UpXG5jbGFzcyBTb3VyY2VGb250TG9hZGVyIGV4dGVuZHMgTG9hZGVyPEZvbnQ+IHtcbiAgbG9hZChpdGVtOiBMb2FkSXRlbSwgcmVzb3VyY2VNYW5hZ2VyOiBSZXNvdXJjZU1hbmFnZXIpOiBBc3NldFByb21pc2U8Rm9udD4ge1xuICAgIHJldHVybiBuZXcgQXNzZXRQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHsgdXJsIH0gPSBpdGVtO1xuICAgICAgdGhpcy5fcmVnaXN0ZXJGb250KHVybCwgdXJsKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9udCA9IG5ldyBGb250KHJlc291cmNlTWFuYWdlci5lbmdpbmUsIHVybCk7XG4gICAgICAgICAgcmVzb2x2ZShmb250KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGBsb2FkIGZvbnQgJHt1cmx9IGZhaWxgKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9yZWdpc3RlckZvbnQoZm9udE5hbWU6IHN0cmluZywgZm9udFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZm9udEZhY2UgPSBuZXcgRm9udEZhY2UoZm9udE5hbWUsIGB1cmwoJHtmb250VXJsfSlgKTtcbiAgICBhd2FpdCBmb250RmFjZS5sb2FkKCk7XG4gICAgZG9jdW1lbnQuZm9udHMuYWRkKGZvbnRGYWNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQXNzZXRQcm9taXNlLFxuICBBc3NldFR5cGUsXG4gIEVuZ2luZSxcbiAgTG9hZGVyLFxuICBMb2FkSXRlbSxcbiAgcmVzb3VyY2VMb2FkZXIsXG4gIFJlc291cmNlTWFuYWdlcixcbiAgU3ByaXRlLFxuICBTcHJpdGVBdGxhcyxcbiAgVGV4dHVyZTJEXG59IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IEF0bGFzQ29uZmlnLCBBdGxhc1Nwcml0ZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmUvdHlwZXMvMmQvYXRsYXMvdHlwZXNcIjtcbmltcG9ydCB7IFJlY3QsIFZlY3RvcjIsIFZlY3RvcjQgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1tYXRoXCI7XG5cbkByZXNvdXJjZUxvYWRlcihBc3NldFR5cGUuU3ByaXRlQXRsYXMsIFtcImF0bGFzXCJdLCBmYWxzZSlcbmNsYXNzIFNwcml0ZUF0bGFzTG9hZGVyIGV4dGVuZHMgTG9hZGVyPFNwcml0ZUF0bGFzPiB7XG4gIHByaXZhdGUgX3RlbXBSZWN0OiBSZWN0ID0gbmV3IFJlY3QoKTtcbiAgcHJpdmF0ZSBfdGVtcFZlYzI6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xuICBwcml2YXRlIF90ZW1wVmVjNDogVmVjdG9yNCA9IG5ldyBWZWN0b3I0KCk7XG4gIGxvYWQoaXRlbTogTG9hZEl0ZW0sIHJlc291cmNlTWFuYWdlcjogUmVzb3VyY2VNYW5hZ2VyKTogQXNzZXRQcm9taXNlPFNwcml0ZUF0bGFzPiB7XG4gICAgcmV0dXJuIG5ldyBBc3NldFByb21pc2U8U3ByaXRlQXRsYXM+KChyZXNvbHZlLCByZWplY3QsIF8sIG9uQ2FuY2VsKSA9PiB7XG4gICAgICBjb25zdCBjaGFpblByb21pc2VzID0gW107XG4gICAgICBvbkNhbmNlbCgoKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhaW5Qcm9taXNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNoYWluUHJvbWlzZXNbaV0uY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29uZmlnUHJvbWlzZSA9IHRoaXMucmVxdWVzdDxBdGxhc0NvbmZpZz4oaXRlbS51cmwsIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogXCJqc29uXCJcbiAgICAgIH0pO1xuICAgICAgY2hhaW5Qcm9taXNlcy5wdXNoKGNvbmZpZ1Byb21pc2UpO1xuICAgICAgY29uZmlnUHJvbWlzZVxuICAgICAgICAudGhlbigoYXRsYXNEYXRhKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhdGxhc0l0ZW1zLCBtaXBtYXAsIGFuaXNvTGV2ZWwsIGZpbHRlck1vZGUsIHdyYXBNb2RlVSwgd3JhcE1vZGVWLCBmb3JtYXQgfSA9IGF0bGFzRGF0YTtcbiAgICAgICAgICBjb25zdCBhdGxhc0l0ZW1zTGVuID0gYXRsYXNJdGVtcyA/IGF0bGFzSXRlbXMubGVuZ3RoIDogMDtcbiAgICAgICAgICBjb25zdCB7IGVuZ2luZSB9ID0gcmVzb3VyY2VNYW5hZ2VyO1xuICAgICAgICAgIGNvbnN0IHNwcml0ZUF0bGFzID0gbmV3IFNwcml0ZUF0bGFzKGVuZ2luZSk7XG4gICAgICAgICAgaWYgKGF0bGFzSXRlbXNMZW4gPCAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHNwcml0ZUF0bGFzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hhaW5Qcm9taXNlcy5sZW5ndGggPSAwO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXRsYXNJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYXRsYXNJdGVtID0gYXRsYXNJdGVtc1tpXTtcbiAgICAgICAgICAgIGlmIChhdGxhc0l0ZW0uaW1nKSB7XG4gICAgICAgICAgICAgIGNoYWluUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICByZXNvdXJjZU1hbmFnZXJcbiAgICAgICAgICAgICAgICAgIC5sb2FkPFRleHR1cmUyRD4oe1xuICAgICAgICAgICAgICAgICAgICB1cmw6IGF0bGFzSXRlbS5pbWcsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEFzc2V0VHlwZS5UZXh0dXJlMkQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmb3JtYXQsIG1pcG1hcCB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHRleHR1cmU6IFRleHR1cmUyRCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhbmlzb0xldmVsICYmICh0ZXh0dXJlLmFuaXNvTGV2ZWwgPSBhbmlzb0xldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTW9kZSAhPT0gdW5kZWZpbmVkICYmICh0ZXh0dXJlLmZpbHRlck1vZGUgPSBmaWx0ZXJNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcE1vZGVVICE9PSB1bmRlZmluZWQgJiYgKHRleHR1cmUud3JhcE1vZGVVID0gd3JhcE1vZGVVKTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcE1vZGVWICE9PSB1bmRlZmluZWQgJiYgKHRleHR1cmUud3JhcE1vZGVWID0gd3JhcE1vZGVWKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdGxhc0l0ZW0uc3ByaXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICBzcHJpdGVBdGxhcy5fYWRkU3ByaXRlKHRoaXMuX21ha2VTcHJpdGUoZW5naW5lLCBhdGxhc0l0ZW0uc3ByaXRlc1tpXSwgdGV4dHVyZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXRsYXNJdGVtLnNwcml0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgc3ByaXRlQXRsYXMuX2FkZFNwcml0ZSh0aGlzLl9tYWtlU3ByaXRlKGVuZ2luZSwgYXRsYXNJdGVtLnNwcml0ZXNbaV0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBBc3NldFByb21pc2UuYWxsKGNoYWluUHJvbWlzZXMpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoc3ByaXRlQXRsYXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX21ha2VTcHJpdGUoZW5naW5lOiBFbmdpbmUsIGNvbmZpZzogQXRsYXNTcHJpdGUsIHRleHR1cmU/OiBUZXh0dXJlMkQpOiBTcHJpdGUge1xuICAgIC8vIEdlbmVyYXRlIGEgU3ByaXRlQXRsYXMgb2JqZWN0LlxuICAgIGNvbnN0IHsgcmVnaW9uLCBhdGxhc1JlZ2lvbk9mZnNldCwgYXRsYXNSZWdpb24sIHBpdm90LCBib3JkZXIgfSA9IGNvbmZpZztcbiAgICBjb25zdCBzcHJpdGUgPSBuZXcgU3ByaXRlKFxuICAgICAgZW5naW5lLFxuICAgICAgdGV4dHVyZSxcbiAgICAgIHJlZ2lvbiA/IHRoaXMuX3RlbXBSZWN0LnNldChyZWdpb24ueCwgcmVnaW9uLnksIHJlZ2lvbi53LCByZWdpb24uaCkgOiB1bmRlZmluZWQsXG4gICAgICBwaXZvdCA/IHRoaXMuX3RlbXBWZWMyLnNldChwaXZvdC54LCBwaXZvdC55KSA6IHVuZGVmaW5lZCxcbiAgICAgIGJvcmRlciA/IHRoaXMuX3RlbXBWZWM0LnNldChib3JkZXIueCwgYm9yZGVyLnksIGJvcmRlci56LCBib3JkZXIudykgOiB1bmRlZmluZWQsXG4gICAgICBjb25maWcubmFtZVxuICAgICk7XG4gICAgaWYgKHRleHR1cmUpIHtcbiAgICAgIGNvbnN0IGludlcgPSAxIC8gdGV4dHVyZS53aWR0aDtcbiAgICAgIGNvbnN0IGludkggPSAxIC8gdGV4dHVyZS5oZWlnaHQ7XG4gICAgICBzcHJpdGUuYXRsYXNSZWdpb24uc2V0KGF0bGFzUmVnaW9uLnggKiBpbnZXLCBhdGxhc1JlZ2lvbi55ICogaW52SCwgYXRsYXNSZWdpb24udyAqIGludlcsIGF0bGFzUmVnaW9uLmggKiBpbnZIKTtcbiAgICAgIGlmIChhdGxhc1JlZ2lvbk9mZnNldCkge1xuICAgICAgICBjb25zdCB7IHg6IG9mZnNldExlZnQsIHk6IG9mZnNldFRvcCwgejogb2Zmc2V0UmlnaHQsIHc6IG9mZnNldEJvdHRvbSB9ID0gYXRsYXNSZWdpb25PZmZzZXQ7XG4gICAgICAgIHNwcml0ZS5hdGxhc1JlZ2lvbk9mZnNldC5zZXQob2Zmc2V0TGVmdCAqIGludlcsIG9mZnNldFRvcCAqIGludkgsIG9mZnNldFJpZ2h0ICogaW52Vywgb2Zmc2V0Qm90dG9tICogaW52SCk7XG4gICAgICB9XG4gICAgICBjb25maWcuYXRsYXNSb3RhdGVkICYmIChzcHJpdGUuYXRsYXNSb3RhdGVkID0gdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzcHJpdGU7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIHJlc291cmNlTG9hZGVyLFxuICBMb2FkZXIsXG4gIEFzc2V0UHJvbWlzZSxcbiAgQXNzZXRUeXBlLFxuICBMb2FkSXRlbSxcbiAgU3ByaXRlLFxuICBUZXh0dXJlMkQsXG4gIFJlc291cmNlTWFuYWdlcixcbiAgU3ByaXRlQXRsYXNcbn0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLlNwcml0ZSwgW1wic3ByaXRlXCJdLCBmYWxzZSlcbmNsYXNzIFNwcml0ZUxvYWRlciBleHRlbmRzIExvYWRlcjxTcHJpdGU+IHtcbiAgbG9hZChpdGVtOiBMb2FkSXRlbSwgcmVzb3VyY2VNYW5hZ2VyOiBSZXNvdXJjZU1hbmFnZXIpOiBBc3NldFByb21pc2U8U3ByaXRlPiB7XG4gICAgcmV0dXJuIG5ldyBBc3NldFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXF1ZXN0PGFueT4oaXRlbS51cmwsIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogXCJqc29uXCJcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuYmVsb25nVG9BdGxhcykge1xuICAgICAgICAgICAgcmVzb3VyY2VNYW5hZ2VyXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgLmdldFJlc291cmNlQnlSZWY8U3ByaXRlQXRsYXM+KGRhdGEuYmVsb25nVG9BdGxhcylcbiAgICAgICAgICAgICAgLnRoZW4oKGF0bGFzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShhdGxhcy5nZXRTcHJpdGUoZGF0YS5mdWxsUGF0aCkpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudGV4dHVyZSkge1xuICAgICAgICAgICAgcmVzb3VyY2VNYW5hZ2VyXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgLmdldFJlc291cmNlQnlSZWY8VGV4dHVyZTJEPihkYXRhLnRleHR1cmUpXG4gICAgICAgICAgICAgIC50aGVuKCh0ZXh0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3ByaXRlKHJlc291cmNlTWFuYWdlci5lbmdpbmUsIHRleHR1cmUsIGRhdGEucmVnaW9uLCBkYXRhLnBpdm90LCBkYXRhLmJvcmRlcikpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3ByaXRlKHJlc291cmNlTWFuYWdlci5lbmdpbmUsIG51bGwsIGRhdGEucmVnaW9uLCBkYXRhLnBpdm90LCBkYXRhLmJvcmRlcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFzc2V0UHJvbWlzZSxcbiAgQXNzZXRUeXBlLFxuICBMb2FkZXIsXG4gIExvYWRJdGVtLFxuICByZXNvdXJjZUxvYWRlcixcbiAgUmVzb3VyY2VNYW5hZ2VyLFxuICBUZXh0dXJlMkQsXG4gIFRleHR1cmVGb3JtYXRcbn0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtY29yZVwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLlRleHR1cmUyRCwgW1wicG5nXCIsIFwianBnXCIsIFwid2VicFwiLCBcImpwZWdcIl0pXG5jbGFzcyBUZXh0dXJlMkRMb2FkZXIgZXh0ZW5kcyBMb2FkZXI8VGV4dHVyZTJEPiB7XG4gIGxvYWQoaXRlbTogTG9hZEl0ZW0sIHJlc291cmNlTWFuYWdlcjogUmVzb3VyY2VNYW5hZ2VyKTogQXNzZXRQcm9taXNlPFRleHR1cmUyRD4ge1xuICAgIHJldHVybiBuZXcgQXNzZXRQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucmVxdWVzdDxIVE1MSW1hZ2VFbGVtZW50PihpdGVtLnVybCwge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiBcImltYWdlXCJcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKChpbWFnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGl0ZW0ucGFyYW1zID8/IHt9O1xuICAgICAgICAgIGNvbnN0IHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKFxuICAgICAgICAgICAgcmVzb3VyY2VNYW5hZ2VyLmVuZ2luZSxcbiAgICAgICAgICAgIGltYWdlLndpZHRoLFxuICAgICAgICAgICAgaW1hZ2UuaGVpZ2h0LFxuICAgICAgICAgICAgcGFyYW1zLmZvcm1hdCxcbiAgICAgICAgICAgIHBhcmFtcy5taXBtYXBcbiAgICAgICAgICApO1xuICAgICAgICAgIC8qKiBAdHMtaWdub3JlICovXG4gICAgICAgICAgaWYgKCF0ZXh0dXJlLl9wbGF0Zm9ybVRleHR1cmUpIHJldHVybjtcbiAgICAgICAgICB0ZXh0dXJlLnNldEltYWdlU291cmNlKGltYWdlKTtcbiAgICAgICAgICB0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcygpO1xuXG4gICAgICAgICAgaWYgKGl0ZW0udXJsLmluZGV4T2YoXCJkYXRhOlwiKSAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRQYXRoID0gaXRlbS51cmwuc3BsaXQoXCIvXCIpO1xuICAgICAgICAgICAgdGV4dHVyZS5uYW1lID0gc3BsaXRQYXRoW3NwbGl0UGF0aC5sZW5ndGggLSAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRleHR1cmUyRCBsb2FkZXIgcGFyYW1zIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0dXJlMkRQYXJhbXMge1xuICAvKiogVGV4dHVyZSBmb3JtYXQuIGRlZmF1bHQgIGBUZXh0dXJlRm9ybWF0LlI4RzhCOEE4YCAqL1xuICBmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XG4gIC8qKiBXaGV0aGVyIHRvIHVzZSBtdWx0aS1sZXZlbCB0ZXh0dXJlLCBkZWZhdWx0IGlzIHRydWUuICovXG4gIG1pcG1hcDogYm9vbGVhbjtcbn1cbiIsImltcG9ydCB7XG4gIEFzc2V0UHJvbWlzZSxcbiAgQXNzZXRUeXBlLFxuICBMb2FkZXIsXG4gIExvYWRJdGVtLFxuICByZXNvdXJjZUxvYWRlcixcbiAgUmVzb3VyY2VNYW5hZ2VyLFxuICBUZXh0dXJlQ3ViZUZhY2UsXG4gIFRleHR1cmVDdWJlXG59IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcblxuQHJlc291cmNlTG9hZGVyKEFzc2V0VHlwZS5UZXh0dXJlQ3ViZSwgW1wiXCJdKVxuY2xhc3MgVGV4dHVyZUN1YmVMb2FkZXIgZXh0ZW5kcyBMb2FkZXI8VGV4dHVyZUN1YmU+IHtcbiAgbG9hZChpdGVtOiBMb2FkSXRlbSwgcmVzb3VyY2VNYW5hZ2VyOiBSZXNvdXJjZU1hbmFnZXIpOiBBc3NldFByb21pc2U8VGV4dHVyZUN1YmU+IHtcbiAgICByZXR1cm4gbmV3IEFzc2V0UHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgaXRlbS51cmxzLm1hcCgodXJsKSA9PlxuICAgICAgICAgIHRoaXMucmVxdWVzdDxIVE1MSW1hZ2VFbGVtZW50Pih1cmwsIHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICB0eXBlOiBcImltYWdlXCJcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgICAgIC50aGVuKChpbWFnZXMpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGltYWdlc1swXTtcblxuICAgICAgICAgIGlmICh3aWR0aCAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIGN1YmUgdGV4dHVyZSBtdXN0IGhhdmUgdGhlIHNhbWUgd2lkdGggYW5kIGhlaWdodFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0ZXggPSBuZXcgVGV4dHVyZUN1YmUocmVzb3VyY2VNYW5hZ2VyLmVuZ2luZSwgd2lkdGgpO1xuXG4gICAgICAgICAgLyoqIEB0cy1pZ25vcmUgKi9cbiAgICAgICAgICBpZiAoIXRleC5fcGxhdGZvcm1UZXh0dXJlKSByZXR1cm47XG5cbiAgICAgICAgICBmb3IgKGxldCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykge1xuICAgICAgICAgICAgdGV4LnNldEltYWdlU291cmNlKFRleHR1cmVDdWJlRmFjZS5Qb3NpdGl2ZVggKyBmYWNlSW5kZXgsIGltYWdlc1tmYWNlSW5kZXhdLCAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0ZXguZ2VuZXJhdGVNaXBtYXBzKCk7XG4gICAgICAgICAgcmVzb2x2ZSh0ZXgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICByZXNvdXJjZUxvYWRlcixcbiAgTG9hZGVyLFxuICBBc3NldFByb21pc2UsXG4gIEFzc2V0VHlwZSxcbiAgTG9hZEl0ZW0sXG4gIFJlc291cmNlTWFuYWdlcixcbiAgQW5pbWF0aW9uQ2xpcFxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1jb3JlXCI7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tIFwiLi9yZXNvdXJjZS1kZXNlcmlhbGl6ZVwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLkFuaW1hdGlvbkNsaXAsIFtcImFuaVwiXSlcbmNsYXNzIEFuaW1hdGlvbkNsaXBMb2FkZXIgZXh0ZW5kcyBMb2FkZXI8QW5pbWF0aW9uQ2xpcD4ge1xuICBsb2FkKGl0ZW06IExvYWRJdGVtLCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IEFzc2V0UHJvbWlzZTxBbmltYXRpb25DbGlwPiB7XG4gICAgcmV0dXJuIG5ldyBBc3NldFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXF1ZXN0PGFueT4oaXRlbS51cmwsIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogXCJhcnJheWJ1ZmZlclwiXG4gICAgICB9KVxuICAgICAgICAudGhlbigoZGF0YSkgPT4gZGVjb2RlPEFuaW1hdGlvbkNsaXA+KGRhdGEsIHJlc291cmNlTWFuYWdlci5lbmdpbmUpLnRoZW4ocmVzb2x2ZSkpXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBc3NldFByb21pc2UsXG4gIEFzc2V0VHlwZSxcbiAgQmFja2dyb3VuZE1vZGUsXG4gIEVuZ2luZSxcbiAgRm9udCxcbiAgTG9hZGVyLFxuICBMb2FkSXRlbSxcbiAgUHJpbWl0aXZlTWVzaCxcbiAgcmVzb3VyY2VMb2FkZXIsXG4gIFJlc291cmNlTWFuYWdlcixcbiAgU2NlbmUsXG4gIFNreUJveE1hdGVyaWFsXG59IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWNvcmVcIjtcbmltcG9ydCB7IElDbGFzc09iamVjdCwgUmVmbGVjdGlvblBhcnNlciwgU2NlbmVQYXJzZXIgfSBmcm9tIFwiLi9yZXNvdXJjZS1kZXNlcmlhbGl6ZVwiO1xuXG5AcmVzb3VyY2VMb2FkZXIoQXNzZXRUeXBlLlNjZW5lLCBbXCJwcmVmYWJcIl0sIHRydWUpXG5jbGFzcyBTY2VuZUxvYWRlciBleHRlbmRzIExvYWRlcjxTY2VuZT4ge1xuICBsb2FkKGl0ZW06IExvYWRJdGVtLCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IEFzc2V0UHJvbWlzZTxTY2VuZT4ge1xuICAgIGNvbnN0IHsgZW5naW5lIH0gPSByZXNvdXJjZU1hbmFnZXI7XG4gICAgcmV0dXJuIG5ldyBBc3NldFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXF1ZXN0PGFueT4oaXRlbS51cmwsIHsgdHlwZTogXCJqc29uXCIgfSlcbiAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZW5naW5lLnJlc291cmNlTWFuYWdlci5pbml0VmlydHVhbFJlc291cmNlcyhkYXRhLmZpbGVzKTtcbiAgICAgICAgICByZXR1cm4gU2NlbmVQYXJzZXIucGFyc2UoZW5naW5lLCBkYXRhKS50aGVuKChzY2VuZSkgPT4ge1xuICAgICAgICAgICAgLy8gcGFyc2UgYW1iaWVudCBsaWdodFxuICAgICAgICAgICAgY29uc3QgYW1iaWVudCA9IGRhdGEuc2NlbmUuYW1iaWVudDtcbiAgICAgICAgICAgIGxldCBhbWJpZW50TGlnaHRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICBpZiAoYW1iaWVudC5hbWJpZW50TGlnaHQpIHtcbiAgICAgICAgICAgICAgYW1iaWVudExpZ2h0UHJvbWlzZSA9IHJlc291cmNlTWFuYWdlclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAuZ2V0UmVzb3VyY2VCeVJlZjxhbnk+KGRhdGEuc2NlbmUuYW1iaWVudC5hbWJpZW50TGlnaHQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGxpZ2h0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBzY2VuZS5hbWJpZW50TGlnaHQgPSBsaWdodDtcbiAgICAgICAgICAgICAgICAgIHNjZW5lLmFtYmllbnRMaWdodC5kaWZmdXNlSW50ZW5zaXR5ID0gYW1iaWVudC5kaWZmdXNlSW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgICAgc2NlbmUuYW1iaWVudExpZ2h0LnNwZWN1bGFySW50ZW5zaXR5ID0gYW1iaWVudC5zcGVjdWxhckludGVuc2l0eTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjZW5lLmFtYmllbnRMaWdodC5kaWZmdXNlSW50ZW5zaXR5ID0gYW1iaWVudC5kaWZmdXNlSW50ZW5zaXR5O1xuICAgICAgICAgICAgICBzY2VuZS5hbWJpZW50TGlnaHQuc3BlY3VsYXJJbnRlbnNpdHkgPSBhbWJpZW50LnNwZWN1bGFySW50ZW5zaXR5O1xuICAgICAgICAgICAgICBzY2VuZS5hbWJpZW50TGlnaHQuZGlmZnVzZVNvbGlkQ29sb3IuY29weUZyb20oYW1iaWVudC5kaWZmdXNlU29saWRDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBkYXRhLnNjZW5lLmJhY2tncm91bmQ7XG4gICAgICAgICAgICBzY2VuZS5iYWNrZ3JvdW5kLm1vZGUgPSBiYWNrZ3JvdW5kLm1vZGU7XG5cbiAgICAgICAgICAgIGxldCBiYWNrZ3JvdW5kUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHNjZW5lLmJhY2tncm91bmQubW9kZSkge1xuICAgICAgICAgICAgICBjYXNlIEJhY2tncm91bmRNb2RlLlNvbGlkQ29sb3I6XG4gICAgICAgICAgICAgICAgc2NlbmUuYmFja2dyb3VuZC5zb2xpZENvbG9yLmNvcHlGcm9tKGJhY2tncm91bmQuY29sb3IpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIEJhY2tncm91bmRNb2RlLlNreTpcbiAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZC5za3kpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRQcm9taXNlID0gcmVzb3VyY2VNYW5hZ2VyLmdldFJlc291cmNlQnlSZWY8YW55PihiYWNrZ3JvdW5kLnNreSkudGhlbigobGlnaHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2t5ID0gc2NlbmUuYmFja2dyb3VuZC5za3k7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNreU1hdGVyaWFsID0gbmV3IFNreUJveE1hdGVyaWFsKGVuZ2luZSk7XG4gICAgICAgICAgICAgICAgICAgIHNreU1hdGVyaWFsLnRleHR1cmVDdWJlTWFwID0gbGlnaHQuc3BlY3VsYXJUZXh0dXJlO1xuICAgICAgICAgICAgICAgICAgICBza3lNYXRlcmlhbC50ZXh0dXJlRGVjb2RlUkdCTSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNreS5tYXRlcmlhbCA9IHNreU1hdGVyaWFsO1xuICAgICAgICAgICAgICAgICAgICBza3kubWVzaCA9IFByaW1pdGl2ZU1lc2guY3JlYXRlQ3Vib2lkKGVuZ2luZSwgMSwgMSwgMSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQmFja2dyb3VuZE1vZGUuVGV4dHVyZTpcbiAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZC50ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUHJvbWlzZSA9IHJlc291cmNlTWFuYWdlci5nZXRSZXNvdXJjZUJ5UmVmPGFueT4oYmFja2dyb3VuZC50ZXh0dXJlKS50aGVuKCh0ZXh0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLmJhY2tncm91bmQudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHBhcnNlIHNoYWRvd1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93ID0gZGF0YS5zY2VuZS5zaGFkb3c7XG4gICAgICAgICAgICBpZiAoc2hhZG93KSB7XG4gICAgICAgICAgICAgIGlmIChzaGFkb3cuY2FzdFNoYWRvd3MgIT0gdW5kZWZpbmVkKSBzY2VuZS5jYXN0U2hhZG93cyA9IHNoYWRvdy5jYXN0U2hhZG93cztcbiAgICAgICAgICAgICAgaWYgKHNoYWRvdy5zaGFkb3dSZXNvbHV0aW9uICE9IHVuZGVmaW5lZCkgc2NlbmUuc2hhZG93UmVzb2x1dGlvbiA9IHNoYWRvdy5zaGFkb3dSZXNvbHV0aW9uO1xuICAgICAgICAgICAgICBpZiAoc2hhZG93LnNoYWRvd0Rpc3RhbmNlICE9IHVuZGVmaW5lZCkgc2NlbmUuc2hhZG93RGlzdGFuY2UgPSBzaGFkb3cuc2hhZG93RGlzdGFuY2U7XG4gICAgICAgICAgICAgIGlmIChzaGFkb3cuc2hhZG93Q2FzY2FkZXMgIT0gdW5kZWZpbmVkKSBzY2VuZS5zaGFkb3dDYXNjYWRlcyA9IHNoYWRvdy5zaGFkb3dDYXNjYWRlcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZm9nID0gZGF0YS5zY2VuZS5mb2c7XG4gICAgICAgICAgICBpZiAoZm9nKSB7XG4gICAgICAgICAgICAgIGlmIChmb2cuZm9nTW9kZSAhPSB1bmRlZmluZWQpIHNjZW5lLmZvZ01vZGUgPSBmb2cuZm9nTW9kZTtcbiAgICAgICAgICAgICAgaWYgKGZvZy5mb2dTdGFydCAhPSB1bmRlZmluZWQpIHNjZW5lLmZvZ1N0YXJ0ID0gZm9nLmZvZ1N0YXJ0O1xuICAgICAgICAgICAgICBpZiAoZm9nLmZvZ0VuZCAhPSB1bmRlZmluZWQpIHNjZW5lLmZvZ0VuZCA9IGZvZy5mb2dFbmQ7XG4gICAgICAgICAgICAgIGlmIChmb2cuZm9nRGVuc2l0eSAhPSB1bmRlZmluZWQpIHNjZW5lLmZvZ0RlbnNpdHkgPSBmb2cuZm9nRGVuc2l0eTtcbiAgICAgICAgICAgICAgaWYgKGZvZy5mb2dDb2xvciAhPSB1bmRlZmluZWQpIHNjZW5lLmZvZ0NvbG9yLmNvcHlGcm9tKGZvZy5mb2dDb2xvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbYW1iaWVudExpZ2h0UHJvbWlzZSwgYmFja2dyb3VuZFByb21pc2VdKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShzY2VuZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH1cbn1cblxuUmVmbGVjdGlvblBhcnNlci5yZWdpc3RlckN1c3RvbVBhcnNlQ29tcG9uZW50KFxuICBcIlRleHRSZW5kZXJlclwiLFxuICBhc3luYyAoaW5zdGFuY2U6IGFueSwgaXRlbTogT21pdDxJQ2xhc3NPYmplY3QsIFwiY2xhc3NcIj4sIGVuZ2luZTogRW5naW5lKSA9PiB7XG4gICAgY29uc3QgeyBwcm9wcyB9ID0gaXRlbTtcbiAgICBpZiAoIXByb3BzLmZvbnQpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGluc3RhbmNlLmZvbnQgPSBGb250LmNyZWF0ZUZyb21PUyhlbmdpbmUsIHByb3BzLmZvbnRGYW1pbHkgfHwgXCJBcmlhbFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG4pO1xuIl0sIm5hbWVzIjpbIkFuaW1hdG9yQ29udHJvbGxlckxvYWRlciIsImxvYWQiLCJpdGVtIiwicmVzb3VyY2VNYW5hZ2VyIiwiQXNzZXRQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcXVlc3QiLCJ1cmwiLCJ0eXBlIiwidGhlbiIsImRhdGEiLCJhbmltYXRvckNvbnRyb2xsZXIiLCJBbmltYXRvckNvbnRyb2xsZXIiLCJsYXllcnMiLCJwcm9taXNlcyIsImZvckVhY2giLCJsYXllckRhdGEiLCJsYXllckluZGV4IiwibmFtZSIsImJsZW5kaW5nTW9kZSIsIndlaWdodCIsInN0YXRlTWFjaGluZSIsInN0YXRlTWFjaGluZURhdGEiLCJsYXllciIsIkFuaW1hdG9yQ29udHJvbGxlckxheWVyIiwic3RhdGVzIiwiQW5pbWF0b3JTdGF0ZU1hY2hpbmUiLCJzdGF0ZURhdGEiLCJzdGF0ZUluZGV4Iiwic3BlZWQiLCJ3cmFwTW9kZSIsImNsaXBTdGFydE5vcm1hbGl6ZWRUaW1lIiwiY2xpcEVuZE5vcm1hbGl6ZWRUaW1lIiwiaXNEZWZhdWx0U3RhdGUiLCJjbGlwIiwiY2xpcERhdGEiLCJzdGF0ZSIsImFkZFN0YXRlIiwiZGVmYXVsdFN0YXRlIiwiY2xpcFN0YXJ0VGltZSIsImNsaXBFbmRUaW1lIiwicHVzaCIsIlByb21pc2UiLCJnZXRSZXNvdXJjZUJ5UmVmIiwidHJhbnNpdGlvbnMiLCJ0cmFuc2l0aW9uRGF0YSIsInRhcmdldFN0YXRlTmFtZSIsImR1cmF0aW9uIiwib2Zmc2V0IiwiZXhpdFRpbWUiLCJzb3VyY2VTdGF0ZSIsImZpbmRTdGF0ZUJ5TmFtZSIsImRlc3RTdGF0ZSIsInRyYW5zaXRpb24iLCJBbmltYXRvclN0YXRlVHJhbnNpdGlvbiIsImRlc3RpbmF0aW9uU3RhdGUiLCJhZGRUcmFuc2l0aW9uIiwiYWRkTGF5ZXIiLCJhbGwiLCJjYXRjaCIsIkxvYWRlciIsInJlc291cmNlTG9hZGVyIiwiQXNzZXRUeXBlIiwiaXNCYXNlNjQiLCJ0ZXN0IiwiQnVmZmVyTG9hZGVyIiwiYmFzZTY0U3RyIiwic2xpY2UiLCJSZWdFeHAiLCIkMSIsImxlbmd0aCIsInJlc3VsdCIsIlVpbnQ4QXJyYXkiLCJmcm9tIiwiYXRvYiIsImMiLCJjaGFyQ29kZUF0IiwiYnVmZmVyIiwiQnVmZmVyIiwiRW52TG9hZGVyIiwiYXJyYXlidWZmZXIiLCJzaEFycmF5IiwiRmxvYXQzMkFycmF5Iiwic2hCeXRlTGVuZ3RoIiwic2l6ZSIsIlVpbnQxNkFycmF5IiwidGV4dHVyZSIsIlRleHR1cmVDdWJlIiwiZW5naW5lIiwiZmlsdGVyTW9kZSIsIlRleHR1cmVGaWx0ZXJNb2RlIiwiVHJpbGluZWFyIiwibWlwbWFwQ291bnQiLCJtaXBMZXZlbCIsIm1pcFNpemUiLCJmYWNlIiwiZGF0YVNpemUiLCJzZXRQaXhlbEJ1ZmZlciIsIlRleHR1cmVDdWJlRmFjZSIsIlBvc2l0aXZlWCIsImFtYmllbnRMaWdodCIsIkFtYmllbnRMaWdodCIsInNoIiwiU3BoZXJpY2FsSGFybW9uaWNzMyIsImRpZmZ1c2VNb2RlIiwiRGlmZnVzZU1vZGUiLCJTcGhlcmljYWxIYXJtb25pY3MiLCJjb3B5RnJvbUFycmF5IiwiZGlmZnVzZVNwaGVyaWNhbEhhcm1vbmljcyIsInNwZWN1bGFyVGV4dHVyZSIsInNwZWN1bGFyVGV4dHVyZURlY29kZVJHQk0iLCJlIiwiRW52IiwiRm9udExvYWRlciIsImZvbnROYW1lIiwiZm9udFVybCIsIl9yZWdpc3RlckZvbnQiLCJmb250IiwiRm9udCIsImZvbnRGYWNlIiwiRm9udEZhY2UiLCJkb2N1bWVudCIsImZvbnRzIiwiYWRkIiwiUGFyc2VyQ29udGV4dCIsImhhc1NraW5uZWQiLCJjaGFpblByb21pc2VzIiwiYWNjZXNzb3JCdWZmZXJDYWNoZSIsInRleHR1cmVzUHJvbWlzZUluZm8iLCJQcm9taXNlSW5mbyIsIm1hdGVyaWFsc1Byb21pc2VJbmZvIiwibWVzaGVzUHJvbWlzZUluZm8iLCJhbmltYXRpb25DbGlwc1Byb21pc2VJbmZvIiwiZGVmYXVsdFNjZW5lUm9vdFByb21pc2VJbmZvIiwibWFzdGVyUHJvbWlzZUluZm8iLCJwcm9taXNlTWFwIiwiX2luaXRQcm9taXNlSW5mbyIsInByb21pc2VJbmZvIiwicHJvbWlzZSIsInNldFByb2dyZXNzIiwib25DYW5jZWwiLCJCdWZmZXJJbmZvIiwiaW50ZXJsZWF2ZWQiLCJzdHJpZGUiLCJ2ZXJ0ZXhCaW5kaW5nSW5mb3MiLCJBY2Nlc3NvckNvbXBvbmVudFR5cGUiLCJCWVRFIiwiVU5TSUdORURfQllURSIsIlNIT1JUIiwiVU5TSUdORURfU0hPUlQiLCJVTlNJR05FRF9JTlQiLCJGTE9BVCIsIkFjY2Vzc29yVHlwZSIsIlNDQUxBUiIsIlZFQzIiLCJWRUMzIiwiVkVDNCIsIk1BVDIiLCJNQVQzIiwiTUFUNCIsIkFuaW1hdGlvbkNoYW5uZWxUYXJnZXRQYXRoIiwiVFJBTlNMQVRJT04iLCJST1RBVElPTiIsIlNDQUxFIiwiV0VJR0hUUyIsIkFuaW1hdGlvblNhbXBsZXJJbnRlcnBvbGF0aW9uIiwiTGluZWFyIiwiU3RlcCIsIkN1YmljU3BpbmUiLCJDYW1lcmFUeXBlIiwiUEVSU1BFQ1RJVkUiLCJPUlRIT0dSQVBISUMiLCJJbWFnZU1pbWVUeXBlIiwiSlBFRyIsIlBORyIsIk1hdGVyaWFsQWxwaGFNb2RlIiwiT1BBUVVFIiwiTUFTSyIsIkJMRU5EIiwiVGV4dHVyZU1hZ0ZpbHRlciIsIk5FQVJFU1QiLCJMSU5FQVIiLCJUZXh0dXJlTWluRmlsdGVyIiwiTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCIsIkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsIk5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsIkxJTkVBUl9NSVBNQVBfTElORUFSIiwiVGV4dHVyZVdyYXBNb2RlIiwiQ0xBTVBfVE9fRURHRSIsIk1JUlJPUkVEX1JFUEVBVCIsIlJFUEVBVCIsIkdMVEZVdGlsIiwiZmxvYXRCdWZmZXJUb1ZlY3RvcjJBcnJheSIsImJ1ZmZlckxlbiIsImFycmF5IiwiQXJyYXkiLCJpIiwiVmVjdG9yMiIsImZsb2F0QnVmZmVyVG9WZWN0b3IzQXJyYXkiLCJWZWN0b3IzIiwiZmxvYXRCdWZmZXJUb1ZlY3RvcjRBcnJheSIsIlZlY3RvcjQiLCJmbG9hdEJ1ZmZlclRvQ29sb3JBcnJheSIsImlzQ29sb3IzIiwiY29sb3JzIiwiQ29sb3IiLCJkZWNvZGVUZXh0IiwiVGV4dERlY29kZXIiLCJkZWNvZGUiLCJzIiwiaWwiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZXRBY2Nlc3NvclR5cGVTaXplIiwiYWNjZXNzb3JUeXBlIiwiZ2V0Q29tcG9uZW50VHlwZSIsImNvbXBvbmVudFR5cGUiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJnZXROb3JtYWxpemVkQ29tcG9uZW50U2NhbGUiLCJFcnJvciIsImdldEFjY2Vzc29yQnVmZmVyIiwiY29udGV4dCIsImdsdGYiLCJhY2Nlc3NvciIsImJ1ZmZlcnMiLCJidWZmZXJWaWV3cyIsImJ1ZmZlclZpZXciLCJidWZmZXJCeXRlT2Zmc2V0IiwiYnl0ZU9mZnNldCIsIlR5cGVkQXJyYXkiLCJkYXRhRWxtZW50U2l6ZSIsImRhdGFFbGVtZW50Qnl0ZXMiLCJCWVRFU19QRVJfRUxFTUVOVCIsImVsZW1lbnRTdHJpZGUiLCJhY2Nlc3NvckNvdW50IiwiY291bnQiLCJidWZmZXJTdHJpZGUiLCJieXRlU3RyaWRlIiwiYnVmZmVySW5mbyIsInVuZGVmaW5lZCIsImJ1ZmZlclNsaWNlIiwiTWF0aCIsImZsb29yIiwiYnVmZmVyQ2FjaGVLZXkiLCJzcGFyc2UiLCJwcm9jZXNzaW5nU3BhcnNlRGF0YSIsImdldEFjY2Vzc29yRGF0YSIsImFycmF5QnVmZmVyIiwiYWNjZXNzb3JCeXRlT2Zmc2V0IiwiaGFzT3duUHJvcGVydHkiLCJidWZmZXJWaWV3Qnl0ZU9mZnNldCIsImFjY2Vzc29yVHlwZVNpemUiLCJhcnJheVR5cGUiLCJ1aW50OEFycmF5IiwiYWNjZXNzb3JCeXRlU2l6ZSIsIm9yaWdpbmFsQnVmZmVyVmlldyIsImJ5dGVMZW5ndGgiLCJqIiwidHlwZWRBcnJheSIsImluZGljZXMiLCJ2YWx1ZXMiLCJpbmRpY2VzQnVmZmVyVmlldyIsInZhbHVlc0J1ZmZlclZpZXciLCJpbmRpY2VzQXJyYXlCdWZmZXIiLCJ2YWx1ZXNBcnJheUJ1ZmZlciIsImluZGljZXNCeXRlT2Zmc2V0IiwiaW5kaWNlc0J5dGVMZW5ndGgiLCJ2YWx1ZXNCeXRlT2Zmc2V0IiwidmFsdWVzQnl0ZUxlbmd0aCIsImluZGljZXNUeXBlIiwiaW5kaWNlc0FycmF5IiwidmFsdWVzQXJyYXkiLCJyZXBsYWNlSW5kZXgiLCJnZXRCdWZmZXJWaWV3RGF0YSIsIm9yaWdpbkRhdGEiLCJJbmRleFR5cGVBcnJheSIsImdldEluZGV4Rm9ybWF0IiwiSW5kZXhGb3JtYXQiLCJVSW50OCIsIlVJbnQxNiIsIlVJbnQzMiIsImdldEVsZW1lbnRGb3JtYXQiLCJub3JtYWxpemVkIiwiVmVydGV4RWxlbWVudEZvcm1hdCIsIkZsb2F0IiwiTm9ybWFsaXplZFNob3J0MiIsIlNob3J0MiIsIk5vcm1hbGl6ZWRTaG9ydDQiLCJTaG9ydDQiLCJOb3JtYWxpemVkVVNob3J0MiIsIlVTaG9ydDIiLCJOb3JtYWxpemVkVVNob3J0NCIsIlVTaG9ydDQiLCJOb3JtYWxpemVkQnl0ZTQiLCJCeXRlNCIsIk5vcm1hbGl6ZWRVQnl0ZTQiLCJVQnl0ZTQiLCJsb2FkSW1hZ2VCdWZmZXIiLCJpbWFnZUJ1ZmZlciIsImJsb2IiLCJ3aW5kb3ciLCJCbG9iIiwiaW1nIiwiSW1hZ2UiLCJvbmVycm9yIiwib25sb2FkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib25hYm9ydCIsImNyb3NzT3JpZ2luIiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiaXNBYnNvbHV0ZVVybCIsInBhcnNlUmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwicmVsYXRpdmVVcmwiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIl9mb3JtYXRSZWxhdGl2ZVBhdGgiLCJwYXJzZUdMQiIsImdsYiIsIlVJTlQzMl9MRU5HVEgiLCJHTEJfSEVBREVSX01BR0lDIiwiR0xCX0hFQURFUl9MRU5HVEgiLCJHTEJfQ0hVTktfVFlQRVMiLCJKU09OIiwiQklOIiwiZGF0YVZpZXciLCJEYXRhVmlldyIsImhlYWRlciIsIm1hZ2ljIiwiZ2V0VWludDMyIiwidmVyc2lvbiIsImNvbnNvbGUiLCJlcnJvciIsInRvU3RyaW5nIiwiY2h1bmtMZW5ndGgiLCJjaHVua1R5cGUiLCJnbFRGRGF0YSIsInBhcnNlIiwiY3VycmVudE9mZnNldCIsInBhdGgiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJyZWR1Y2UiLCJhY2MiLCJjdXIiLCJwb3AiLCJqb2luIiwiUGFyc2VyIiwicGFyc2VFbmdpbmVSZXNvdXJjZSIsImV4dGVuc2lvbk5hbWUiLCJleHRlbnNpb25TY2hlbWEiLCJwYXJzZVJlc291cmNlIiwiZXh0cmEiLCJwYXJzZXJzIiwiX2V4dGVuc2lvblBhcnNlcnMiLCJjcmVhdGVFbmdpbmVSZXNvdXJjZSIsImhhc0V4dGVuc2lvblBhcnNlciIsImluaXRpYWxpemUiLCJfYWRkRXh0ZW5zaW9uUGFyc2VyIiwiZXh0ZW5zaW9uUGFyc2VyIiwicmVnaXN0ZXJFeHRlbnNpb24iLCJwYXJzZXIiLCJFeHRlbnNpb25QYXJzZXIiLCJzY2hlbWEiLCJLSFJfZHJhY29fbWVzaF9jb21wcmVzc2lvbiIsIl9kZWNvZGVyIiwiRFJBQ09EZWNvZGVyIiwiZ2x0ZlByaW1pdGl2ZSIsImFjY2Vzc29ycyIsImF0dHJpYnV0ZXMiLCJnbHRmQXR0cmlidXRlTWFwIiwiYXR0cmlidXRlTWFwIiwiYXR0cmlidXRlVHlwZU1hcCIsImF0dHJpYnV0ZU5hbWUiLCJhY2Nlc3NvckRlZiIsImluZGV4QWNjZXNzb3IiLCJpbmRleFR5cGUiLCJ0YXNrQ29uZmlnIiwiYXR0cmlidXRlSURzIiwiYXR0cmlidXRlVHlwZXMiLCJ1c2VVbmlxdWVJRHMiLCJidWZmZXJWaWV3SW5kZXgiLCJwYXJzZWRHZW9tZXRyeSIsIktIUl9saWdodHNfcHVuY3R1YWwiLCJlbnRpdHkiLCJjb2xvciIsImludGVuc2l0eSIsInJhbmdlIiwic3BvdCIsImdsVEZSZXNvdXJjZSIsImxpZ2h0IiwiYWRkQ29tcG9uZW50IiwiRGlyZWN0TGlnaHQiLCJQb2ludExpZ2h0IiwiU3BvdExpZ2h0Iiwic2V0IiwiZGlzdGFuY2UiLCJpbm5lckNvbmVBbmdsZSIsIm91dGVyQ29uZUFuZ2xlIiwiUEkiLCJhbmdsZSIsInBlbnVtYnJhIiwibGlnaHRzIiwiTWF0ZXJpYWxQYXJzZXIiLCJ0ZXh0dXJlcyIsIm1hdGVyaWFscyIsImV4dGVuc2lvbnMiLCJwYnJNZXRhbGxpY1JvdWdobmVzcyIsIm5vcm1hbFRleHR1cmUiLCJvY2NsdXNpb25UZXh0dXJlIiwiZW1pc3NpdmVUZXh0dXJlIiwiZW1pc3NpdmVGYWN0b3IiLCJhbHBoYU1vZGUiLCJhbHBoYUN1dG9mZiIsImRvdWJsZVNpZGVkIiwiS0hSX21hdGVyaWFsc191bmxpdCIsIktIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzIiwiS0hSX21hdGVyaWFsc19jbGVhcmNvYXQiLCJLSFJfbWF0ZXJpYWxzX2lvciIsIk9BU0lTX21hdGVyaWFsc19yZW1hcCIsIm1hdGVyaWFsIiwiUEJSTWF0ZXJpYWwiLCJiYXNlQ29sb3JGYWN0b3IiLCJiYXNlQ29sb3JUZXh0dXJlIiwibWV0YWxsaWNGYWN0b3IiLCJyb3VnaG5lc3NGYWN0b3IiLCJtZXRhbGxpY1JvdWdobmVzc1RleHR1cmUiLCJiYXNlQ29sb3IiLCJsaW5lYXJUb0dhbW1hU3BhY2UiLCJiYXNlVGV4dHVyZSIsImluZGV4IiwiX3BhcnNlVGV4dHVyZVRyYW5zZm9ybSIsIm0iLCJtZXRhbGxpYyIsInJvdWdobmVzcyIsInJvdWdobmVzc01ldGFsbGljVGV4dHVyZSIsImVtaXNzaXZlQ29sb3IiLCJzY2FsZSIsIm5vcm1hbFRleHR1cmVJbnRlbnNpdHkiLCJzdHJlbmd0aCIsInRleENvb3JkIiwib2NjbHVzaW9uVGV4dHVyZUludGVuc2l0eSIsIlRleHR1cmVDb29yZGluYXRlIiwiVVYxIiwib2NjbHVzaW9uVGV4dHVyZUNvb3JkIiwiTG9nZ2VyIiwid2FybiIsInJlbmRlckZhY2UiLCJSZW5kZXJGYWNlIiwiRG91YmxlIiwiRnJvbnQiLCJpc1RyYW5zcGFyZW50IiwiS0hSX3RleHR1cmVfdHJhbnNmb3JtIiwiY2xlYXJjb2F0RmFjdG9yIiwiY2xlYXJjb2F0VGV4dHVyZSIsImNsZWFyY29hdFJvdWdobmVzc0ZhY3RvciIsImNsZWFyY29hdFJvdWdobmVzc1RleHR1cmUiLCJjbGVhcmNvYXROb3JtYWxUZXh0dXJlIiwiY2xlYXJDb2F0IiwiY2xlYXJDb2F0Um91Z2huZXNzIiwiY2xlYXJDb2F0VGV4dHVyZSIsImNsZWFyQ29hdFJvdWdobmVzc1RleHR1cmUiLCJjbGVhckNvYXROb3JtYWxUZXh0dXJlIiwiaW9yIiwiUEJSU3BlY3VsYXJNYXRlcmlhbCIsImRpZmZ1c2VGYWN0b3IiLCJkaWZmdXNlVGV4dHVyZSIsInNwZWN1bGFyRmFjdG9yIiwiZ2xvc3NpbmVzc0ZhY3RvciIsInNwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUiLCJzcGVjdWxhckNvbG9yIiwiZ2xvc3NpbmVzcyIsIlVubGl0TWF0ZXJpYWwiLCJLSFJfbWF0ZXJpYWxzX3ZhcmlhbnRzIiwicmVuZGVyZXIiLCJ2YXJpYW50cyIsIm1hcHBpbmdzIiwibWFwIiwidmFyaWFudE5hbWVzIiwiS0hSX21lc2hfcXVhbnRpemF0aW9uIiwicm90YXRpb24iLCJ0aWxpbmdPZmZzZXQiLCJ6IiwidyIsIngiLCJ5IiwiR2FsYWNlYW5NYXRlcmlhbHNSZW1hcCIsIkFuaW1hdGlvblBhcnNlciIsImVudGl0aWVzIiwiYW5pbWF0aW9ucyIsImFuaW1hdGlvbkNsaXBDb3VudCIsImFuaW1hdGlvbkNsaXBzIiwiYW5pbWF0aW9uc0luZGljZXMiLCJnbHRmQW5pbWF0aW9uIiwiY2hhbm5lbHMiLCJzYW1wbGVycyIsImFuaW1hdGlvbkNsaXAiLCJBbmltYXRpb25DbGlwIiwic2FtcGxlRGF0YUNvbGxlY3Rpb24iLCJnbHRmU2FtcGxlciIsImlucHV0QWNjZXNzb3IiLCJpbnB1dCIsIm91dHB1dEFjY2Vzc29yIiwib3V0cHV0Iiwic2NhbGVkIiwiayIsInYiLCJvdXRwdXRTdHJpZGUiLCJpbnRlcnBvbGF0aW9uIiwic2FtcGxlckludGVycG9sYXRpb24iLCJJbnRlcnBvbGF0aW9uVHlwZSIsIm91dHB1dFNpemUiLCJnbHRmQ2hhbm5lbCIsInRhcmdldCIsImNoYW5uZWxUYXJnZXRFbnRpdHkiLCJub2RlIiwicmVsYXRpdmVQYXRoIiwicGFyZW50IiwiQ29tcG9uZW50VHlwZSIsInByb3BlcnR5TmFtZSIsIlRyYW5zZm9ybSIsIlNraW5uZWRNZXNoUmVuZGVyZXIiLCJjdXJ2ZSIsIl9hZGRDdXJ2ZSIsImFkZEN1cnZlQmluZGluZyIsIl9hbmltYXRpb25zSW5kaWNlcyIsImFuaW1hdGlvbmNoYW5uZWxUYXJnZXRQYXRoIiwic2FtcGxlRGF0YSIsInNhbXBsZXIiLCJBbmltYXRpb25WZWN0b3IzQ3VydmUiLCJuIiwia2V5ZnJhbWUiLCJLZXlmcmFtZSIsInRpbWUiLCJpblRhbmdlbnQiLCJ2YWx1ZSIsIm91dFRhbmdlbnQiLCJhZGRLZXkiLCJBbmltYXRpb25RdWF0ZXJuaW9uQ3VydmUiLCJRdWF0ZXJuaW9uIiwiQW5pbWF0aW9uRmxvYXRBcnJheUN1cnZlIiwic3ViYXJyYXkiLCJCdWZmZXJQYXJzZXIiLCJfaXNHTEIiLCJ1cmkiLCJFbnRpdHlQYXJzZXIiLCJub2RlcyIsImdsdGZOb2RlIiwibWF0cml4IiwidHJhbnNsYXRpb24iLCJFbnRpdHkiLCJfZGVmYXVsdE5hbWUiLCJ0cmFuc2Zvcm0iLCJsb2NhbE1hdHJpeCIsInNldFBvc2l0aW9uIiwic2V0Um90YXRpb25RdWF0ZXJuaW9uIiwic2V0U2NhbGUiLCJfYnVpbGRFbnRpdHlUcmVlIiwiX2NyZWF0ZVNjZW5lUm9vdHMiLCJjaGlsZHJlbiIsImNoaWxkRW50aXR5IiwiYWRkQ2hpbGQiLCJzY2VuZUlEIiwic2NlbmUiLCJzY2VuZXMiLCJzY2VuZVJvb3RzIiwicm9vdEVudGl0eSIsImRlZmF1bHRTY2VuZVJvb3QiLCJNZXNoUGFyc2VyIiwiZ2x0Zk1lc2giLCJwcmltaXRpdmVzIiwicHJpbWl0aXZlUHJvbWlzZXMiLCJtZXNoIiwiTW9kZWxNZXNoIiwiZGVjb2RlZEdlb21ldHJ5IiwiX3BhcnNlTWVzaEZyb21HTFRGUHJpbWl0aXZlRHJhY28iLCJhdHRyaWJ1dGVTZW1hbnRpYyIsInNoYXBlSW5kZXgiLCJrZWVwTWVzaERhdGEiLCJfcGFyc2VNZXNoRnJvbUdMVEZQcmltaXRpdmUiLCJzaGFwZUFjY2Vzc29ySWR4IiwidGFyZ2V0cyIsImF0dHJpYnV0ZUFjY2Vzc29ySWR4IiwibWVzaGVzIiwibWVzaFByb21pc2VzIiwiZ2V0VmVydGV4QnVmZmVyRGF0YSIsImdldEJsZW5kU2hhcGVEYXRhIiwiZ2V0SW5kZXhCdWZmZXJEYXRhIiwibW9kZSIsInZlcnRleEVsZW1lbnRzIiwidmVydGV4Q291bnQiLCJidWZmZXJCaW5kSW5kZXgiLCJwb3NpdGlvbnMiLCJib25lSW5kaWNlcyIsImJvbmVXZWlnaHRzIiwiYXR0cmlidXRlIiwiYWNjZXNzb3JCdWZmZXIiLCJkYXRhRWxlbWVudFNpemUiLCJ2ZXJ0aWNlcyIsInZlcnRleEVsZW1lbnQiLCJtZXNoSWQiLCJpbnN0YW5jZUlkIiwiZWxlbWVudE5vcm1hbGl6ZWQiLCJlbGVtZW50Rm9ybWF0Iiwic2NhbGVGYWN0b3IiLCJlbGVtZW50T2Zmc2V0IiwiVmVydGV4RWxlbWVudCIsInZlcnRleEJ1ZmZlciIsIkJ1ZmZlckJpbmRGbGFnIiwiVmVydGV4QnVmZmVyIiwiQnVmZmVyVXNhZ2UiLCJTdGF0aWMiLCJzZXREYXRhIiwic2V0VmVydGV4QnVmZmVyQmluZGluZyIsImJvdW5kcyIsIm1pbiIsIm1heCIsImJhc2VPZmZzZXQiLCJwb3NpdGlvbiIsIl90ZW1wVmVjdG9yMyIsIk51bWJlciIsIk1BWF9WQUxVRSIsImNsb25lUG9zaXRpb24iLCJjbG9uZSIsImJvbmVJbmRleCIsImJvbmVXZWlnaHQiLCJzZXRWZXJ0ZXhFbGVtZW50cyIsImluZGV4RGF0YSIsInNldEluZGljZXMiLCJhZGRTdWJNZXNoIiwiX2NyZWF0ZUJsZW5kU2hhcGUiLCJ1cGxvYWREYXRhIiwiX3Bvc2l0aW9ucyIsIl9ib25lSW5kaWNlcyIsIl9ib25lV2VpZ2h0cyIsImdsVEZNZXNoIiwiZ2xURlRhcmdldHMiLCJibGVuZFNoYXBlTmFtZXMiLCJleHRyYXMiLCJ0YXJnZXROYW1lcyIsImRlbHRhUG9zQnVmZmVyIiwiZGVsdGFOb3JCdWZmZXIiLCJkZWx0YVRhbkJ1ZmZlciIsImRlbHRhUG9zaXRpb25zIiwiZGVsdGFOb3JtYWxzIiwiZGVsdGFUYW5nZW50cyIsImJsZW5kU2hhcGUiLCJCbGVuZFNoYXBlIiwiYWRkRnJhbWUiLCJhZGRCbGVuZFNoYXBlIiwicG9zaXRpb25CdWZmZXIiLCJzZXRQb3NpdGlvbnMiLCJidWZmZXJEYXRhIiwibm9ybWFscyIsInNldE5vcm1hbHMiLCJ0ZXh0dXJlY29vcmRzIiwic2V0VVZzIiwidGV4dHVyZWNvb3JkczEiLCJ0ZXh0dXJlY29vcmRzMiIsInRleHR1cmVjb29yZHMzIiwidGV4dHVyZWNvb3JkczQiLCJ0ZXh0dXJlY29vcmRzNSIsInRleHR1cmVjb29yZHM2IiwidGV4dHVyZWNvb3JkczciLCJzZXRDb2xvcnMiLCJ0YW5nZW50cyIsInNldFRhbmdlbnRzIiwiam9pbnRzIiwic2V0Qm9uZUluZGljZXMiLCJ3ZWlnaHRzIiwic2V0Qm9uZVdlaWdodHMiLCJTY2VuZVBhcnNlciIsImNhbWVyYXMiLCJnbHRmQ2FtZXJhcyIsImNhbWVyYUlEIiwiY2FtZXJhIiwibWVzaElEIiwiX2NyZWF0ZUNhbWVyYSIsIl9jcmVhdGVSZW5kZXJlciIsImxpZ2h0SW5kZXgiLCJfY3JlYXRlQW5pbWF0b3IiLCJjYW1lcmFTY2hlbWEiLCJvcnRob2dyYXBoaWMiLCJwZXJzcGVjdGl2ZSIsIkNhbWVyYSIsInhtYWciLCJ5bWFnIiwiemZhciIsInpuZWFyIiwiaXNPcnRob2dyYXBoaWMiLCJuZWFyQ2xpcFBsYW5lIiwiZmFyQ2xpcFBsYW5lIiwib3J0aG9ncmFwaGljU2l6ZSIsImFzcGVjdFJhdGlvIiwieWZvdiIsImZpZWxkT2ZWaWV3IiwiZW5hYmxlZCIsInNraW5JRCIsImJsZW5kU2hhcGVXZWlnaHRzIiwic2tpblJlbmRlcmVyIiwic2tpbiIsInNraW5zIiwiTWVzaFJlbmRlcmVyIiwibWF0ZXJpYWxJbmRleCIsImdsdGZNZXNoUHJpbWl0aXZlcyIsInJlbWFwTWF0ZXJpYWxzIiwibXRsIiwic2V0TWF0ZXJpYWwiLCJfZ2V0RGVmYXVsdE1hdGVyaWFsIiwiZWxlbWVudCIsInNlbWFudGljIiwiZW5hYmxlVmVydGV4Q29sb3IiLCJnbHRmTWVzaGVzIiwiYW5pbWF0b3IiLCJBbmltYXRvciIsImFuaW1hdG9yU3RhdGVNYWNoaW5lIiwidW5pcXVlTmFtZSIsIm1ha2VVbmlxdWVTdGF0ZU5hbWUiLCJhbmltYXRvclN0YXRlIiwiX2RlZmF1bHRNYXRlcmlhbCIsIkJsaW5uUGhvbmdNYXRlcmlhbCIsIlNraW5QYXJzZXIiLCJnbHRmU2tpbnMiLCJpbnZlcnNlQmluZE1hdHJpY2VzIiwic2tlbGV0b24iLCJqb2ludENvdW50IiwiU2tpbiIsImludmVyc2VCaW5kTWF0cml4IiwiTWF0cml4Iiwiam9pbnRJbmRleCIsImpvaW50TmFtZSIsInJvb3RCb25lIiwiX2ZpbmRTa2VsZXRvblJvb3RCb25lIiwicGF0aHMiLCJ1bnNoaWZ0Iiwicm9vdE5vZGUiLCJUZXh0dXJlUGFyc2VyIiwic291cmNlIiwiaW1hZ2VzIiwibWltZVR5cGUiLCJpbWFnZU5hbWUiLCJleHQiLCJzdGFydHNXaXRoIiwiS1RYIiwiVGV4dHVyZTJEIiwidGV4dHVyZU5hbWUiLCJfcGFyc2VTYW1wbGVyIiwiYnVmZmVyVmlld0RhdGEiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0SW1hZ2VTb3VyY2UiLCJnZW5lcmF0ZU1pcG1hcHMiLCJtYWdGaWx0ZXIiLCJtaW5GaWx0ZXIiLCJ3cmFwUyIsIndyYXBUIiwiUG9pbnQiLCJCaWxpbmVhciIsIndyYXBNb2RlVSIsIl93cmFwTWFwIiwid3JhcE1vZGVWIiwiR0xURlRleHR1cmVXcmFwTW9kZSIsIkNsYW1wIiwiTWlycm9yIiwiUmVwZWF0IiwiVmFsaWRhdG9yIiwiYXNzZXQiLCJleHRlbnNpb25zVXNlZCIsImV4dGVuc2lvbnNSZXF1aXJlZCIsImdsdGZWZXJzaW9uIiwiaW5mbyIsImV4dGVuc2lvblJlcXVpcmVkIiwiR0xURlBhcnNlciIsInBpcGVzIiwiX3BpcGVzIiwicGlwZSIsImxhc3RQaXBlIiwiY2FuY2VsIiwiZGVmYXVsdFBpcGVsaW5lIiwiR0xURlJlc291cmNlIiwiZGVzdHJveSIsIl9kZXN0cm95ZWQiLCJFbmdpbmVPYmplY3QiLCJHTFRGTG9hZGVyIiwicGFyYW1zIiwiUHJlZmFiIiwiSERSTG9hZGVyIiwiX3BhcnNlSGVhZGVyIiwiZGF0YVBvc2l0aW9uIiwicGl4ZWxzIiwiX3JlYWRQaXhlbHMiLCJjdWJlU2l6ZSIsImN1YmVNYXBEYXRhIiwiX2NvbnZlcnRUb0N1YmVtYXAiLCJmYWNlSW5kZXgiLCJpbnB1dFdpZHRoIiwiaW5wdXRIZWlnaHQiLCJ0ZXh0dXJlUmlnaHQiLCJfY3JlYXRlQ3ViZW1hcERhdGEiLCJfZmFjZVJpZ2h0IiwidGV4dHVyZUxlZnQiLCJfZmFjZUxlZnQiLCJ0ZXh0dXJlVXAiLCJfZmFjZVVwIiwidGV4dHVyZURvd24iLCJfZmFjZUJvdHRvbSIsInRleHR1cmVGcm9udCIsIl9mYWNlRnJvbnQiLCJ0ZXh0dXJlQmFjayIsIl9mYWNlQmFjayIsInRleFNpemUiLCJmYWNlRGF0YSIsInRleHR1cmVBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5Iiwicm90RFgxIiwic3VidHJhY3QiLCJyb3REWDIiLCJfdGVtcDJWZWN0b3IzIiwiZHkiLCJmeSIsInh2MSIsIl90ZW1wM1ZlY3RvcjMiLCJ4djIiLCJfdGVtcDRWZWN0b3IzIiwiX3RlbXA1VmVjdG9yMyIsIm5vcm1hbGl6ZSIsIl9jYWxjUHJvamVjdGlvblNwaGVyaWNhbCIsIl9SR0JFVG9MaW5lYXIiLCJfbGluZWFyVG9SR0JNIiwiciIsImciLCJiIiwiYSIsInZEaXIiLCJ0aGV0YSIsImF0YW4yIiwicGhpIiwiYWNvcyIsImR4IiwicHgiLCJyb3VuZCIsInB5IiwiaW5wdXRZIiwiX3JlYWRTdHJpbmdMaW5lIiwidWludDhhcnJheSIsInN0YXJ0SW5kZXgiLCJsaW5lIiwiY2hhcmFjdGVyIiwiZW5kT2ZIZWFkZXIiLCJmaW5kRm9ybWF0IiwibGluZUluZGV4Iiwic2l6ZVJlZ2V4cCIsIm1hdGNoIiwiZXhlYyIsInBhcnNlSW50Iiwic2NhbkxpbmVXaWR0aCIsImRhdGFSR0JBIiwicG9zIiwicHRyRW5kIiwicmdiZVN0YXJ0Iiwic2NhbkxpbmVCdWZmZXIiLCJudW1TY2FuTGluZXMiLCJwdHIiLCJpc0VuY29kZWRSdW4iLCJieXRlVmFsdWUiLCJsIiwib2ZmIiwicG93IiwibWF4UmFuZ2UiLCJtYXhSR0IiLCJNIiwiY2VpbCIsIl9yaWdodEJvdHRvbUJhY2siLCJfcmlnaHRCb3R0b21Gcm9udCIsIl9yaWdodFVwQmFjayIsIl9yaWdodFVwRnJvbnQiLCJfbGVmdEJvdHRvbUJhY2siLCJfbGVmdEJvdHRvbUZyb250IiwiX2xlZnRVcEJhY2siLCJfbGVmdFVwRnJvbnQiLCJIRFIiLCJKU09OTG9hZGVyIiwiSEVBREVSX0xFTiIsIkNPTVBSRVNTRURfMkQiLCJnZXRNaXBtYXBzIiwia3R4Q29udGFpbmVyIiwibG9hZE1pcG1hcHMiLCJtaXBtYXBzIiwiZGF0YU9mZnNldCIsImJ5dGVzT2ZLZXlWYWx1ZURhdGEiLCJwaXhlbFdpZHRoIiwicGl4ZWxIZWlnaHQiLCJudW1iZXJPZk1pcG1hcExldmVscyIsImxldmVsIiwiaW1hZ2VTaXplIiwiSW50MzJBcnJheSIsIm51bWJlck9mRmFjZXMiLCJieXRlQXJyYXkiLCJpc1ZhbGlkIiwiaWRlbnRpZmllciIsImdldEVuZ2luZUZvcm1hdCIsImludGVybmFsRm9ybWF0IiwiR0xDb21wcmVzc2VkVGV4dHVyZUludGVybmFsRm9ybWF0IiwiUkdCX1MzVENfRFhUMV9FWFQiLCJUZXh0dXJlRm9ybWF0IiwiRFhUMSIsIlJHQkFfUzNUQ19EWFQ1X0VYVCIsIkRYVDUiLCJSR0JfRVRDMV9XRUJHTCIsIkVUQzFfUkdCIiwiUkdCOF9FVEMyIiwiRVRDMl9SR0IiLCJSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiIsIkVUQzJfUkdCQTUiLCJSR0JBOF9FVEMyX0VBQyIsIkVUQzJfUkdCQTgiLCJSR0JfUFZSVENfMkJQUFYxX0lNRyIsIlBWUlRDX1JHQjIiLCJSR0JBX1BWUlRDXzJCUFBWMV9JTUciLCJQVlJUQ19SR0JBMiIsIlJHQl9QVlJUQ180QlBQVjFfSU1HIiwiUFZSVENfUkdCNCIsIlJHQkFfUFZSVENfNEJQUFYxX0lNRyIsIlBWUlRDX1JHQkE0IiwiUkdCQV9BU1RDXzRYNF9LSFIiLCJBU1RDXzR4NCIsIlJHQkFfQVNUQ181WDVfS0hSIiwiQVNUQ181eDUiLCJSR0JBX0FTVENfNlg2X0tIUiIsIkFTVENfNng2IiwiUkdCQV9BU1RDXzhYOF9LSFIiLCJBU1RDXzh4OCIsIlJHQkFfQVNUQ18xMFgxMF9LSFIiLCJBU1RDXzEweDEwIiwiUkdCQV9BU1RDXzEyWDEyX0tIUiIsIkFTVENfMTJ4MTIiLCJmb3JtYXROYW1lIiwia2hyb25vc1RleHR1cmVDb250YWluZXJQYXJzZXIiLCJmYWNlc0V4cGVjdGVkIiwid2l0aE1pcG1hcHMiLCJtYXBFbmdpbmVGb3JtYXQiLCJoZWFkZXJEYXRhVmlldyIsImVuZGlhbm5lc3MiLCJsaXR0bGVFbmRpYW4iLCJwYXJzZWRSZXN1bHQiLCJnbFR5cGUiLCJnbFR5cGVTaXplIiwiZ2xGb3JtYXQiLCJnbEludGVybmFsRm9ybWF0IiwiZ2xCYXNlSW50ZXJuYWxGb3JtYXQiLCJwaXhlbERlcHRoIiwibnVtYmVyT2ZBcnJheUVsZW1lbnRzIiwibG9hZFR5cGUiLCJlbmdpbmVGb3JtYXQiLCJwYXJzZVNpbmdsZUtUWCIsImt0eCIsInBhcnNlQ3ViZUtUWCIsImRhdGFBcnJheSIsIm1pcG1hcHNGYWNlcyIsIktUWEN1YmVMb2FkZXIiLCJ1cmxzIiwicGFyc2VkRGF0YSIsIm1pcG1hcCIsIm1pcGxldmVsIiwiS1RYQ3ViZSIsIktUWExvYWRlciIsImJpbiIsIk1hdGVyaWFsTG9hZGVyIiwianNvbiIsInNoYWRlckRhdGEiLCJrZXkiLCJtYXRlcmlhbFNoYWRlckRhdGEiLCJzZXRWZWN0b3IyIiwic2V0VmVjdG9yMyIsInNldFZlY3RvcjQiLCJzZXRDb2xvciIsInNldEZsb2F0IiwidGV4dHVyZVByb21pc2VzIiwic2V0VGV4dHVyZSIsInNoYWRlciIsIm1hY3JvcyIsInJlbmRlclN0YXRlIiwiUEJSQmFzZU1hdGVyaWFsIiwiU2hhZGVyIiwiZmluZCIsImVuYWJsZU1hY3JvIiwiTWF0ZXJpYWwiLCJCdWZmZXJSZWFkZXIiLCJfZGF0YVZpZXciLCJfbGl0dGxlRW5kaWFuIiwiX29mZnNldCIsIm5leHRVaW50OCIsImdldFVpbnQ4IiwibmV4dFVpbnQxNiIsImdldFVpbnQxNiIsIm5leHRVaW50MzIiLCJuZXh0SW50MzIiLCJnZXRJbnQzMiIsIm5leHRJbnQzMkFycmF5IiwibGVuIiwibmV4dEZsb2F0MzIiLCJnZXRGbG9hdDMyIiwibmV4dEZsb2F0MzJBcnJheSIsIm5leHRVaW50MzJBcnJheSIsIm5leHRVaW50OEFycmF5IiwibmV4dFVpbnQ2NCIsImxlZnQiLCJyaWdodCIsIm5leHRTdHIiLCJzdHJCeXRlTGVuZ3RoIiwibmV4dEltYWdlRGF0YSIsIm5leHRJbWFnZXNEYXRhIiwiaW1hZ2VzTGVuIiwiaW1hZ2VzRGF0YSIsInNraXAiLCJieXRlcyIsInNjYW4iLCJtYXhCeXRlTGVuZ3RoIiwidGVybSIsImltYWdlTWFwcGluZyIsImRlY29kZXJNYXAiLCJkZWNvZGVyIiwiRmlsZUhlYWRlciIsInRvdGFsTGVuZ3RoIiwiaGVhZGVyTGVuZ3RoIiwidG90YWxMZW4iLCJmaWxlVmVyc2lvbiIsInR5cGVMZW4iLCJ0eXBlVWludDhBcnJheSIsIm5hbWVMZW4iLCJuYW1lVWludDhBcnJheSIsImRhdGFMZW5ndGgiLCJNZXNoRGVjb2RlciIsImJ1ZmZlclJlYWRlciIsIm1vZGVsTWVzaCIsImpzb25EYXRhU3RyaW5nIiwiZW5jb2RlZE1lc2hEYXRhIiwiY29weUZyb20iLCJmbG9hdDMyQXJyYXkiLCJzdGFydCIsImVuZCIsImZsb2F0MzJBcnJheVRvVmVjdG9yMyIsInV2cyIsImZsb2F0MzJBcnJheVRvVmVjdG9yMiIsInV2MSIsInV2MiIsInV2MyIsInV2NCIsInV2NSIsInV2NiIsInV2NyIsImZsb2F0MzJBcnJheVRvVkNvbG9yIiwiZmxvYXQzMkFycmF5VG9WZWN0b3I0IiwiYmxlbmRTaGFwZXMiLCJibGVuZFNoYXBlRGF0YSIsImZyYW1lcyIsImZyYW1lRGF0YSIsInBvc2l0aW9uQXJyYXkiLCJkZWx0YVBvc2l0aW9uIiwibm9ybWFsc0FycmF5IiwidGFuZ2VudHNBcnJheSIsInN1Yk1lc2hlcyIsInN1Yk1lc2giLCJUZXh0dXJlMkREZWNvZGVyIiwib2JqZWN0SWQiLCJhbmlzb0xldmVsIiwiZm9ybWF0IiwiaXNQaXhlbEJ1ZmZlciIsIm1pcENvdW50IiwidGV4dHVyZTJEIiwicGl4ZWxCdWZmZXIiLCJfb2JqZWN0UG9vbCIsImNvbXBsZXRlZENvdW50Iiwib25Db21wbGV0ZSIsIlJlZmxlY3Rpb25QYXJzZXIiLCJyZWdpc3RlckN1c3RvbVBhcnNlQ29tcG9uZW50IiwiaGFuZGxlIiwiY3VzdG9tUGFyc2VDb21wb25lbnRIYW5kbGVzIiwicGFyc2VFbnRpdHkiLCJlbnRpdHlDb25maWciLCJnZXRFbnRpdHlCeUNvbmZpZyIsImlzQWN0aXZlIiwiYXNzZXRSZWZJZCIsInJlZklkIiwiaXNDbG9uZSIsInBhcnNlQ2xhc3NPYmplY3QiLCJDbGFzcyIsImdldENsYXNzIiwiY2xhc3MiLCJjb25zdHJ1Y3RQYXJhbXMiLCJpbnN0YW5jZSIsInBhcnNlUHJvcHNBbmRNZXRob2RzIiwicGFyc2VCYXNpY1R5cGUiLCJpc0FycmF5IiwiX2lzQ2xhc3MiLCJfaXNSZWYiLCJtZXRob2RzIiwibWV0aG9kTmFtZSIsIm1ldGhvZFBhcmFtcyIsInBhcnNlTWV0aG9kIiwicHJvcHMiLCJjb25zdHJ1Y3RvciIsInBhcmFtIiwiTWFwIiwiUHJlZmFiUGFyc2VyIiwicGFyc2VDaGlsZHJlbiIsImVudGl0aWVzQ29uZmlnIiwicGFyZW50SWQiLCJnZXQiLCJjaGlsZElkIiwiQ29tcG9uZW50TWFwIiwiUGFydGljbGVSZW5kZXJlciIsIlNjcmlwdCIsIlNwcml0ZU1hc2siLCJTcHJpdGVSZW5kZXJlciIsIlRleHRSZW5kZXJlciIsIkludGVycG9sYWJsZVZhbHVlVHlwZSIsIkZsb2F0QXJyYXkiLCJBbmltYXRpb25DbGlwRGVjb2RlciIsImV2ZW50c0xlbiIsImV2ZW50IiwiQW5pbWF0aW9uRXZlbnQiLCJmdW5jdGlvbk5hbWUiLCJwYXJhbWV0ZXIiLCJ2YWwiLCJhZGRFdmVudCIsImN1cnZlQmluZGluZ3NMZW4iLCJjb21wb25lbnRTdHIiLCJwcm9wZXJ0eSIsImtleXNMZW4iLCJjdXJ2ZVR5cGUiLCJBbmltYXRpb25GbG9hdEN1cnZlIiwiQW5pbWF0aW9uQXJyYXlDdXJ2ZSIsIkFuaW1hdGlvblZlY3RvcjJDdXJ2ZSIsIkFuaW1hdGlvblZlY3RvcjRDdXJ2ZSIsIkFuaW1hdGlvbkNvbG9yQ3VydmUiLCJTY2VuZVBhcnNlckNvbnRleHQiLCJvcmlnaW5hbERhdGEiLCJlbnRpdHlNYXAiLCJjb21wb25lbnRzIiwiYXNzZXRzIiwiZW50aXR5Q29uZmlnTWFwIiwicm9vdElkcyIsImNsZWFyIiwiX2VuZ2luZSIsIl9vcmdhbml6ZUVudGl0aWVzIiwiYmluZCIsIl9wYXJzZUNvbXBvbmVudHMiLCJfY2xlYXJBbmRSZXNvbHZlU2NlbmUiLCJfcmVqZWN0IiwiX3Jlc29sdmUiLCJfcGFyc2VFbnRpdGllcyIsImVudGl0aWVzTWFwIiwiaWQiLCJyb290SWQiLCJyb290RW50aXRpZXMiLCJhZGRSb290RW50aXR5IiwiY29tcG9uZW50Q29uZmlnIiwiY29tcG9uZW50IiwiZ2V0Q29tcG9uZW50Iiwic2NlbmVEYXRhIiwiU2NlbmUiLCJNZXNoTG9hZGVyIiwiRWRpdG9yVGV4dHVyZUxvYWRlciIsIm9iamVjdCIsIk1lc2giLCJTb3VyY2VGb250TG9hZGVyIiwiU291cmNlRm9udCIsIlNwcml0ZUF0bGFzTG9hZGVyIiwiX3RlbXBSZWN0IiwiUmVjdCIsIl90ZW1wVmVjMiIsIl90ZW1wVmVjNCIsIl8iLCJjb25maWdQcm9taXNlIiwiYXRsYXNEYXRhIiwiYXRsYXNJdGVtIiwiYXRsYXNJdGVtcyIsInNwcml0ZXMiLCJzcHJpdGVBdGxhcyIsIl9hZGRTcHJpdGUiLCJfbWFrZVNwcml0ZSIsImF0bGFzSXRlbXNMZW4iLCJTcHJpdGVBdGxhcyIsImNvbmZpZyIsInJlZ2lvbiIsImF0bGFzUmVnaW9uT2Zmc2V0IiwiYXRsYXNSZWdpb24iLCJwaXZvdCIsImJvcmRlciIsInNwcml0ZSIsIlNwcml0ZSIsImgiLCJpbnZXIiwiaW52SCIsIm9mZnNldExlZnQiLCJvZmZzZXRSaWdodCIsIm9mZnNldEJvdHRvbSIsIm9mZnNldFRvcCIsImF0bGFzUm90YXRlZCIsIlNwcml0ZUxvYWRlciIsImJlbG9uZ1RvQXRsYXMiLCJhdGxhcyIsImdldFNwcml0ZSIsImZ1bGxQYXRoIiwiVGV4dHVyZTJETG9hZGVyIiwiX3BsYXRmb3JtVGV4dHVyZSIsImluZGV4T2YiLCJzcGxpdFBhdGgiLCJUZXh0dXJlQ3ViZUxvYWRlciIsInRleCIsIkFuaW1hdGlvbkNsaXBMb2FkZXIiLCJTY2VuZUxvYWRlciIsImluaXRWaXJ0dWFsUmVzb3VyY2VzIiwiZmlsZXMiLCJhbWJpZW50IiwiYW1iaWVudExpZ2h0UHJvbWlzZSIsImRpZmZ1c2VJbnRlbnNpdHkiLCJzcGVjdWxhckludGVuc2l0eSIsImRpZmZ1c2VTb2xpZENvbG9yIiwiYmFja2dyb3VuZCIsImJhY2tncm91bmRQcm9taXNlIiwiQmFja2dyb3VuZE1vZGUiLCJTb2xpZENvbG9yIiwic29saWRDb2xvciIsIlNreSIsInNreSIsInNreU1hdGVyaWFsIiwiU2t5Qm94TWF0ZXJpYWwiLCJ0ZXh0dXJlQ3ViZU1hcCIsInRleHR1cmVEZWNvZGVSR0JNIiwiUHJpbWl0aXZlTWVzaCIsImNyZWF0ZUN1Ym9pZCIsIlRleHR1cmUiLCJzaGFkb3ciLCJjYXN0U2hhZG93cyIsInNoYWRvd1Jlc29sdXRpb24iLCJzaGFkb3dEaXN0YW5jZSIsInNoYWRvd0Nhc2NhZGVzIiwiZm9nIiwiZm9nTW9kZSIsImZvZ1N0YXJ0IiwiZm9nRW5kIiwiZm9nRGVuc2l0eSIs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SSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEosSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQWdFRDtBQUNPLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDM0MsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JILElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0osSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN0RSxRQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ3RELFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekssWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELFlBQVksUUFBUSxFQUFF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
4671
+ exports.registerGLTFExtension = registerGLTFExtension;
4672
+ //# sourceMappingURL=main.js.map